【问题标题】:Aggregating last 30 days data in BigQuery在 BigQuery 中汇总过去 30 天的数据
【发布时间】:2016-11-08 05:39:00
【问题描述】:

我正在检查从 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 不支持重命名表或具体化视图或表别名。由于我们希望每天将聚合数据保存在同一个表中,因此如果表不为空,我们将无法使用目标表。

【问题讨论】:

  • 这样一张桌子的体积/大小是多少?
  • @Pentium10 表最大100GB
  • 与 2016 年 11 月一样,查询 1TB 的成本为 5 美元,拥有 30 个此类表 (100GB * 30=3TB) 的完整扫描成本为 15 美元。我们在这里谈论什么?看起来很便宜你的最终目标是什么?

标签: google-bigquery


【解决方案1】:

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

支持以下值:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多