我正在将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列?
非常感谢, 理查德