Hive導入數據

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查詢的輸出結果存放到一個新的表每每很是方便,這是由於輸出結果太多,不適宜顯示在控制檯上或基於輸出結果還有其餘後續處理。新表的列定義是從Select 子句所檢索的列導出的。
  • CTAS (Create Table ... As Select的簡稱) 操做是原子的,所以若是Select查詢因爲某種緣由失敗,是不會建立新表的。
  • hive的跨數據庫查詢和普通關係型數據庫同樣,database.T_Name(default.logs)。
  • 下面語句:logs是分區表,而新cteate的是普通表。  
hive> create table t081901 > as                         
    > select * from default.logs;
相關文章
相關標籤/搜索