Google Cloud Dataflow ETL(数据存储 - >转换 - > BigQuery)

riz*_*aak 8 google-app-engine google-bigquery google-cloud-datastore google-cloud-dataflow

我们使用数据存储作为持久性后端在Google App Engine上运行应用程序.目前,应用程序主要具有"OLTP"功能和一些初步报告.在实施报告时,我们遇到使用数据存储区和GQL处理大量数据(数百万个对象)非常困难.为了使用适当的报告和商业智能功能增强我们的应用程序,我们认为最好设置ETL过程以将数据从Datastore移动到BigQuery.

最初我们考虑将ETL过程实现为App Engine cron作业,但看起来Dataflow也可用于此.我们有以下设置流程的要求

  • 能够通过使用BigQuery的非流API将所有现有数据推送到BigQuery.
  • 完成上述操作后,只要使用流API在Datastore到BigQuery中更新/创建任何新数据,就将其推送.

我的问题是

  1. Cloud Dataflow是否适合实施此管道?
  2. 我们能够推送现有数据吗?一些种类有数百万个对象.
  3. 实施它的正确方法应该是什么?我们正在考虑两种方法. 一种方法是通过pub/sub,即对于现有数据创建一个cron作业并将所有数据推送到pub/sub.对于任何新的更新,在DataStore中更新数据的同时将数据推送到pub/sub.Dataflow Pipeline将从pub/sub中选择它并将其推送到BigQuery. 第二种方法是在Dataflow中创建一个批处理管道,它将查询DataStore并将任何新数据推送到BigQuery.

问题是这两种方法可行吗?哪一个更好的成本?有没有比上面两个更好的其他方式?

谢谢,

rizTaak

Dav*_*aci 8

数据流绝对可以用于此目的.事实上,Dataflow的可扩展性应该使流程快速且相对容易.

你的两种方法都应该有效 - 我会优先考虑使用批处理管道来移动现有数据,然后通过Cloud Pub/Sub处理新数据的流管道.除数据移动外,Dataflow还允许对数据本身执行任意分析/操作.

也就是说,BigQuery和Datastore可以直接连接.例如,请参阅BigQuery文档中的从云数据存储区加载数据.