过滤分区表

时间:2017-01-23 18:26:19

标签: google-bigquery

我在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

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

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

1 个答案:

答案 0 :(得分:1)

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

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