hive 配置单元SQL:如何在与其他表连接时创建标志事件

tpgth1q7  于 2022-11-05  发布在  Hive
关注(0)|答案(2)|浏览(143)

我想检查表A中的成员是否存在于表B中?问题是表A和表B都有数百万条记录,而表B有重复的记录,所以我不能进行左连接,这需要几个小时的运行时间.

表格A

表格B

输出

rqmkfv5c

rqmkfv5c1#

请使用以下命令:

select member,
case when EXISTS (select 1 from TableB where TableB.member = tableA.member) then 1 else 0 end as Flag 
from tableA
7d7tgy0s

7d7tgy0s2#

不 是 一 个 很 好 的 解决 方案 , 但 你 可以 试试 这个 。
所以 , 我们 用 not in 或 not exists 得到 一 组 数据 , 然后 用 in 或 exists 得到 另 一 组 数据 , 然后 把 它们 合并 在 一起 得到 完整 的 数据 集 。

select 
a.* , 0 flag
from tableA a where member not in ( select member  from tableB)
union all 
select 
a.* , 1 flag
from tableA a where member in ( select member  from tableB)

中 的 每 一 个
诀窍 可能 是 , 您 可以 为此 运行 2 个 单独 的 SQL , 并 将 获得 perf 的 好处 , 而 不是 union all 。
不 存在 将 以 相同 的 方式 工作 , 但 可以 给 你 更 好 的 性能 。

SELECT a.*, 0 flag
FROM tableA a
WHERE NOT EXISTS(
    SELECT 1 FROM tableB b WHERE (a.member=b.member))
union all 
SELECT a.*, 1 flag
FROM tableA a
WHERE EXISTS(
    SELECT 1 FROM tableB b WHERE (a.member=b.member))

格式

相关问题