Hive實現自增列的兩種方法

2022-05-05 07:24:08 字數 1019 閱讀 1818

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

insert overwrite table

my_hive_table

select row_number() over (order

by create_time asc) as id, key

from my_mid_table

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億的情況下依然能夠快速執行。

Hive實現自增列的兩種方法

多維資料倉儲中的維度表和事實表一般都需要有乙個 鍵,作為這些表的主鍵,鍵一般由單列的自增數字序列構成。hive沒有關聯式資料庫中的自增列,但它也有一些對自增序列的支援,通常有兩種方法生成 鍵 使用row number 視窗函式或者使用乙個名為udfrowsequence的使用者自定義函式 udf 假...

Hive實現自增列的兩種方法

多維資料倉儲中的維度表和事實表一般都需要有乙個 鍵,作為這些表的主鍵,鍵一般由單列的自增數字序列構成。hive沒有關聯式資料庫中的自增列,但它也有一些對自增序列的支援,通常有兩種方法生成 鍵 使用row number 視窗函式或者使用乙個名為udfrowsequence的使用者自定義函式 udf 假...

Hive實現自增列的兩種方法

多維資料倉儲中的維度表和事實表一般都需要有乙個 鍵,作為這些表的主鍵,鍵一般由單列的自增數字序列構成。hive沒有關聯式資料庫中的自增列,但它也有一些對自增序列的支援,通常有兩種方法生成 鍵 使用row number 視窗函式或者使用乙個名為udfrowsequence的使用者自定義函式 udf 假...