Hive實現自增列的兩種方法


多維數據倉庫中的維度表和事實表一般都需要有一個代理鍵,作為這些表的主鍵,代理鍵一般由單列的自增數字序列構成。Hive沒有關系數據庫中的自增列,但它也有一些對自增序列的支持,通常有兩種方法生成代理鍵:使用row_number()窗口函數或者使用一個名為UDFRowSequence的用戶自定義函數(UDF)。


用row_number()函數生成代理鍵

INSERT OVERWRITE TABLE my_hive_table
select row_number() over (order by create_time asc) as id, key
from my_mid_table

 

用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 my_test_table
select row_sequence() as id, key
from my_mid_table

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