google-bigquery - BigQuery 中的行号?

标签 google-bigquery

有没有办法获取 BigQuery 中每条记录的行号? (从规范来看,我没有看到任何关于它的信息)有一个 NTH() 函数,但这适用于重复的字段。

BigQuery 中有一些场景不需要行号,例如使用 TOP() 或 LIMIT 函数。但是,我需要它来模拟一些分析函数,例如累积 sum()。为此,我需要用序列号标识每条记录。有什么解决方法吗?

在此先感谢您的帮助!

狮子座

最佳答案

2018 年更新:如果您只想要每行的唯一 ID

#standardSQL
SELECT GENERATE_UUID() uuid
 , * 
FROM table

2018#standardSQL 解决方案:
SELECT
  ROW_NUMBER() OVER() row_number, contributor_username,
  count
FROM (
  SELECT contributor_username, COUNT(*) count
  FROM `publicdata.samples.wikipedia`
  GROUP BY contributor_username
  ORDER BY COUNT DESC
  LIMIT 5)

But what about "Resources exceeded during query execution: The query could not be executed in the allotted memory. OVER() operator used too much memory.."



好的,让我们重现该错误:
SELECT *, ROW_NUMBER() OVER() 
FROM `publicdata.samples.natality` 

是的 - 发生这种情况是因为 OVER() 需要将所有数据放入一个 VM - 您可以使用 PARTITION 解决这个问题:
SELECT *, ROW_NUMBER() OVER(PARTITION BY year, month) rn 
FROM `publicdata.samples.natality` 

"But now many rows have the same row number and all I wanted was a different id for each row"



好的好的。让我们使用分区来为每一行提供一个行号,并将该行号与分区字段结合起来以获得每行的唯一 id:
SELECT *
  , FORMAT('%i-%i-%i', year, month, ROW_NUMBER() OVER(PARTITION BY year, month)) id
FROM `publicdata.samples.natality` 

enter image description here

2013 年的原始解决方案:

好消息:BigQuery 现在有一个 row_number 函数。

简单的例子:
SELECT [field], ROW_NUMBER() OVER()
FROM [table]
GROUP BY [field]

更复杂的工作示例:
SELECT
  ROW_NUMBER() OVER() row_number,
  contributor_username,
  count,
FROM (
  SELECT contributor_username, COUNT(*) count,
  FROM [publicdata:samples.wikipedia]
  GROUP BY contributor_username
  ORDER BY COUNT DESC
  LIMIT 5)

关于google-bigquery - BigQuery 中的行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11057219/

相关文章:

sql - BigQuery SQL 如何在使用 LIMIT 时获取总计数

sql - BigQuery 中的动态 TABLE_DATE_RANGE

sql - PostgreSQL 中是否有与 generate_array 类似的函数?

google-cloud-platform - 每天从 Bigquery 加载数据到 Postgresql 云 SQL 数据库

google-bigquery - 选择所有列,但用 Google BigQuery 中的表达式替换一些列?

linux - 合并 Google Cloud Storage 中的文件

sql - BigQuery 中的外部应用

python - 具有结构数组的 Bigquery python SchemaField()

google-bigquery - BigQuery - 加载具有空值的 JSON 字段

google-bigquery - Big Query 作业失败,错误为 "Bad character (ASCII 0) encountered."