首页 > 解决方案 > Hive non-equi Join on OR 条件

问题描述

我有两个表,我想加入 3 个键。但是,其中一个键可能包含另一个表中不存在的值,但我仍然希望在查询时保留这些记录。

与此类似的东西,其中 first_table 中的key_3可能包含 0 值,该值在second_table中不存在。

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 的较新版本中这是允许的,但在旧版本中是否有解决方法。

标签: sqlhivehiveql

解决方案


我可能不完全理解你的问题,但不是一个简单的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 ;

如果第二个表中没有匹配项——不管第一个表中的值如何——仍然返回第一个表中的行。


推荐阅读