Google bigquery中的ROWNUM或ROWID

时间:2018-07-10 05:45:23

标签: google-bigquery

将一些东西移植到bigquery,并遇到一个问题。 我们有一堆没有唯一键值的数据。不幸的是,某些报告逻辑要求每一行都有唯一的值。

因此在像Oracle这样的系统中,我只会使用ROWNUMROWID伪列。

在没有那些伪列的vertica中,我将使用ROW_NUMBER() OVER()。但是在bigquery中,该错误失败了:

'dataset:bqjob_r79e7b4147102bdd7_0000016482b3957c_1': Resources exceeded during query execution: The query could not be executed in the allotted memory.
OVER() operator used too much memory..

该值不必是持久性的,只是查询结果中的唯一值。

如果可能,请避免执行extract-process-reload。

那么有什么方法可以为bigquery SQL中的查询结果行分配一个unqiue值吗?

编辑:对不起,应该澄清了。使用标准sql,而不是旧版

1 个答案:

答案 0 :(得分:2)

要缩放ROW_NUMBER() OVER(),您需要使用PARTITION

请参见https://stackoverflow.com/a/16534965/132438

#standardSQL
SELECT *
  , FORMAT('%i-%i-%i', year, month, ROW_NUMBER() OVER(PARTITION BY year, month)) id
FROM `publicdata.samples.natality` 

enter image description here