hive里如何高效生成唯一ID

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

常见的方式:

 hive里最常用的方式生成唯一id,就是直接使用 row_number() 来进行,这个对于小数据量是ok的,但是当数据量大的时候会导致,数据倾斜,因为最后生成全局唯一id的时候,这个任务是放在一个reduce里进行的,数据量过大会有很大的瓶颈。

优化的方式:

主体的思想就是先分再合,参考下一个思路:

hive sql生成唯一标识数据,hive,数据仓库,hive,hadoop,数据仓库

这个思路是借鉴了一篇文章的思路:附上链接:bitmap用户分群方法在贝壳DMP的实践和应用_架构_侯学博_InfoQ精选文章

我是只想用sql来做具体的实现,如何实现最好呢?

1:将数据打散,分为N份

2:在这N份里,先分别给一个行号使用row_number()

3: 统计出来每份里有多少条数据(这个数据要在第四步里使用)

4: 计算出来到当前分片最大的行号是多少(这个就是我如下图示里的,上一个分片的最大行号+下当前分片数据的条数)sum() over() 来实现的

with temp01 as (
    select
        iccid,
        imsi,
        cast(rand() * 200 as bigint) num
    from
        原始表
    where
        date_id = '20231123';

)
select
    a.iccid,
    a.imsi,
    a.num as a_num,
    a.rn,
    b.num as b_num,
    b.cnt,
    b.amt,
    nvl(b.amt, 0) + rn as final_num
from
    (
        select
            iccid,
            imsi,
            num,
            ROW_NUMBER() OVER(PARTITION BY num) AS rn
        from
            temp01
    ) a
    left outer JOIN (
        select
            num,
            cnt,
// 这个sum就是生成到当前分区最大的行号是多少,这里一定要理解sum() over这个窗口函数是怎么个原理。再强调一次:是到当前分区累加起来的行号。
            sum(cnt) over(
                order by
                    num
            ) amt
        from
            (
                select
                    num,
                    count(*) cnt
                from
                    temp01
                group by
                    num
            ) a
    ) b on a.num -1 = b.num;

配上完整的sql实现逻辑:

hive sql生成唯一标识数据,hive,数据仓库,hive,hadoop,数据仓库文章来源地址https://www.toymoban.com/news/detail-839356.html

到了这里,关于hive里如何高效生成唯一ID的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 电脑的唯一标识符,VC++如何读出?

    电脑有没有唯一标识符,查了一些资料,开始以为CPUID可以,但是实际上统一类型的CPU用的是相同的ID: 那么BIOS ID是否是唯一的呢?主板上 的BIOS 芯片是主板上 唯一 贴有标签的芯片,如果电脑开机时登录bios可以看到里面的一些基本信息: bios编号也可以用win cmd的命令获得,

    2024年02月12日
    浏览(35)
  • 微信小程序如何获取微信号的唯一标识(openid)

    1.获取微信登录凭证 2.登录凭证传回后端获取openid,前端直接调用接口获取openid正式上线代码审核过不去。 3.后端代码(直接返回的openid中含有secret,可发布,但是会提醒你存在安全漏洞,所以对openid进行截取拼接) 3.获取AppSecret和AppID 登录微信公众平台 开发——开发管理——开发

    2024年02月08日
    浏览(37)
  • 使用序列(Sequence)在 Oracle 数据库中管理唯一标识符

    目录 1. 创建序列 2. 使用序列生成唯一值 3. 序列的常见应用场景 结论 简介: 在 Oracle 数据库中,序列(Sequence)是一种强大的工具,用于生成唯一的数值标识符。序列提供了一种简单而高效的方式来管理表的主键或其他需要唯一值的列。本文将介绍 Oracle 中序列的用法,包括

    2024年02月05日
    浏览(36)
  • 微信小程序中使用UUID创建唯一标识

    1,在小程序根目录下的utils文件夹创建一个名为uuid.js文件,将下列代码粘贴上去: const uuid = function () {   var s = [];   var hexDigits = \\\"0123456789abcdef\\\";   for (var i = 0; i  36; i++) {     s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);   }   s[14] = \\\"4\\\";    s[19] 

    2024年02月04日
    浏览(35)
  • Android设备的各种唯一标识符 ID

    只有Android手机才有, IMEI号是一串15位的号码,比如像这样 359881030314356 需要权限 android.permission.READ_PHONE_STATE 通常用户会因为你向他们要了这个权限而给你一个差评,因为他们觉得你就是在窃取他们的隐私,很明显,你就是在收集一些数据 这个是不靠谱的,因为有时候它是

    2024年02月11日
    浏览(41)
  • Java 和 UUID:编写可靠的唯一标识符

    UUID(通用唯一识别码)是一种用于唯一标识分布式系统中的对象的标准。它是一个128位的字符串,包含了时间戳和随机数字,可以保证在分布式系统中每个对象都有一个独特的标识符,而不会发生冲突。 UUID最常见的用途是在不同的系统和平台之间传递唯一的标识符,以便于

    2024年02月04日
    浏览(51)
  • STM32唯一设备标识符UID的读取

    1.UID的介绍 STM32微控制器(MCU)的唯一UID(Unique ID)是一个独特的标识符,用于区分不同的芯片。每个STM32芯片都有一个唯一的UID,由96位的数据组成。这个唯一UID不是由用户编程设置的,而是在制造过程中由芯片上的专用电路生成的。 STM32 MCU的唯一UID通常由三个32位的数据组

    2024年02月04日
    浏览(31)
  • Java接口访问限制次数(使用IP作为唯一标识)

    1、获取用户IP工具类 2、接口限制注解(切面) (1)controller层 (2)注解类 (3)切面方法

    2024年02月13日
    浏览(23)
  • 使用MD5当做文件的唯一标识,这样安全么?

    MD5(Message Digest Algorithm 5)是一种常用的哈希函数,用于将任意长度的数据映射为固定长度的哈希值。它广泛应用于数据完整性验证、密码存储等领域。 MD5常用于文件完整性验证。通过对文件进行MD5哈希计算,可以生成唯一的哈希值,用于识别文件的内容是否发生改变。这在

    2024年01月18日
    浏览(25)
  • 在Android中获取手机的唯一标识码的方法

    在Android平台上,无论是手机还是平板,获取设备唯一标识码的方式是通用的。以下是一些常见的方式: 1. IMEI(International Mobile Equipment Identity) 这种方式只适用于有电话功能的设备,并且需要 READ_PHONE_STATE 权限。 2. Android ID Android ID 是设备首次启动时产生的 64-bit number (16位的

    2024年02月05日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包