Hive中生成自增序列的常用方法

这篇具有很好参考价值的文章主要介绍了Hive中生成自增序列的常用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在日常业务开发过程中,通常遇到需要hive数据表中生成一列唯一ID,当然连续递增的更好。

最近在结算业务中,需要在hive表中生成一列连续且唯一的账单ID,于是就了解生成唯一ID的方法

1. 利用row_number函数

语法:row_number() over(order by step)+start_num

step表示每次递增多少

start_num表示从哪个值开始递增,不写默认是0

如下:表示从10000开始,每次递增1

SELECT row_number() over(order by 1)+10000

因此输出是10001

如果有其他值,也可以拼接其它值,比如列date是20231010

SELECT CONCAT(date,row_number() over(order by 1)+10000) AS auto_increment_id

因此输出是2023101010001

2. 利用自定义函数序列

首先Hive环境要有hive-contrib相关jar包

定义函数row_sequence

create temporary function row_sequence as 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence';

使用函数row_sequence

SELECT row_sequence() AS auto_increment_id

row_sequence的自增规则是我们自己定义的,至于怎么定义,就看我们的逻辑是怎么实现

3、二者区别

第一种方法row_number

在一次SQL运行中是全局递增的,只不过再次执行SQL就会重复,如果不想重复我们可以更改start_num的值,把start_num调整到我们认为的不会重复的值开始

或者拼接上日期或者时间戳等前缀,这样每次执行就不会重复

第二种方法UDFRowSequence

由于是我们自己定义的函数,而SQL任务是以分布式的运行的,一个SQL并发可能会有多个job执行,每个job可以理解为1个节点或者进程,在每个进程上运营的序列都从起始值开始,所以不能保证序号全局连续唯一。因此我们可以借助第三方存储记录,比如Redis,来保证生产序列的全局连续递增文章来源地址https://www.toymoban.com/news/detail-715142.html

到了这里,关于Hive中生成自增序列的常用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive学习(12)Hive常用日期函数

    1、hive返回当天三种方式 2、from_unixtime:转化unix时间戳到当前时区的时间格式 3、unix_timestamp:获取当前unix时间戳 4、year:返回日期中的年 5、month:返回日期中的月份 6、day:返回日期中的天 7、hour:返回日期中的小时 8、minute:返回日期中的分钟 9、second:返回日期中的秒

    2024年02月11日
    浏览(34)
  • 【大数据Hive】hive 加载数据常用方案使用详解

    目录 一、前言 二、load 命令使用 2.1 load 概述 2.1.1 load 语法规则

    2024年02月10日
    浏览(40)
  • 【hive】—原有分区表新增加列(alter table xxx add columns (xxx string) cascade;)

    需求:需要在之前上线的分区报表中新增加一列。 1、创建分区测试表并插入测试数据 查看原有分区表test_1的表结构 2、新增加一列 grade,数据类型为strIng 查看添加列之后的数据结构 3、新增加列grade有数据后,插入新的分区B数据正常显示,原来A区grade列为NULL。 原因是: h

    2024年02月08日
    浏览(50)
  • Hive常用的日期函数

    注意: current_timestamp() 获取的时UTC默认时区。 给定一个时间戳可基于 from_utc_timestamp/to_utc_timestamp 进行转换。 注意: nbsp;nbsp; 如果当前年的第一个周,天数超过3天,那就是当前年的第一周; nbsp;nbsp; 如果当前年的第一个周,天数小于等于3天,那就是上一年的最后一周。 wee

    2024年02月07日
    浏览(42)
  • Hive常用DDL操作

    本专栏案例数据集链接:   https://download.csdn.net/download/shangjg03/88478038 语法: 示例: 语法: 示例: 语法: 默认行为是 RESTRICT,如果数据库中存在表则删除失败。要想删除库及其中的表,可以使用 CASCADE 级联删除。 示例: 使用 `desc format  emp_external` 命令可以查看表的详

    2024年02月08日
    浏览(38)
  • Hive常用日期格式转换

    文章目录 获取当前时间 日期格式转换 返回日期中的年,月,日,时,分,秒,当前的周数 计算日期差值 返回当月或当年的第一天 获取当前时间 获取当前时间戳 select unix_timestamp() 复制 把时间戳转为正常的日期 select from_unixtime(unix_timestamp(),‘yyyy-MM-dd HH:mm:ss’) select from_uni

    2024年01月16日
    浏览(41)
  • hive常用命令记录

    不支持delete column操作,可以使用replace columns实现字段删除操作; 删除column_C 取yyyy-MM-dd HH:mm:ss格式日期串的yyyy-MM-dd部分,使用字符串SUBSTR函数; 假设现在有如下数据(表 score ) 姓名 科目 成绩 晓明 语文 100 晓明 数学 100 晓明 英语 100 小红 语文 100 小红 数学 100 小红 英语

    2024年02月07日
    浏览(45)
  • Hive 常用DML操作

    本专栏案例数据集链接:   https://download.csdn.net/download/shangjg03/88478038  LOCAL 代表从本地文件系统加载文件,省略则代表从 HDFS 上加载文件: 从本地文件系统加载文件时, `filepath` 可以是绝对路径也可以是相对路径 (建议使用绝对路径); 从 HDFS 加载文件时候,`

    2024年02月07日
    浏览(35)
  • hive常用的授权命令

    创建角色 create role role_name; 例子:create role abc_read_role; 删除角色 drop role role_name; 例子:drop role abc_read_role; 显示所有角色 show roles; 把整个库授权给某一个角色查询权限(给所有权限,把select 替换成all) grant select on database dbname_db to role_name; 例子:grant select on database abc_db to abc_r

    2024年02月05日
    浏览(34)
  • 【系统学习Hive常用知识】

    Hive是由Facebook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。 Hive是一个Hadoop客户端,用于将HQL(Hive SQL)转化成MapReduce程序。 (1)Hive中每张表的数据存储在HDFS (2)Hive分析数据底层的实现是MapReduce(也可配置为Spark或者

    2024年02月20日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包