针对多级联接的高效HIVE查询

时间:2016-12-21 18:49:59

标签: sql hadoop mapreduce hive hql

我正在将T-SQL UDF转换为HIVE HQL。 UDF使用递归CTE通过在“父”列上自联接来展平源表中的层次结构。为了摆脱递归,我做了多个左连接来创建扁平化的层次结构,即:

select a.description, b.description, c.description, etc
from sourcetable a
left join sourcetable b on a.parent=b.id
left join sourcetable c on b.parent=c.id
etc.

最终结果是您按列布置了层次结构的所有级别,例如使用熟悉的数据:

Phoenix    Arizona       UnitedStates
WashDC     UnitedStates  NULL
Trenton    NewJersey     UnitedStates

注意层次结构如何“粗糙”。

在这个用例中没有过滤,我们正在处理所有记录。

我有层次的 TEN LEVELS 来处理,而且运行速度相当慢。原始CTE在不到一分钟的时间内运行,而蜂巢中的新查询大约需要9分钟。 10节点集群,1.5M记录,约1.5GB数据。我们只配置了mapreduce。

优化此用例的最佳方法是什么?我不认为分区会有所帮助,因为我们没有过滤数据。会不会有帮助吗?我应该记录记录ID还是父ID列?

非常感谢, 理查德

0 个答案:

没有答案
相关问题