Hive non-equi Join on OR 条件
Posted
技术标签:
【中文标题】Hive non-equi Join on OR 条件【英文标题】:Hive non-equi Join on OR condition 【发布时间】:2021-07-09 16:15:52 【问题描述】:我有两个表要加入 3 个键。但是,其中一个键可能包含另一个表中不存在的值,但我仍然希望在查询时保留这些记录。
与此类似,first_table 中的 key_3 可能包含 second_table 中不存在的值 0。
SELECT
f.key_1,
f.key_2,
f.key_3,
s.column_4
FROM
first_table f
LEFT OUTER JOIN second_table s
ON f.key_1 = s.key_1
AND f.key_2 = s.key_2
AND (f.key_3 = s.key_3 OR f.key_3 = 0)
当我运行它时,我得到一个错误 OR not supported in JOIN current '0'。我知道在 Hive 的较新版本中这是允许的,但在旧版本中是否有解决方法。
【问题讨论】:
【参考方案1】:将带有 OR 的条件移至 WHERE 子句:
SELECT
f.key_1,
f.key_2,
f.key_3,
s.column_4
FROM
first_table f
LEFT OUTER JOIN second_table s
ON f.key_1 = s.key_1
AND f.key_2 = s.key_2
WHERE f.key_3 = s.key_3
OR f.key_3 = 0
OR s.key_1 is NULL --allow not joined records
【讨论】:
【参考方案2】:我可能不完全理解你的问题,但是一个简单的left join
不就是你想要的吗?
SELECT f.key_1, f.key_2, f.key_3, s.column_4
FROM first_table f LEFT OUTER JOIN
second_table s
ON f.key_1 = s.key_1 AND
f.key_2 = s.key_2 AND
f.key_3 = s.key_3 ;
如果第二个表中没有匹配项(无论第一个表中的值如何),仍会返回第一个表中的行。
【讨论】:
以上是关于Hive non-equi Join on OR 条件的主要内容,如果未能解决你的问题,请参考以下文章