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;
失败:语义分析出错:在多个表/子查询中找到列ds
我在添加获取当前日期的ds变量时遇到了这个错误。如何使用上面的脚本实现日期分区。
1条答案
按热度按时间bfhwhh0e1#
您需要向添加别名
ds
在你的WHERE
条款。前任,ds = date_sub('${DAY}',1)
至e2.ds = date_sub('${DAY}',1)
.为了稍微澄清一下您的问题,这里有一个较小的示例,它显示了相同的行为
这会产生相同的错误:
问题是那根柱子
b
两者都存在example
化名为e1
以及e2
. 你和我可能知道如果你加入example
列上的自身a
那么e1.b
与相同e2.b
所以它不需要别名,但是hive不知道这一点,所以您需要选择一个别名来消除任何歧义。在这里是否b
是否为分区列。