在BigQuery中汇总最近30天的数据

时间:2016-11-08 05:39:00

标签: google-bigquery

我正在检查从Redshift迁移到BigQuery的可行性。我需要帮助在BigQuery上实现以下用例。

我们有一个白天的产品性能表,它是一个日期分区表。它被称为product_performance_by_day。每天销售的每件产品都有一排。我们每天都会在当天结束时处理数据并将其放入当天的分区中。然后我们在过去30天内通过日期性能数据对其进行汇总,并将其放在名为product_performance_last30days的表中。这种聚合可以节省查询时间,在BigQuery的情况下也可以节省成本,因为它可以扫描更少的数据。

以下是我们目前在Redshift中的表现方式 -
我们将汇总数据放在一个新表中,例如product_performance_last30days_temp。然后删除product_performance_last30days表并将product_performance_last30days_temp重命名为product_performance_last30days。因此,product_performance_last30days表的停机时间非常短。

我们如何才能在BigQuery中做同样的事情?

目前,BigQuery不支持重命名表或物化视图或表别名。由于我们希望每天将聚合数据保存在同一个表中,因此如果表不为空,我们就无法使用目标表。

1 个答案:

答案 0 :(得分:2)

您可以使用writeDisposition overwrite the same table指定目标表已存在时发生的操作。

支持以下值:

  • WRITE_TRUNCATE:如果表已经存在,BigQuery会覆盖表数据。
  • WRITE_APPEND:如果表已经存在,BigQuery会将数据附加到表中。
  • WRITE_EMPTY:如果表已存在且包含数据,则在作业结果中返回“重复”错误。 默认值为WRITE_EMPTY

每个操作都是原子操作,只有在BigQuery能够成功完成作业时才会发生。作业完成时,创建,截断和追加操作将作为一个原子更新发生。

对于RENAMING tables,请查看此答案。