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

RANK or ROW_NUMBER in BigQuery over a large dataset

我需要向 BigQuery 中的大型(约十亿行)数据集添加行号。当我尝试时:

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

我得到 "Resources exceeded during query execution.",因为 analytic/window 函数需要适合一个节点。

如何向 BigQuery 中的大型数据集添加行号?

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

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,并将其添加到本地分区计数中。
  • 他打.