标签:
1.导入数据
除了前面使用的LOAD DATA方式把文件复制或移动到表的目录外,还有以下几种方式:
1). Insert Overwrite Table
hive> insert overwrite table school > select age,name from student;
2). 对于分区的表,可以使用PARTITION子句来指明数据要插入哪个分区:
注意:对于查询出的值不满足分区表列的类型,则会插入NULL
insert overwrite table logs partition(date=‘2015-01-01‘,country=‘CN‘) select name,age from student;
3). OVERWRITE关键字在这两种情况下都是强制的。这意味着目标表(第一个例子)或2010-01-01分区(第二个例子)中原有的内容会被SELECT语句的结果替换掉。
4) 目前,Hvie-0.13 尚不支持用INSERT语句向已填充内容的非分区表或分区表添加操作记录。
即不能使用不带OverWrite关键字的Load Data操作。
5) 从Hive0.6.0开始,可以在SELEC语句中通过使用分区值来动态指明分区:
这种方法称为【动态分区插入】。这一特性默认是关闭的,所以在使用前需要先把hive.exec.dynamic.partition设为true。
INSERT OVERWRITE TABLE target PARTITION (dt) select col1,col2,dt from source;
6) 和其他数据库不同,Hive(现在)并不支持在INSERT语句中直接给出一组记录的文字形式。
也就是说,Hive不允许Insert into...Values形式的语句。
2.多表插入
在HQL中,可以把INSERT语句倒过来,把FROM子句放在最前面,查询的效果是一样的:
from student insert overwrite table logs partition(date=‘2015-01-01‘,country=‘CN‘) select age,name;
可以在同一个查询中使用多个INSERT子句。这种“多表插入”方法比使用多个单独的INSERT语句效率更高,因为只需要扫描一遍源表就可以生成多个不相交的输出。
下面的例子根据气象数据集来计算多种不同的统计数据:
FROM records2 INSERT OVERWRITE TABLE stations_by_year SELECT year,COUNT(DISTINCT station) GROUP BY year INSERT OVERWRITE TABLE records_by_year SELECT year,COUNT(1) GROUP BY year INSERT OVERWRITE TABLE good_redcords_by_year SELECT year,COUNT(1) WHERE temperature !=9999 AND (quality=0 OR quality=1 OR quality=4 OR quality=5 OR quality=9) GROUP BY year;
这里只有一个源表(records2),但有三个表用于存放针对源表的三种不同查询所生成的结果。
3.Create Table … Aa Select
hive> create table target > as select age,name > from student;
标签:
原文地址:http://www.cnblogs.com/skyl/p/4736634.html