很多時候,我們需要將Hive的查詢(select)結果保存起來,方便進一步處理或查看。
在Hive里面提供了不同的方式來保存查詢結果,在這里做下總結:
一、保存結果到本地
$ hive -e "select user, login_timestamp from user_login" > /tmp/out.txt
方法2:使用INSERT OVERWRITE LOCAL DIRECTORY結果到本地
hive> insert overwrite local directory "/tmp/out/" > select user, login_time from user_login;
上面的命令會將select user, login_time from user_login的查詢結果保存到/tmp/out/本地目錄下。
我們查看一下/tmp/out/目錄下的文件,發現命令執行后,多了兩個文件:
$ find /tmp/out/ -type f /tmp/out/.000000_0.crc /tmp/out/000000_0
默認的字段分割符有時候可能不太方便,幸好Hive提供了修改分割符號的方法,我們只要在導出時指定就可以了:
hive> insert overwrite local directory "/tmp/out/" > row format delimited fields terminated by "\t" > select user, login_time from user_login;
二、保存結果到hdfs
保存查詢結果到hdfs很簡單,使用INSERT OVERWRITE DIRECTORY就可以完成操作:
hive> insert overwrite directory "/tmp/out/" > row format delimited fields terminated by "\t" > select user, login_time from user_login;
三、保存結果到HIVE表
如果結果表已經建好,可以使用INSERT OVERWRITE TABLE將結果寫入結果表:
login_time bigint hive> insert overwrite table query_result > select user, login_time from user_login;
當然,HIVE也提供了追加方式INSERT TABLE,可以在原有數據后面加上新的查詢結果。在上面這個例子基礎上,我們再追加一個查詢結果:
hive> insert into table query_result > select * from query_result;
方法2、如果需要新建一個表,用於存放查詢結果,可以使用CREATE TABLE AS SELECT語法
hive> create table query_result > as > select user, login_time from user_login;
insert overwrite的用法:
INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2 ...) select_statement1 FROM from_statement; -- 例如: insert overwrite table dev.dev_spark_demo_temp partition (dt = '2019-08-08') select pop_vender_id, sale_ord_id from app.app_sjzt_payout_apply_with_order where dt = '2019-08-05'
如果查詢出來的數據類型和插入表格對應的列數據類型不一致,將會進行轉換,但是不能保證轉換一定成功,比如如果查詢出來的數據類型為int,插入表格對應的列類型為string,可以通過轉換將int類型轉換為string類型;
但是如果查詢出來的數據類型為string,插入表格對應的列類型為int,轉換過程可能出現錯誤,因為字母就不可以轉換為int,轉換失敗的數據將會為NULL。
insert overwrite是刪除原有數據然后在新增數據,如果有分區那么只會刪除指定分區數據,其他分區數據不受影響。
原文鏈接:https://blog.csdn.net/qq_41797451/article/details/80346361
Hive Insert命令
insert 語法詳細描述
https://blog.csdn.net/Post_Yuan/article/details/62887619