如何在没有重复的情况下在 hive 中执行 LEFT OUTER JOIN 以仅检查右表中的一个值?
Posted
技术标签:
【中文标题】如何在没有重复的情况下在 hive 中执行 LEFT OUTER JOIN 以仅检查右表中的一个值?【英文标题】:How to perform LEFT OUTER JOIN in hive without duplicates to check only one value in the right table? 【发布时间】:2017-08-09 20:19:45 【问题描述】:我有两个数据集: 1)
Table A
id name
1 raju
2 ramu
2 ramu
3 rakesh
Table A
2)
Table B
id Status
1 Y
1 Y
2 N
2 N
2 Y
3 N
Table B
我想在 hive 中执行左外连接(表 A 左外连接表 B),这样在连接列“id”上的两个数据集时,如果表 B 中的状态列在至少一次,则生成的数据集的状态将为“是”,如下所示:
Final Result:
id name Status
1 raju Yes
2 ramu Yes
2 ramu Yes
3 rakesh No
我不想在执行联接时增加结果中的记录数。结果表应该只有4条记录,而不是5条(增加 基于匹配连接条件的记录)。
我如何做到这一点?
【问题讨论】:
【参考方案1】:为满足此要求,您需要将表 B 的行数减少到表 A 的每行一行或零行。
这样做,为每个id
值获取一行,状态为Y
。
SELECT DISTINCT id, Status
FROM B
WHERE Status = 'Y'
然后您可以使用旧的LEFT JOIN ... IS NOT NULL
技巧来确定 A 的哪些行与 B 的匹配行。
这样做。 (http://sqlfiddle.com/#!9/71d84b/1/0)
SELECT A.id, A.name,
CASE WHEN B.Status IS NOT NULL THEN 'Yes' ELSE 'No' END Status
FROM A
LEFT JOIN (
SELECT DISTINCT id, Status
FROM B
WHERE Status = 'Y'
) B ON A.id = B.id
【讨论】:
不需要在子查询中检索status
。该案例可以在id
上完成以上是关于如何在没有重复的情况下在 hive 中执行 LEFT OUTER JOIN 以仅检查右表中的一个值?的主要内容,如果未能解决你的问题,请参考以下文章
在没有堆栈溢出的情况下在 javascript 中执行无限动画的模式
如何在没有 Flash 的情况下在 Firefox 中实现复制到剪贴板。需要实施[重复]
如何在没有jQuery的情况下在javascript中执行php文件
如何在不使用   的情况下在行内元素之间添加空格 [重复]