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的主要内容,如果未能解决你的问题,请参考以下文章