Hive實現自增列


1、用row_number()函數生成代理鍵

INSERT OVERWRITE TABLE testTable

select row_number() over (order by a.acc_no) id,

a.acc_no

from ba_pay_out.app_intf_web_cli_his_view a

 

2、用UDFRowSequence生成代理鍵

add jar viewfs://hadoop-meituan/user/hadoop-data/user_upload/weichao05_hive-contrib-3.1.0.jar;

create temporary function row_sequence as 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence';

INSERT OVERWRITE TABLE testTable

select row_sequence() id,

a.acc_no

from ba_pay_out.app_intf_web_cli_his_view a

 

hive-contrib-3.1.0.jar中包含一個生成記錄序號的自定義函數udfrowsequence。上面的語句先加載JAR包,然后創建一個名為row_sequence()的臨時函數作為調用UDF的接口,這樣可以為查詢的結果集生成一個自增偽列。之后就和row_number()寫法類似了,只不過將窗口函數row_number()替換為row_sequence()函數。

 

以上兩種方法,第二種的性能要由於第一種,第一種執行慢,且當數據超過約幾千萬(本人經驗超過4千萬)時,就報內存不夠的了,這個可能與hadoop的資源配置也有關系,而第二中方法在數據超過1.5億的情況下依然能夠快速運行。

 


免責聲明!

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



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