Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 失败:语义分析错误:在多个表/子查询中找到列_Hadoop_Hive - Fatal编程技术网

Hadoop 失败:语义分析错误:在多个表/子查询中找到列

Hadoop 失败:语义分析错误:在多个表/子查询中找到列,hadoop,hive,Hadoop,Hive,失败:语义分析错误:在多个表/子查询中找到列ds 我在添加获取当前日期的ds变量时遇到此错误。 如何使用上述脚本实现日期分区。您需要在WHERE子句中为ds添加别名。例如,ds=date\u sub('${DAY}',1)toe2.ds=date\u sub('${DAY}',1) 为了稍微澄清一下您的问题,这里有一个较小的示例显示了相同的行为 CREATE EXTERNAL TABLE old_events (day STRING, foo STRING, count STRING, inte

失败:语义分析错误:在多个表/子查询中找到列ds

我在添加获取当前日期的ds变量时遇到此错误。
如何使用上述脚本实现日期分区。

您需要在
WHERE
子句中为
ds
添加别名。例如,
ds=date\u sub('${DAY}',1)
to
e2.ds=date\u sub('${DAY}',1)

为了稍微澄清一下您的问题,这里有一个较小的示例显示了相同的行为

CREATE EXTERNAL TABLE old_events
(day STRING, foo STRING, count STRING, internal_id STRING)
PARTITIONED BY (ds string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION '${INPUT}';

CREATE EXTERNAL TABLE events
(internal_id, foo STRING, count STRING)
PARTITIONED BY (ds string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION '${OUTPUT}';

INSERT OVERWRITE TABLE events
SELECT e2.internal_id, e2.foo, count(e1.foo)
FROM old_events e2
LEFT OUTER JOIN old_events e1
ON e1.foo = e2.foo
WHERE e1.event = 'event1'
AND e2.event = 'event2'
AND ds = date_sub('${DAY}',1)
GROUP BY e2.internal_id, e2.foo;
这会产生相同的错误:

CREATE EXTERNAL TABLE example
(a INT, b INT)
LOCATION '${OUTPUT}';

SELECT *
FROM example e1
JOIN example e2
  ON e1.a = e2.a
WHERE b = 5;
问题是
b列
示例
中都存在,别名为
e1
e2
。您和我可能知道,如果您在列
a
上加入自身的
example
,则
e1.b
e2.b
相同,因此它不需要别名,但Hive不知道这一点,因此您需要选择一个来消除任何歧义。在这里,
b
是否是分区列并不重要

FAILED: SemanticException Column b Found in more than One Tables/Subqueries