【发布时间】:2016-06-26 07:18:33
【问题描述】:
我们有一个类似于下面的查询:(partition_date 是我们的表分区)
SELECT * FROM A
JOIN B
where partition_date > B.last_runtime;
我们意识到将条件放在where 子句中会导致全表扫描,因此我们需要将其作为ON 放在JOIN 中。
问题在于 Hive 不支持不等式连接,因此考虑使用 BETWEEN 运算符,如下所示:
Select * from A
JOIN B ON par_date between B.last_runtime and '99999999';
这给了我们错误:遇到左右别名 在加入''99999999''
如果我将 B.last_runtime 替换为实际值,例如“20160310”,它可以正常工作...
有什么想法吗?提前致谢
【问题讨论】:
-
如果将 B.last_runtime 替换为常量,则不再有连接条件,而是 A 上的“where”条件。