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

虽然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;
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

sqoop从hive导入数据到mysql时出现主键冲突

今天在将一个hive数仓表导出到mysql数据库时出现进度条一直维持在95%一段时间后提示失败的情况,搞了好久才解决。使用的环境是HUE中的Oozie的workflow任何调用sqoop命令,该死的oozie的日志和异常提示功能太辣鸡了,最后发现是重复数据导致数据进入mysql表时出现主键冲突进而导致数据同步失败。(1)众所周知hive表是没有主键与索引

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Hive建表的Location问题

最近公司在使用Hive做项目测试,所以就在Hive上面建了一些表,做测试。使用建表语句后发现数据被自动覆盖了,现在了解到的情况是这样的。Hive中,表的Metadata信息全部存储在MySQL中。而存储在MySQL中的数据是没有校验过程的。也就是说,你可以创建一个逻辑错误的表,两个表指向同一个HDFS文件也是有可能的。所以,在使用CREA

MySQL 序列使用:使用 AUTO_INCREMENT、获取AUTO_INCREMENT值

MySQL序列使用MySQL序列是一组整数:1,2,3,...,由于一张数据表只能有一个字段自增主键,如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。本章我们将介绍如何使用MySQL的序列。使用AUTO\_INCREMENTMySQL

MySql 面试开发技术点汇总

表结构设计1、为什么一定要设一个主键?答:因为你不设主键的情况下,innodb也会帮你生成一个隐藏列,作为自增主键。所以啦,反正都要生成一个主键,那你还不如自己指定一个主键,在有些情况下,就能显式的用上主键索引,提高查询效率!2、你们主键是用自增还是UUID?答:肯定答自增啊。innod