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