将一些东西移植到bigquery,并遇到一个问题。 我们有一堆没有唯一键值的数据。不幸的是,某些报告逻辑要求每一行都有唯一的值。
因此在像Oracle这样的系统中,我只会使用ROWNUM
或ROWID
伪列。
在没有那些伪列的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,而不是旧版
答案 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`