Hadoop SemanticException[错误10007]:不明确的列引用\u c1
在配置单元查询中使用四级嵌套时,我面临这个问题。下面是我正在执行的查询-Hadoop SemanticException[错误10007]:不明确的列引用\u c1,hadoop,hive,jira,hortonworks-data-platform,Hadoop,Hive,Jira,Hortonworks Data Platform,在配置单元查询中使用四级嵌套时,我面临这个问题。下面是我正在执行的查询- SELECT *, SUM(qtod.amount) OVER (PARTITION BY qtod.id, qtod.year_begin_date ORDER BY qtod.tran_date) FROM (SELECT *, SUM(mtod.amount) OVER (PARTITION BY mtod.id, mtod.quarter_begin_date ORDER BY mtod.tran_da
SELECT *,
SUM(qtod.amount) OVER (PARTITION BY qtod.id, qtod.year_begin_date ORDER BY qtod.tran_date)
FROM (SELECT *,
SUM(mtod.amount) OVER (PARTITION BY mtod.id, mtod.quarter_begin_date ORDER BY mtod.tran_date)
FROM (SELECT *,
SUM(wtod.amount) OVER (PARTITION BY wtod.id, wtod.month_begin_date ORDER BY wtod.tran_date)
FROM (select id,
year_begin_date,
quarter_begin_date,
month_begin_date,
week_begin_date,
tran_date,
amount,
SUM(amount)
OVER (PARTITION BY id,week_begin_date ORDER BY tran_date) FROM table_name)wtod)mtod)qtod;
如果我排除了第四级嵌套,它工作得很好,但在包含它的同时,会低于错误消息-
失败:SemanticException[错误10007]:不明确的列引用
_qtod中的c1
为了避免筑巢,我尝试用另一种方式
SELECT * FROM
(SELECT id,year_begin_date,tran_date,amount,SUM(amount) OVER (PARTITION BY id,year_begin_date ORDER BY tran_date) FROM yeartodate)ytod
JOIN
(SELECT *, SUM(mtod.amount) OVER (PARTITION BY mtod.id, mtod.quarter_begin_date ORDER BY mtod.tran_date)
FROM (SELECT *, SUM(wtod.amount) OVER (PARTITION BY wtod.id, wtod.month_begin_date ORDER BY wtod.tran_date)
FROM (select id,
year_begin_date,
quarter_begin_date,
month_begin_date,
week_begin_date,
tran_date,
amount,
SUM(amount)
OVER (PARTITION BY id,week_begin_date ORDER BY tran_date) FROM table_name)wtod)mtod)qtod
ON qtod.id=ytod.id AND qtod.tran_date=ytod.tran_date;
仍然收到相同的错误。在网上搜索后,我发现这是蜂巢本身的一个问题 由于jira现在已修复,并且补丁在Hive14中可用,所以我尝试在Hive14(HDP)上运行它
仍然得到相同的错误
请写下您的建议….在
SELECT
中的无别名函数调用被映射到列名\u c1
、\u c2
等。在这种情况下,每个SELECT
都有一个无别名函数调用,因此它们都会创建一个列\u c1
问题在于,由于您正在执行下一个子查询中的SELECT*
,然后追加另一个映射到\u c1
的函数调用,因此同一列命名为两次,因此在不明确的列引用周围出现错误
解决方案应该是对所有函数调用使用别名,这样它们就不会使用默认名称,例如:
SELECT * FROM
(SELECT id,year_begin_date,tran_date,amount,SUM(amount) AS ytod_amount_sum OVER (PARTITION BY id,year_begin_date ORDER BY tran_date) FROM yeartodate)ytod
JOIN
(SELECT *, SUM(mtod.amount) AS mtod_amount_sum OVER (PARTITION BY mtod.id, mtod.quarter_begin_date ORDER BY mtod.tran_date)
FROM (SELECT *, SUM(wtod.amount) AS wtod_amount_sum OVER (PARTITION BY wtod.id, wtod.month_begin_date ORDER BY wtod.tran_date)
FROM (select id,
year_begin_date,
quarter_begin_date,
month_begin_date,
week_begin_date,
tran_date,
amount,
SUM(amount) AS amount_sum
OVER (PARTITION BY id,week_begin_date ORDER BY tran_date) FROM table_name)wtod)mtod)qtod
ON qtod.id=ytod.id AND qtod.tran_date=ytod.tran_date;