虽然hive中的表没有主键一说,但是实际数据开发中经常需要将hive中计算好的表导出到mysql库中供业务使用或开发调用,而mysql表是需要有主键的,在hive中我们可以使用row_number() over()窗口函数来生成一个自增序列的字段,在将表导出到mysql库中的时候就可以指定该字段为主键,使用起来还是挺方便的。
1select 2 -- 自增序列字段 3 row_number()over() as row_number 4 -- 以下其他字段 5 , user_id 6 , col_name 7 -- 数仓系统字段 8 ,'${wf:id()}' as load_job_number 9 , '${wf:name()}' as load_job_name 10 , current_timestamp as insert_timestamp 11 , 2 as source_system_code 12from edw_tmp.tmp_table_name 13where dt='${dt}'
使用sqoop将数据导出至mysql表
以下是mysql建表脚本
1CREATE TABLE IF NOT EXISTS mysql_table_name( 2row_number bigint(20) NOT NULL DEFAULT '0' comment '数仓自增行序号', 3user_id bigint(20) NOT NULL DEFAULT '0' comment '用户idid', 4col_name varchar(1000) DEFAULT NULL comment '其他字段名', 5load_job_number varchar(1000) DEFAULT NULL comment '数据仓库调度工具oozie job单次运行id, 使用oozie EL function: ${wf:id()}', 6load_job_name varchar(1000) DEFAULT NULL comment '数据仓库调度工具oozie_job名称: 使用oozie EL function: ${wf:name()}', 7insert_timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '数据仓库数据插入时间', 8source_system_code INT(11) comment '数据仓库的源系统数据分类:1-二手房;2-新房;3-金融;4-租房', 9dt varchar(8) NOT NULL comment '分区字段', 10PRIMARY KEY (row_number,user_id,dt), 11KEY user_id (user_id) 12) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT '表名注释' 13;