我正在将t-sqludf转换为hivehql。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
注意层次结构是如何“参差不齐”的
在这个用例中没有过滤,我们正在处理所有记录。
我有十个层次要处理,它运行得相当慢。原来的cte运行不到一分钟,而hive中的新查询大约需要9分钟。10节点集群,1.5m记录,约1.5gb数据。我们只配置了mapreduce。
为这个用例优化的最佳方法是什么?我不认为分区会有帮助,因为我们没有过滤数据。扣球有帮助吗?我应该存储在记录id上,还是父id列上?
非常感谢,理查德
暂无答案!
目前还没有任何答案,快来回答吧!