【问题标题】:HIVE Query: How to select the 'join key' for "FULL OUTER JOIN"?HIVE 查询:如何为“FULL OUTER JOIN”选择“join key”?
【发布时间】:2020-11-01 03:42:51
【问题描述】:

我收到以下错误:

Multiple attributes named business_id in reportAttributeReferenceAmbiguous; p.business_id, s.business_id

来自 SPARK/HIVE 查询:

SELECT
    business_id,
    p.p1,
    p.p2,
    s.s1,
    s.s2
FROM p_table p
FULL OUTER JOIN s_table s
    ON p.business_id = s.business_id

由于我使用的是FULL OUTER JOINbusiness_id 可以是p.business_ids.business_id,所以我没有指定使用哪一个。 (我以为有些行可能只有p.business_id,而其他一些行可能只有s.business_id,我理解错了吗?)

所以我想知道在上述查询中选择business_id 的正确方法是什么?谢谢!

【问题讨论】:

  • 连接结果包括两个表中的所有列
  • 你可能想使用 COALESCE(p.business_id, s.business_id)

标签: sql join hive hiveql


【解决方案1】:

使用

coalesce(p.business_id, s.business_id) as business_id

或者

nvl(p.business_id, s.business_id) as business_id

或此答案中的 CASE 语句:https://stackoverflow.com/a/37744071/2700344

【讨论】:

    【解决方案2】:

    您在查询的两个表中都有business_id,您选择了business_id,但没有提及来自哪个表。

    SELECT
        business_id,
        p.p1,
        p.p2,
        s.s1,
        s.s2
    FROM p_table p
    FULL OUTER JOIN s_table s
        ON p.business_id = s.business_id
    

    上面的查询应该改为

    SELECT
        p.business_id AS pBI, s.business_id AS sBI,
        p.p1,
        p.p2,
        s.s1,
        s.s2
    FROM p_table p
    FULL OUTER JOIN s_table s
        ON p.business_id = s.business_id
    

    我没查,你可以试试。

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2015-01-10
      • 2019-08-07
      • 2011-09-28
      相关资源
      最近更新 更多