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;