google-bigquery - 以增量方式将数据从 GCP Datastore 移动到 BigQuery 的最佳做法
问题描述
我们正在从 Datastore 数据源构建我们的数据仓库解决方案。我们希望在预定义的时间间隔内将新插入/更新/删除的数据存储实体加载到 BigQuery 中以进行分析。
似乎有几种选择:
进行全类备份并将数据加载到 BigQuery 中。以及 BigQuery 中的重复数据删除。这在概念上非常简单,但是每次加载/处理所有数据对我来说似乎效率很低。
执行操作时发布所有新的/更新的/删除的实体,并让 Dataflow 订阅和 TL 到 BigQuery。
在实体上具有最后修改的时间戳,并仅提取在指定时间范围内修改的那些实体。我们想采用这个选项,但是删除的记录似乎有问题,我们必须执行软删除吗?
关于最佳实践的任何建议?
解决方案
我们已经实施了另一种选择:)
您对所有操作进行 BQ 流式插入(最好使用基于插入时间的分区),然后 - 如果需要,您可以生成合并表(您有每个记录的单个实例 - 因此您正在考虑正确更新/删除)经常。
我发现有趣的是,这张包含所有(只是流式传输的)非合并数据的表可能会提供一些非常有趣的见解——比如更新/删除模式——当你合并时它们会消失。
推荐阅读
- python - 是否可以创建一个类,每个实例都有不同的类型?
- scala - 如何在 Scala 编程语言的数据块中使用 api_key 和 api_secrete 发送邮件(jason 正文包含电子邮件详细信息)
- php - Laravel:@if Auth::user()->email 和复选框被选中?
- node.js - nodejs异步等待问题
- java - 使用 Java 代码通过 Appium 进行控制时,无法在 Outlook 邮件上使用 findElementByName
- spring - 使用 Spring Boot 作为单独 jar 的 JWT 身份验证不会重定向到其他 Spring Boot APP 中的 Rest 控制器
- python - 使用 python ruamel-yaml 保持 YAML 文件的偏移缩进
- appium - 如何在appium中使用longpress?
- r - 使用 data.table 在嵌套分组中排名前 n
- git - 如何检查分支是否被重新设置?