有没有什么方法可以优化ntile函数的运行时间。目前,我们有大约5100万条记录和17个变量。我们正在执行下面的查询,将数据集划分为100个bucket。
create table secondary_table
stored as orc
as
select a.*,NTILE(100) OVER(ORDER BY score) AS score_rank
from main_table a;
这里的分数变量表示12位十进制值。
到目前为止,所有的负载都被卸载到一个减速机上,完成99%的减速机需要很多时间。有什么方法可以优化它,因为当前的查询大约需要35分钟才能执行。
感谢您的回复。
提前谢谢。
1条答案
按热度按时间9gm1akwq1#
这不完全是一个答案,但它可能会提供一些指导。
问题是缺乏
partition by
在窗口函数中。用等价的构造替换它,row_number()
以及count(*)
不会有帮助的。当我遇到这个问题时,我可以用两种方法中的一种来解决它。
如果有大量重复,则聚合并使用累计和来定义分幅。
否则,请将值分组。
作为第二个例子。假设分数在0到1000之间,分布相当均匀。然后:
这个
GROUP BY
以及JOIN
应该更好地利用并行硬件。