BigQuery中的PERCENT_RANK()返回超出的资源

时间:2015-10-19 00:57:09

标签: google-bigquery

当我尝试在大型数据集上使用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]

使用目标表并且AllowLargeResults返回:

“在查询执行期间超出了资源。”

当我将结果限制为几百个时,运行正常。

JobID:otichyproject1:job_PpTpmMXYETUMiM_2scGgc997JVg 数据集是公开的。

1 个答案:

答案 0 :(得分:1)

这是预期的:分析/窗口函数的输入需要适合一个节点才能成功运行。

PERCENT_RANK() OVER (ORDER BY d_arf DESC) plarf
只有当所有行都适合一个节点时,

才会运行。如果他们没有在查询执行期间看到"资源超出"错误。

有一种扩展分析功能的方法:对数据进行分区。

PERCENT_RANK() OVER (PARTITION BY country ORDER BY d_arf DESC) plarf

...然后该功能可以在多个节点上运行,只要每个国家'行适合一个VM。

不是你的情况 - 我在这里做的修复是在一个单独的子查询,连接和除法上计算总数。

总之,分析函数很酷,但它们在每个分区的大小上都存在可伸缩性问题 - 幸运的是还有其他方法可以获得相同的结果。