当我尝试在大型数据集上使用 PERCENT_RANK() 时,它会给我一个错误。
SELECT
a2_lngram,
a2_decade,
a2_totalfreq,
a2_totalbooks,
a2_freq, a2_bfreq,
a2_arf,
c_avgarf,
d_arf,
oi,
PERCENT_RANK() OVER (ORDER BY d_arf DESC) plarf
FROM [trigram.trigrams8]
Run Code Online (Sandbox Code Playgroud)
使用目标表和AllowLargeResults 返回:
“查询执行期间超出资源。”
当我将结果限制为几百时,它运行得很好。
JobID:oticyproject1:job_PpTpmMXYETUMiM_2scGgc997JVg 数据集是公共的。
这是预期的:分析/窗口函数的输入需要适合一个节点才能成功运行。
PERCENT_RANK() OVER (ORDER BY d_arf DESC) plarf
Run Code Online (Sandbox Code Playgroud)
仅当所有行都适合一个节点时才会运行。如果不这样做,您将看到“查询执行期间超出资源”错误。
有一种方法可以扩展分析函数:对数据进行分区。
PERCENT_RANK() OVER (PARTITION BY country ORDER BY d_arf DESC) plarf
Run Code Online (Sandbox Code Playgroud)
...那么该函数就可以在多个节点上运行,只要每个“国家/地区”行适合一个虚拟机。
但不是你的情况 - 我在这里要做的修复是计算单独的子查询、连接和除法的总数。
总之,分析函数很酷,但它们在每个分区的大小上存在可扩展性问题 - 幸运的是还有其他方法可以获得相同的结果。
归档时间: |
|
查看次数: |
7934 次 |
最近记录: |