hive - 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 ;
解决方案
检查查询计划并尝试配置 mapjoin。
像您这样的 Theta 连接(非等式连接)是使用cross join
Hive 中的 + 过滤器实现的。在地图加入的情况下,它将工作得更快。
请参阅此处如何配置 map-join:https ://stackoverflow.com/a/49154414/2700344 。
再次检查查询计划并确保使用了 MapJoinOperator。
即使使用 mapjoin,Hive 也比 Impala 慢,但可以处理更大的数据集。
推荐阅读
- java - 将对象的 ArrayLIst 转换为字符串 2D 数组
- excel - Office.js Excel - range.getImage() 的问题
- sql-server - SSRS:报告订阅按非周期计划运行
- php - $变量 = $变量 = $变量 = 数组()
- angular - 当 Angular 5 中的字段验证器无效但确实有效时,如何更改它?
- html - 按下按钮时动态增长一个div容器?
- apache2 - webapp tomcat8中的项目不在网页中运行
- javascript - 根据周围标记的位置动态更改谷歌地图上的头像标记z-index
- python - 仅扰动 Tensorflow Python 中的一小部分张量图像
- jquery - 使用 jQuery 在页面加载时插入值