如何在hive中不重复执行LEFT OUTER JOIN只检查右侧table中的一个值?

How to perform LEFT OUTER JOIN in hive without duplicates to check only one value in the right table?

我有两个数据集: 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

我想在配置单元中执行左外连接(Table A 左外连接 Table B),这样在连接列 'id' 上的两个数据集时,如果 table B 中的 Status 列至少有一次 'Y',则结果数据集的 Status 为 'Yes',如下所示:

Final Result:       
id  name    Status
1   raju    Yes
2   ramu    Yes
2   ramu    Yes
3   rakesh  No

我不想在执行联接时增加结果中的记录数。结果 table 应该只有 4 条记录,而不是 5(增加 根据匹配的连接条件记录)。

如何实现?

为满足此要求,您需要将 table B 的行数减少到每行 table A 的一行或零行。

这样做,为状态为 Y.

的每个 id 值获取一行
         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