将数据从GCP数据存储逐步移至BigQuery的最佳做法

时间:2018-07-30 20:50:42

标签: google-bigquery google-cloud-datastore

我们正在从数据存储数据源中构建我们的数据仓库解决方案。我们希望在预定的时间间隔内将新插入/更新/删除的数据存储区实体加载到BigQuery中进行分析。

似乎有几种选择:

  1. 进行完整类型的备份并将数据加载到BigQuery中。还有BigQuery中的Dedup。从概念上讲,这非常简单,但是每次加载/处理所有数据对我来说似乎效率都很低。

  2. 在执行操作时发布所有新的/已更新/已删除的实体,并让Dataflow订阅和TL到BigQuery。

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

对最佳做法有何建议?

2 个答案:

答案 0 :(得分:1)

我们已经实现了另一个选择:)

您可以对所有操作进行BQ流插入(最好使用基于插入时间的分区),然后-如果需要,可以生成合并表(每个记录都有一个实例),因此您需要考虑更新/正确删除)。

我发现有趣的是,该表中包含所有(刚刚流式传输)的所有数据-非合并数据-可能会提供一些非常有趣的见解-例如更新/删除模式-合并后会消失。

答案 1 :(得分:0)

您的#1非常浪费且效率低下。您必须导出所有数据,而不仅是您关心的已更改增量。备份+加载过程会在GCS中创建中间文件,并且速度有些慢,并且加载过程还附带limitations

选项2可行,但需要更多基础结构。更多的故障点。

我认为选项3是最好的。就像您已经提到的那样,软删除会有所帮助-您实际上不需要删除数据,只需添加active/inactive标志或deleted_at时间戳即可。要使ETL递增,还需要updated_atmodified_at