【问题标题】:Filtering partitioned tables过滤分区表
【发布时间】:2017-01-25 01:11:57
【问题描述】:

我在 bigquery 中有一个 DAY 分区表,我想删除其中某个列值重复的行(我只想要最后一个这样的值,按时间戳列排序)。现在由于 bigquery DML 语言不支持分区表(并且有其他限制),我认为我需要做的是创建一个临时表,它是原始的过滤视图,删除原始然后执行副本将临时表改成原名并删除临时表。我可以这样做:

SELECT * EXCEPT(row_number) FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY partition_col order by time_col desc) row_number FROM my_partioned_table ) WHERE row_number = 1

但是如何使用这种方法保留分区信息?

如果我复制一个完整的表,会保留分区信息,但如果我想有效地创建一个表的过滤视图并保留分区,我该怎么办?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    此时,如果您的更改跨越多个分区,则需要分别为每个分区运行查询。

    1. 创建分区的临时表。
    2. 运行一个查询,该查询将返回表的过滤视图,一次一个分区(在 _PARTITIONTIME 上使用过滤器)并附加到临时表的右侧分区。 (例如,如果您正在处理 20170115 的分区,则目标表将为 table$20170115)
    3. 从临时表复制到最终结果表,分区信息预计会保留在表副本上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 2018-02-23
      • 2016-03-15
      • 1970-01-01
      • 2020-09-17
      • 2014-05-14
      • 1970-01-01
      相关资源
      最近更新 更多