Google Cloud Dataflow ETL(数据存储区 -> 转换 -> BigQuery)
Posted
技术标签:
【中文标题】Google Cloud Dataflow ETL(数据存储区 -> 转换 -> BigQuery)【英文标题】:Google Cloud Dataflow ETL (Datastore -> Transform -> BigQuery) 【发布时间】:2015-10-31 00:20:17 【问题描述】:我们有一个在 Google App Engine 上运行的应用程序,它使用 Datastore 作为持久性后端。当前应用程序主要具有“OLTP”功能和一些基本报告。在实施报告时,我们发现使用 Datastore 和 GQL 处理大量数据(数百万个对象)非常困难。为了通过适当的报告和商业智能功能增强我们的应用程序,我们认为最好设置一个 ETL 流程来将数据从 Datastore 移动到 BigQuery。
最初我们考虑将 ETL 流程实现为 App Engine cron 作业,但看起来 Dataflow 也可以用于此目的。我们对设置流程有以下要求
能够使用非流式将所有现有数据推送到 BigQuery BigQuery 的 API。 完成上述操作后,在更新/创建任何新数据时推送任何新数据 使用流式 API 将数据存储到 BigQuery。我的问题是
-
Cloud Dataflow 是否适合实施此管道?
我们能否推送现有数据?有些种类有
数以百万计的对象。
应该采用什么正确的方法来实施它?我们正在考虑两种方法。
第一种方法是通过 pub/sub,即为现有数据创建一个 cron 作业并将所有数据推送到 pub/sub。对于任何新的更新,将数据推送到 pub/sub,同时在 DataStore 中进行更新。 Dataflow Pipeline 将从 pub/sub 中选择它并将其推送到 BigQuery。
第二种方法是在 Dataflow 中创建一个批处理管道,该管道将查询 DataStore 并将任何新数据推送到 BigQuery。
问题是这两种方法可行吗?哪一个在成本方面更好?有没有比以上两种更好的方法?
谢谢,
rizTaak
【问题讨论】:
【参考方案1】:Dataflow 绝对可以用于此目的。事实上,Dataflow 的可扩展性应该使该过程快速且相对容易。
您的两种方法都应该有效 - 我会优先使用第二种方法,即使用批处理管道移动现有数据,然后使用流管道通过 Cloud Pub/Sub 处理新数据。除了数据移动之外,Dataflow 还允许对数据本身执行任意分析/操作。
也就是说,BigQuery 和 Datastore 可以直接连接。例如,请参阅 BigQuery 文档中的 Loading Data From Cloud Datastore。
【讨论】:
使用数据存储备份工具的“自动”解决方案依赖于文件 API,该 API 将在几天后关闭。今天暂时关闭了。因此,似乎 Dataflow 将成为实现这一点的 go_to 解决方案。我看到这些示例提供了写入 BigQuery 的信息,但是我们应该在哪里寻找从 Datastore 读取的示例?我找到了文档,并将从中工作,但是使用 Dataflow 的 Datastore -> BigQuery 的完整示例将非常有帮助。谢谢! 可以在我们的cookbook
示例中找到从 Datastore 读取的示例。将其与 BigQuery 示例配对应该很简单。以上是关于Google Cloud Dataflow ETL(数据存储区 -> 转换 -> BigQuery)的主要内容,如果未能解决你的问题,请参考以下文章
在 google-cloud-dataflow 中使用文件模式匹配时如何获取文件名
到 Cloud Bigtable 的 Google Cloud Dataflow 管道中的异常
Google-cloud-dataflow:无法通过带有“BigQueryDisposition.WRITE_TRUNCATE”的“WriteToBigQuery/BigQuerySink”将 jso
Google Cloud Dataflow 服务帐户未传播给工作人员?