【问题标题】:Hive - When adding a new column to a table I get: SemanticException [Error 10002]: Invalid column referenceHive - 向表中添加新列时,我得到:SemanticException [Error 10002]: Invalid column reference
【发布时间】:2017-10-23 11:17:10
【问题描述】:

我正在尝试通过合并其他 3 个表来覆盖一个表。方式如下:

  1. 我将从 table1 中取出所有列
  2. 我将只从 table2 中取出两列
  3. 我将根据表 3 中某列的值添加一个新列

三个表:table1、table2 和 table3 有作为 key id

这是我正在尝试的查询(到目前为止,我正在尝试没有INSERT OVERWRITE TABLE final_table,只是使用 SELECT 来查看将插入表中的结果)

--INSERT OVERWRITE TABLE final_table 
select 
        t1.*,
        t2.field1,
        t2.field2,
        CASE WHEN ( t3.indicator = 'F' OR 
                    t3.indicator = 'O' 
                    ) THEN 'Y' ELSE 'N' END AS new_field3
from 
table1 t1 
LEFT OUTER JOIN table2 t2
ON (t1.id = t2.id)
LEFT OUTER JOIN table3 t3
ON (t1.id = t3.id);

但在CASE WHEN 中出现以下错误:

编译语句时出错:FAILED: SemanticException [Error 10002]:第 7:17 行无效的列引用“new_field3”

我做错了什么?

【问题讨论】:

    标签: sql hive


    【解决方案1】:

    我没有看到语义错误,但尝试将查询编写为:

    select t1.*, t2.field1, t2.field2,
           (case when t3.indicator in ('F', 'O') then 'Y' else 'N'
            end) as new_field3
    from table1 t1 left outer join
         table2 t2
         on t1.id = t2.id left outer join
         table3 t3
         on t1.id = t2.id;  -- ???
    

    大部分变化都是装饰性的。建议使用 IN 而不是 OR 表达式列表——如果只是因为它更易于编写和阅读。

    更重要的是,table3 上的join 条件不包括table3

    据我所知,这些都不会产生语义异常。但是,第二个意味着查询没有按照您认为的那样做。

    【讨论】:

    • 谢谢,您在我完成编辑之前就开始回复您指出的那部分:“更重要的是,table3 上的连接条件不包括 table3”。
    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多