Hive中使用row_number() over()创建自增主键

虽然hive中的表没有主键一说,但是实际数据开发中经常需要将hive中计算好的表导出到mysql库中供业务使用或开发调用,而mysql表是需要有主键的,在hive中我们可以使用row_number() over()窗口函数来生成一个自增序列的字段,在将表导出到mysql库中的时候就可以指定该字段为主键,使用起来还是挺方便的。

select
    -- 自增序列字段
    row_number()over() as row_number
    -- 以下其他字段
    , user_id
    , col_name
    -- 数仓系统字段
    ,'${wf:id()}'   as load_job_number
    , '${wf:name()}' as load_job_name
    , current_timestamp as insert_timestamp
    , 2 as source_system_code
from edw_tmp.tmp_table_name
where dt='${dt}'

使用sqoop将数据导出至mysql表

以下是mysql建表脚本

CREATE TABLE IF NOT EXISTS mysql_table_name(
row_number                      bigint(20)    NOT NULL DEFAULT '0'  comment '数仓自增行序号',
user_id                         bigint(20)    NOT NULL DEFAULT '0'  comment '用户idid',
col_name                        varchar(1000) DEFAULT NULL          comment '其他字段名',
load_job_number                 varchar(1000) DEFAULT NULL          comment '数据仓库调度工具oozie job单次运行id, 使用oozie EL function: ${wf:id()}',
load_job_name                   varchar(1000) DEFAULT NULL          comment '数据仓库调度工具oozie_job名称: 使用oozie EL function: ${wf:name()}',
insert_timestamp                timestamp     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP          comment '数据仓库数据插入时间',
source_system_code              INT(11)                             comment '数据仓库的源系统数据分类:1-二手房;2-新房;3-金融;4-租房',
dt                              varchar(8)    NOT NULL              comment '分区字段',
PRIMARY KEY (row_number,user_id,dt),
KEY user_id (user_id)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT '表名注释'
;

 

转载于:https://www.cnblogs.com/shujuxiong/p/10978410.html