保存Hive查詢結果的方法 insert overwrite 用法


很多時候,我們需要將Hive的查詢(select)結果保存起來,方便進一步處理或查看。
在Hive里面提供了不同的方式來保存查詢結果,在這里做下總結:

一、保存結果到本地

方法1:調用hive標准輸出,將查詢結果寫到指定的文件中
這個方法最為常見,筆者也經常使用。sql的查詢結果將直接保存到/tmp/out.txt中:
$ 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表

方法1、已經建好結果表,使用INSERT OVERWRITE TABLE以覆蓋方式寫入結果表

如果結果表已經建好,可以使用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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM