有没有办法获取BigQuery中每条记录的行号?(从规格来看,我还没有看到任何关于它的东西)有一个NTH()函数,但这适用于重复的字段.
在某些情况下,BigQuery中不需要行号,例如使用TOP()或LIMIT函数.但是,我需要它来模拟一些分析函数,例如累积和().为此,我需要用序号识别每条记录.对此有任何解决方法吗?
在此先感谢您的帮助!
狮子座
Fel*_*ffa 33
2018更新:如果您想要的是每行的唯一ID
#standardSQL
SELECT GENERATE_UUID() uuid
, *
FROM table
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
但是"查询执行过程中资源超出了:查询无法在分配的内存中执行.OVER()运算符使用了太多的内存.."
好的,让我们重现那个错误:
SELECT *, ROW_NUMBER() OVER()
FROM `publicdata.samples.natality`
Run Code Online (Sandbox Code Playgroud)
是的 - 这是因为OVER()需要将所有数据都装入一个VM - 您可以使用PARTITION解决这个问题:
SELECT *, ROW_NUMBER() OVER(PARTITION BY year, month) rn
FROM `publicdata.samples.natality`
Run Code Online (Sandbox Code Playgroud)
"但是现在很多行都有相同的行号,我想要的每行都有不同的id"
好的好的.让我们使用分区为每一行提供行号,让我们将该行号与分区字段组合起来,以获得每行的唯一ID:
SELECT *
, FORMAT('%i-%i-%i', year, month, ROW_NUMBER() OVER(PARTITION BY year, month)) id
FROM `publicdata.samples.natality`
Run Code Online (Sandbox Code Playgroud)
最初的2013解决方案:
好消息:BigQuery现在有一个row_number函数.
简单的例子:
SELECT [field], ROW_NUMBER() OVER()
FROM [table]
GROUP BY [field]
Run Code Online (Sandbox Code Playgroud)
更复杂的工作示例:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33667 次 |
| 最近记录: |