Hive中使用row

it2026-03-25  11

虽然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

最新回复(0)