Hive - 向表中添加新列时,我得到:SemanticException [Error 10002]: Invalid column reference

Posted

技术标签:

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

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

    我将从 table1 中取出所有列 我将只从 table2 中取出两列 我将根据表 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”

我做错了什么?

【问题讨论】:

【参考方案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”。

以上是关于Hive - 向表中添加新列时,我得到:SemanticException [Error 10002]: Invalid column reference的主要内容,如果未能解决你的问题,请参考以下文章

向表中添加新列

向表中添加了新列并减慢了整个数据库的速度。为啥?

向表中添加了列,但链接图表未使用新列数据更新

在 Mysql 中添加新列时如何轻松维护审计触发器

为啥添加一列时所有行都得到空值?

添加新列时在alembic中设置列顺序