BigQuery中的RANK或ROW_NUMBER在大型数据集上

时间:2015-10-20 22:11:12

标签: google-bigquery row-number large-data

我需要在BigQuery中为大(约十亿行)数据集添加行号。当我尝试:

SELECT 
  *
  ROW_NUMBER() OVER (ORDER BY d_arf DESC) plarf 
FROM [trigram.trigrams8]

我得到“在查询执行期间超出资源。”,因为分析/窗口函数需要适合一个节点。

如何在BigQuery中为大型数据集添加行号?

1 个答案:

答案 0 :(得分:5)

你没有给我一个有效的查询,所以我必须创建自己的查询,所以你需要将它翻译成你自己的问题空间。此外,我不确定您为什么要在如此庞大的数据集中为每一行提供行号,但接受挑战:

SELECT a.enc, plarf, plarf+COALESCE(INTEGER(sumc), (0)) row_num
FROM (
  SELECT STRING(year)+STRING(month)+STRING(mother_age)+state enc, 
         ROW_NUMBER() OVER (PARTITION BY year ORDER BY enc) plarf,
         year
  FROM [publicdata:samples.natality] ) a
LEFT JOIN (
  SELECT COUNT(*) c, year+1 year, SUM(c) OVER(ORDER BY year) sumc
  FROM [publicdata:samples.natality] 
  GROUP BY year
) b
ON a.year=b.year
  • 我想做一个ROW_NUMBER()OVER(),但我不能因为元素太多而无法做到。
  • 有OVER(PARTITION)修复此问题,但现在每个分区都以1开头。
  • 但那没关系。在另一个子查询中,我将计算每个分区中有多少元素。
  • 周围的查询将获取每个分区的row_number,并将其添加到本地到分区的计数。
  • Ta da。