天天看點

Hive實作自增列的兩種方法

多元資料倉庫中的次元表和事實表一般都需要有一個代理鍵,作為這些表的主鍵,代理鍵一般由單列的自增數字序列構成。hive沒有關系資料庫中的自增列,但它也有一些對自增序列的支援,通常有兩種方法生成代理鍵:使用row_number()視窗函數或者使用一個名為udfrowsequence的使用者自定義函數(udf)。

  假設有次元表tbl_dim和過渡表tbl_stg,現在要将tbl_stg的資料裝載到tbl_dim,裝載的同時生成次元表的代理鍵。

用row_number()函數生成代理鍵

        上面語句中,先查詢次元表中已有記錄最大的代理鍵值,如果次元表中還沒有記錄,利用coalesce函數傳回0。然後使用cross join連接配接生成過渡表和最大代理鍵值的笛卡爾集,最後使用row_number()函數生成行号,并将行号與最大代理鍵值相加的值,作為新裝載記錄的代理鍵。

用udfrowsequence生成代理鍵

        hive-contrib-2.0.0.jar中包含一個生成記錄序号的自定義函數udfrowsequence。上面的語句先加載jar包,然後建立一個名為row_sequence()的臨時函數作為調用udf的接口,這樣可以為查詢的結果集生成一個自增僞列。之後就和row_number()寫法類似了,隻不過将視窗函數row_number()替換為row_sequence()函數。

轉自:https://blog.csdn.net/wzy0623/article/details/53893174

繼續閱讀