1.导入数据数据库
除了前面使用Load Data方式把文件复制或移动到表的目录外,还有如下几种方式:
spa
1). Insert Overwrite / Into Table code
hive> insert overwrite table school > select age,name from student;
2). 对于分区的表,可使用Partition子句来指明数据要插入哪一个分区:blog
注意:对于查询出的值不知足分区表列的类型,则会插入NULLget
insert overwrite table logs partition(date='2015-01-01',country='CN') select name,age from student;
3) [动态分区插入]能够在Select语句中经过使用分区值来动态指明分区 it
//必须指定,否则报错
set hive.exec.dynamic.partition.mode=nonstrict;
INSERT OVERWRITE TABLE target PARTITION (dt) select col1,col2,dt from source;
4) 当前Hive不支持insert into table T_Name values(v_2,v_2); 但可使用下面语句达到此效果io
from stu insert into table stu select 99,'lisi',2 limit 1;
2.多表插入table
在HQL中,能够把Insert语句倒过来,把From子句放在最前面,查询的效果是同样的:class
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 t081901 > as
> select * from default.logs;