字段 新增hive Hive如何實現自增序列

2021-10-14 17:15:11 字數 1417 閱讀 4260

hive實現自增序列及元資料問題​mp.weixin.qq.com

在利用資料倉儲進行資料處理時,通常有這樣乙個業務場景,為乙個hive表新增一列自增字段(比如事實表和維度表之間的"**主鍵")。雖然hive不像rdbms如mysql一樣本身提供自增主鍵的功能,但它本身可以通過函式來實現自增序列功能:利用row_number()視窗函式或者使用udfrowsequence。

示例:table_src是我們經過業務需求處理的到的中間表資料,現在我們需要為table_src新增一列自增序列欄位auto_increment_id,並將最終資料儲存到table_dest中。

1. 利用row_number函式

場景1:table_dest中目前沒有資料

insert into table table_destselect row_number() over(order by 1) as auto_increment_id, table_src.* from table_src;
場景2: table_dest中有資料,並且已經經過新增自增字段處理

insert into table table_destselect (row_number() over(order by 1) + dest.max_id) auto_increment_id, src.* from table_src src cross join (select max(auto_increment_id) max_id from table_dest) dest;
2. 利用udfrowsequence首先hive環境要有hive-contrib相關jar包,然後執行

create temporary function row_sequence as 'org.apache.hadoop.hive.contrib.udf.udfrowsequence';
針對上述場景一,可通過以下語句實現:

insert into table table_destselect row_sequence() auto_increment_id, table_src.* from table_src;
場景2實現起來也很簡單,這裡不在贅述。

但是,需要注意二者的區別:

row_number函式是對整個資料集做處理,自增序列在當次排序中是連續的唯一的。

udfrowsequence是按照任務排序,但是乙個sql可能併發執行的job不止乙個,而每個job都會從1開始各自排序,所以不能保證序號全域性唯一。可以考慮將udfrowsequence擴充套件到乙個第三方儲存系統中,進行序號邏輯管理,來最終實現全域性的連續自增唯一序號。

mysql 新增字段 MySql新增字段命令

mysql 新增字段 alter table t user add column user age int 11 default null comment 年齡 after user email mysql 修改字段 alter table user10 modify email varchar 2...

ORACLE新增字段 刪除字段

1.刪除表 drop table sys job 2.建立表 create table create table sys job job id number 30 not null,job name varchar2 30 not null alter table sys job addconstr...

Mysql 新增字段 修改字段 刪除字段

alter table 表名 add 欄位名 字段型別 字段長度 default 預設值 comment 注釋 例如 alter table order add code char 6 default null comment 優惠碼 2 修改字段 修改欄位名 字段型別 長度 a 修改欄位名 alt...