【发布时间】:2017-05-26 09:13:22
【问题描述】:
我有一个关于 Hive 的问题。让我给你解释一下场景:
- 我正在对 Oozie 使用 Hive 动作;我有一个正在做的查询 在不同的表上连续LEFT JOIN;
- 要插入的总行数约为3500万;
- 首先,作业因内存不足而崩溃,因此我设置了“set hive.auto.convert.join=false”,查询已完美执行,但花了 4 小时 完成;
- 我尝试重写 LEFT JOIN 将大表放在最后的顺序,但结果相同,大约要执行 4 小时;
查询如下所示:
INSERT OVERWRITE TABLE final_table
SELECT
T1.Id,
T1.some_field_name,
T1.another_filed_name,
T2.also_another_filed_name,
FROM table1 T1
LEFT JOIN table2 T2 ON ( T2.Id = T1.Id ) -- T2 is the smallest table
LEFT JOIN table3 T3 ON ( T3.Id = T1.Id )
LEFT JOIN table4 T4 ON ( T4.Id = T1.Id ) -- T4 is the biggest table
那么,知道查询的结构有没有办法重写它,这样我就可以避免太多的 JOIN 了?
提前致谢
PS:即使矢量化也给了我同样的时机
【问题讨论】:
标签: hadoop hive left-join query-optimization