Hive进行数据比对问题,求帮助

xukunwzq 2015-06-19 12:02:30
最近项目中需要在Hadoop平台中做对账的工作,采用hive开做,容易上手,AB双方数据做数据比对的时候,准备用表连接方式来处理,这样存在问题,表连接的时候left join会存在多对多的情况,会出现A方中多条数据和B方一条数据比对成功的情况,需求如下:
1、以A方数据为主查找B方与之匹配的数据,
2、获取到多条时,取第一条,
3、且此条数据不再与A方其他数据进行比对
之前处理的方式是在db2中用存储过程来实现的,用游标遍历A放数据逐条从B方查找来处理的,现在用Hive来做的话就遇到这样的难处了
...全文
1439 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
resin_404 2017-10-19
  • 打赏
  • 举报
回复
两张表后边多加一个字段,加上时间戳,然后用rank() over 这个函数就可以取按时间戳排序后的第一条了 。例子如下: select * from ( select t.a,t.b,t.c,t.d,t.etl_last_dt,RANK() OVER(PARTITION BY t.a,t.b,t.c,t.d ORDER BY t.etl_last_dt DESC) RK from test_table t ) a where RK=1 希望对你有帮助
leaders_forerver 2017-08-06
  • 打赏
  • 举报
回复
A方中多条数据和B方1条数据匹配,先根据连接条件除重复,
然后采用left semi join 来做,
qq_29525577 2015-07-04
  • 打赏
  • 举报
回复
求解,上述的也求帮助呀
lxw1234_com 2015-06-24
  • 打赏
  • 举报
回复
Hive完全可以实现你的需求。 其实你之前在DB2中相当于是笛卡尔积关联了。 Hive中当然也可以用笛卡尔积关联,但不推荐这样做。

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧