假设一个 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
chosenawp 2022-07-16 09:47:03 +08:00 via iPhone
left join 一下 where 条件带上对每个字段的判断
|
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','')把结果拼起来 |