我正在检查从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不支持重命名表或物化视图或表别名。由于我们希望每天将聚合数据保存在同一个表中,因此如果表不为空,我们就无法使用目标表。
答案 0 :(得分:2)
您可以使用writeDisposition
overwrite the same table指定目标表已存在时发生的操作。
支持以下值:
WRITE_TRUNCATE
:如果表已经存在,BigQuery会覆盖表数据。 WRITE_APPEND
:如果表已经存在,BigQuery会将数据附加到表中。 WRITE_EMPTY
:如果表已存在且包含数据,则在作业结果中返回“重复”错误。
默认值为WRITE_EMPTY
。 每个操作都是原子操作,只有在BigQuery能够成功完成作业时才会发生。作业完成时,创建,截断和追加操作将作为一个原子更新发生。
对于RENAMING tables,请查看此答案。