代码之家  ›  专栏  ›  技术社区  ›  Sodved

google bigquery中的rownum或rowid

  •  2
  • Sodved  · 技术社区  · 6 年前

    把一些东西移植到bigquery,然后遇到一个问题。 我们有一堆没有唯一键值的数据。不幸的是,有些报表逻辑要求每一行有一个唯一的值。

    所以在像Oracle这样的系统中,我只需要使用 ROWNUM ROWID psudeo柱。

    在Vertica,它没有那些我会用到的psudeo列 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..
    

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

    希望尽可能避免提取过程重新加载。

    那么,有没有办法在bigquery sql中为查询结果行分配unqiue值呢?

    编辑:对不起,本该澄清的。使用标准SQL,而不是传统SQL

    1 回复  |  直到 6 年前
        1
  •  3
  •   Felipe Hoffa    6 年前

    为了 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