hive匯入資料到分割槽表/動態匯入
阿新 • • 發佈:2019-01-22
首先說明,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字串的比較也可以直接用 "="。