V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zjdznl
V2EX  ›  问与答

如何查询 Hive 两个分区的 diff?

  •  
  •   zjdznl · 2022-07-16 00:27:48 +08:00 · 1099 次点击
    这是一个创建于 843 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设一个 Hive 有十列: primary_key, user_id, column1, column2, ..., column8

    每天会产出一个分区,假设今天和昨天产出的分区分别是 partion1 和 partion2

    问:每个分区的数据按照 user_id 进行聚合( group by ), 如何找到 partion1 和 partion2 有 diff 的那些 user_id?

    diff 的定义:聚合后的行数不同,或者任何其他 column 的数据有 diff


    举个例子,这个 Hive 的数据,是用户的订单记录,包括 用户 ID 、用户名称、快递公司、快递单号等数据。那么,针对每个用户,今天的分区都可能有新的订单记录,或者用户名称等 column 发生了变化。

    最终需要的 user_id 就是:

    1. partion1 新增了了订单记录
    2. partion1 中的其他 column 发生了变化(用户名称更改;针对同一条订单记录,partion2 没有快递单号,但是 partion1 有了)
    3 条回复    2022-07-22 00:24:44 +08:00
    chosenawp
        1
    chosenawp  
       2022-07-16 09:47:03 +08:00 via iPhone
    left join 一下 where 条件带上对每个字段的判断
    FYFX
        2
    FYFX  
       2022-07-16 12:10:59 +08:00
    1. partition1 相比较 partition2 的数据是增加的吗,存在删除的情况吗
    2. 要是你能拿到上游每天追加的 binlog(或者类似的数据库日志)直接落 binlog 就好了
    3. partition1 left partition2 ,key 是 user_id+快递单号,where 里面用 or 连接所有字段的判断,如果还需要变化的列名名称,select 里面再加一列用 concat 和 if(t1.col=t2.col,'col','')把结果拼起来
    zjdznl
        3
    zjdznl  
    OP
       2022-07-22 00:24:44 +08:00 via iPhone
    @chosenawp
    @FYFX
    最终确定的方案大概也差不多,不过多了一步,提前计算好某条记录需要比较的字段的 md5 落库,然后查询 diff 的时候直接比较 md5 是否一致就可以,不用比较所有列
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3464 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:41 · PVG 19:41 · LAX 03:41 · JFK 06:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.