首页 > 解决方案 > HIVE 加入时间太长,但在 Impala 上速度很快

问题描述

我有一个像下面这样的查询。此查询在 Impala 上运行 15 秒,但当我在 HIVE 上运行相同时,需要 10 多分钟。我必须将其他几个表加入到这个查询中(与下面类似的连接)并且它花费的总时间超过 1 小时(有时它会在一小时后失败/卡住),但在 Impala 上它在一分钟内运行。

你能告诉我为什么会发生这种情况以及我如何能够优化下面的蜂巢连接吗?

SELECT count(*)
FROM table_A A
LEFT JOIN table_B B ON cast(A.value AS decimal(5, 2)) BETWEEN B.fromvalue AND B.tovalue
AND A.date BETWEEN B.fromdate AND B.todate ;

标签: hiveimpalanon-equi-join

解决方案


检查查询计划并尝试配置 mapjoin。

像您这样的 Theta 连接(非等式连接)是使用cross joinHive 中的 + 过滤器实现的。在地图加入的情况下,它将工作得更快。

请参阅此处如何配置 map-join:https ://stackoverflow.com/a/49154414/2700344 。

再次检查查询计划并确保使用了 MapJoinOperator。

即使使用 mapjoin,Hive 也比 Impala 慢,但可以处理更大的数据集。


推荐阅读