在hadoop中连接表的问题,其中驱动程序表有10M记录,子表连接有1M记录

时间:2017-11-27 07:58:00

标签: hadoop join hive

面对在hadoop中连接3个表的问题,其中最左边的表有10M记录,每个右表有1M个记录。最右边的表与父表保持连接。

SELECT distinct Table1.cid,Table2.gdtyp,Table3.ager,Table3.edcd FROM (SELECT 
distinct(cid) FROM Table1  WHERE Table1.orgcd='T002' AND 
(Table1.cacttrdt>=19980101 AND Table1.cacttrdt<=20171120) limit 2) Table1 
LEFT JOIN Table2 Table2 ON (Table2.cid=Table1.cid)  LEFT JOIN Table3 Table3 
ON (Table3.cid=Table1.cid)

以上查询在mapreduce期间卡住了。 已将自动转换连接设置为false。

1 个答案:

答案 0 :(得分:1)

矢量化查询执行通过一次批量执行1024行而不是每行一行来提高连接,扫描,聚合和过滤器等操作的性能。

在Hive 0.13中引入,此功能显着缩短了查询执行时间,并可通过两个参数设置轻松启用:

设置hive.vectorized.execution.enabled = true; set hive.vectorized.execution.reduce.enabled = true;

还使用TEZ作为执行引擎而不是Mapreduce。