Google bigquery 以增量方式将数据从GCP数据存储移动到BigQuery的最佳实践

Google bigquery 以增量方式将数据从GCP数据存储移动到BigQuery的最佳实践,google-bigquery,google-cloud-datastore,Google Bigquery,Google Cloud Datastore,我们正在从数据存储数据源设计数据仓库解决方案。我们希望在预定义的时间间隔内将新插入/更新/删除的数据存储实体加载到BigQuery for analytics中 似乎有几种选择: 进行完整备份,并将数据加载到BigQuery中。以及BigQuery中的重复数据消除。这在概念上非常简单,但每次加载/处理所有数据对我来说效率很低 执行操作时发布所有新的/更新的/删除的实体,并让Dataflow subscribe和TL订阅BigQuery 在实体上具有上次修改的时间戳,并仅拉出在指定时间范围内修改的

我们正在从数据存储数据源设计数据仓库解决方案。我们希望在预定义的时间间隔内将新插入/更新/删除的数据存储实体加载到BigQuery for analytics中

似乎有几种选择:

  • 进行完整备份,并将数据加载到BigQuery中。以及BigQuery中的重复数据消除。这在概念上非常简单,但每次加载/处理所有数据对我来说效率很低

  • 执行操作时发布所有新的/更新的/删除的实体,并让Dataflow subscribe和TL订阅BigQuery

  • 在实体上具有上次修改的时间戳,并仅拉出在指定时间范围内修改的那些实体。我们希望采用此选项,但删除的记录似乎有问题,我们是否必须实施软删除


  • 有关于最佳实践的建议吗?

    我们还实施了另一个选项:)

    您对所有操作进行BQ流式插入(最好使用基于插入时间的分区),然后,如果需要,您可以定期生成合并表(其中每个记录只有一个实例),这样您就可以正确地考虑更新/删除

    我发现有趣的是,这个包含所有(只是流式传输的)非整合数据的表可以提供一些非常有趣的见解,比如更新/删除模式,它们在整合时会消失

    你的#1相当浪费,效率低下。您必须导出所有数据,而不仅仅是您关心的更改的增量。备份+加载过程会在GCS中创建中间文件,速度有点慢,加载过程也会随之进行

    选项2是可行的,但它需要更多的基础设施。更多的失败点

    我认为方案3是最好的。正如您已经提到的,软删除会有所帮助——您不需要实际删除数据,只需在时间戳处添加
    active/inactive
    标志或
    deleted\u即可。此外,要使ETL递增,还需要在
    处更新或在处修改