1. 程式人生 > >hive匯入資料到分割槽表/動態匯入

hive匯入資料到分割槽表/動態匯入

首先說明,insert into tab_name (clumn1,…) values (…) 這種格式hive是不支援的
從A表中查詢資料插入到B分割槽表中
hive> insert into table B

> partition (分割槽1 = '',分割槽2 = '')

 > select id, name

 > from A

 > where ...;

如果使用

  >insert into table B select id,name from A where ... 
  >partition (分割槽1 = '',分割槽2 = '');

會報錯 :parseexception,解釋是hive自己軟體的問題,需要在子查詢中新增別名解決問題。

動態分割槽:
hive > set hive.exec.dynamic.partition.mode=nonstrict;

 >set hive.exec.dynamic.partition=true;//前兩步修改預設設定,支援動態分割槽

> insert into table B

 > partition (date,age)

 > select id, name,

 > date, age

 > from A

 > where ...;


分割槽表簡單來說就是對一張大表根據不同的條件進行分割槽,加快查詢速度,而分割槽目錄中,多個欄位代表著不同的層級關係,寫在最前面的分割槽是優先順序最高的。

PARTITIONED BY子句中定義列,是表中正式的列,成為分割槽列。但是資料檔案中並沒有這些值,僅代表目錄。 

partition (dt='2001-01-01',country='GB'); 上傳資料時,把資料分別上傳到不同分割槽,也就是不同子目錄下。

查詢分割槽表使用where條件查詢,不多做描述。


多說兩句,建表的時候一定要指定字元分割方式,"\t"等,否則在匯入資料後,查詢會出現很多null,如果是自己建立的檔案進行匯入,那每一個tab鍵都需要手動輸入,如果是複製貼上在匯入資料的時候可能會出現問題。
hql字串的比較也可以直接用 "="。