装载数据
1、以LOAD的方式装载数据
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION(partcol1=val1, partcol2=val2 ...)]
1) 使用LOCAL这个关键字,那么这个路径应该为本地文件系统路径,是拷贝本地数据到位于HDFS上的目标位置,而不使用LOCAL这个关键字,那么这个路径应该为HDFS中的路径,是把本身就在HDFS上的数据转移到目标位置。 同时,因为文件是以这种方式移动的,Hive要求源文件和目标文件以及目录应该在同一个文件系统中,不可以使用LOAD DATA 语句将数据从一个集群的HDFS中转移到另一个集群的HDFS中。
2) 如果使用OVERWRITE 关键字,那么目标文件夹中之前存在的数据将会删除,如果没有这个关键字,而目标文件夹中已经存在同名的文件时,会保留之前的文件并且会重新命名新文件为“之前的文件名_序列号”(这是在Hive v0.9.0版本中修复的,之前的版本是有同名的文件会被覆盖重写)。
3) 如果目标表是分区表那么需要使用PARTITION 的子句,而且还必须为每个分区的键指定一个值。
4) 对于 INPATH 子句使用的文件路径不可以包含任何文件夹。
5) Hive不会验证装载的数据和表的模式是否匹配,而会验证文件格式是否和表结构定义的一致。如,表创建时定义的存储格式是sequencefile,那么转载进去的文件也应该是sequencefile 格式的文件。
 
2、通过SELECT 语句向表中插入数据
insert overwrite table user_install_status2 partition (dt='20141117')
select aid,pkgname,uptime,type,country,gpcategory from
user_install_status
where dt='20141117';
1)使用了OVERWRITE 关键字,因此之前分区的内容将会被覆盖掉。而不使用OVERWRITE 或者使用INTO替换掉OVERWRITE 的话,那么Hive将会以追加的方式写入数据(这是在Hive v0.8.0版本才有的)。
2) 如果分区特别的多会多次扫描表进行插入数据,非常耗费资源。可以用下面的方式只扫描一次表就把所有的分区的数据进行插入。
FORM user_install_status
insert overwrite table user_install_status2 partition (dt='20141117')
select aid,pkgname,uptime,type,country,gpcategory where dt='20141117'
insert overwrite table user_install_status2 partition (dt='20141118')
select aid,pkgname,uptime,type,country,gpcategory where dt='20141118'
insert overwrite table user_install_status2 partition (dt='20141119')
select aid,pkgname,uptime,type,country,gpcategory where dt='20141119'
insert overwrite table user_install_status2 partition (dt='20141120')
select aid,pkgname,uptime,type,country,gpcategory where dt='20141120';
 
3、动态分区插入
insert overwrite table user_install_status2 partition (dt)
select ....., dt
from user_install_status ;
1)Hive 是根据SELECT 语句的最后一列来确定分区字段dt 的值。
2)动态分区默认情况下没有开启,要通过设置如下两个参数来开启
set hive.exec.dynamic.partition=true; 开启动态分区
set hive.exec.dynamic.partition.mode=nonstrict;设为非严格模式执行,严格模式要求至少一个分区字段是静态的
 
4、单个查询语句中创建表并加载数据
create table user_install_status3 as
select aid, pkgname, uptime, type, country, gpcategory
from user_install_status
where dt='20141228';
1) 这种做法往往是从一个大的数据集中抽取一个小的数据集。
2)这种做法不能用于外部表。

使用 Hive装载数据的几种方式的更多相关文章

  1. hive 导出数据的几种方式

    1.使用insert导出 这种方式的优点在于既可以导出到hdfs上还可以导出到本地目录 下面以导出emp表中数据为例 insert overwrite local directory "/o ...

  2. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  3. 【代码笔记】iOS-向服务器传JSON数据的两种方式

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  4. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  5. .NET MVC控制器向视图传递数据的四种方式

    .NET MVC控制器向视图传递数据的四种方式: 1.ViewBag  ViewBag.Mvc="mvc"; 2.ViewData ViewBag["Mvc"] ...

  6. Linux就这个范儿 第18章 这里也是鼓乐笙箫 Linux读写内存数据的三种方式

    Linux就这个范儿 第18章  这里也是鼓乐笙箫  Linux读写内存数据的三种方式 P703 Linux读写内存数据的三种方式 1.read  ,write方式会在用户空间和内核空间不断拷贝数据, ...

  7. Solr 删除数据的几种方式

    原文出处:http://blog.chenlb.com/2010/03/solr-delete-data.html 有时候需要删除 Solr 中的数据(特别是不重做索引的系统中,在重做索引期间).删除 ...

  8. 讨论HTTP POST 提交数据的几种方式

    转自:http://www.cnblogs.com/softidea/p/5745369.html HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PU ...

  9. MATLAB 显示输出数据的三种方式

    MATLAB 显示输出数据的三种方式 ,转载 https://blog.csdn.net/qq_35318838/article/details/78780412 1.改变数据格式 当数据重复再命令行 ...

随机推荐

  1. 转账示例(一):Dao层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)

    缺点:Dao层面把Service层面的操作完成了,不利于后期的代码修改和重构 1.自行创建C3P0Util account数据库 2.jar包 3.Dao层面 接口: package com.lear ...

  2. JS和CSS中引号的使用

        font-family属性值如果是英文可以不加引号,如果是中文按照CSS标准则应该加引号,但不加引号也没关系.比如:font-family:Arial,"宋体"," ...

  3. 使用NPOI生成Excel级联列表

    目录 1    概要    1 2    磨刀不误砍柴工——先学会Excel中的操作    2 3    利用NPOI生成导入模板    7 3.1    设置workbook&sheet   ...

  4. java抽象类和抽象方法之间的关系

    抽象类和抽象方法之间的关系有抽象方法的类,一定是抽象类:抽象类不一定有抽象方法当子类继承抽象类时,必须要将抽象类中的抽象方法全部实现(或者称为重写),否则子类依然是抽象类因为子类是继承父类全部内容,所 ...

  5. 简谈-Python的注释、变量类型、标识符及关键字

    在Python程序中,要想支持中文输出,则要在代码前面添加 标识符:开发人员在程序中自定义的一些符号和名称 标示符是自己定义的,如变量名 .函数名等 标识符的规则:  标示符由字目.下划线和数字组成, ...

  6. 统计数据方面SQL与HQL

    因为HQL是面向对象的,所以对于统计数据方面使用HQL时不合适的,其实HQL最终还是会转化成SQL语句,项目里使用HQL语句应该是为了标准规范化. 统计的数据:同一个表,同一个字段,不同属性,统计不同 ...

  7. 今天开始上Linux运维课。

    2017年4月25日,北京.沙河老男孩教育,Linux运维. 我是其中一员,希望顺利!

  8. Struts2框架的基本使用(三)

    上篇 Struts2框架的基本使用(二)介绍了Action和result的相关配置操作,本篇接着介绍剩下的异常处理机制和Convention插件的使用.下篇文章介绍的是Struts2框架中标签库的使用 ...

  9. JQuery hover鼠标变换

    一般而言,我们为非按钮.链接等元素添加hover事件时,虽然能够处理悬停事件,但是鼠标却并没有变化,会造成悬停事件不明显的结果,为此,我们可以添加CSS样式cursor:pointer,使得该元素的悬 ...

  10. Java中this关键字的作用

    转载: 原文地址:http://www.cnblogs.com/lzq198754/p/5767024.html 一.this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变 ...