【问题标题】:ETL on Google Cloud - (Dataflow vs. Spring Batch) -> BigQueryGoogle Cloud 上的 ETL -(Dataflow 与 Spring Batch)-> BigQuery
【发布时间】:2018-01-19 16:15:55
【问题描述】:

我正在考虑将 BigQuery 作为我的数据仓库要求。现在,我在谷歌云(云 SQL 和 BigTable)中有我的数据。我已经公开了我的 REST API 以从两者中检索数据。现在,我想从这些 API 中检索数据,执行 ETL 并将数据加载到 BigQuery 中。我现在正在评估 ETL 的 2 个选项(每小时数据的每日工作频率):-

  1. 使用JAVA Spring Batch创建微服务,使用Kubernetes作为部署环境。它会扩展吗?
  2. 使用 Cloud DataFlow 进行 ETL

然后使用 BigQuery 批量插入 API(用于初始加载)和流式插入 API(用于在源中有新数据时进行增量加载)加载 BigQuery 非规范化架构。

请告诉我你的意见。

【问题讨论】:

    标签: google-bigquery kubernetes spring-batch microservices google-cloud-dataflow


    【解决方案1】:

    不知道您的数据量,特别是您每天有多少新数据或差异数据以及您如何使用 REST API 进行分页 - 这是我的指导...

    如果您走上使用 Spring Batch 的道路,您很可能不得不提出自己的分片机制:您将如何划分 REST 调用以实例化您的 Spring 服务?您还将在 Kub 管理空间中,并且必须使用流式 API 处理 BQ 的重试。

    如果您沿着 Dataflow 路线走,您将不得不编写一些转换代码来调用您的 REST API 并执行分页以填充您的 PCollection 以 BQ 为目标。通过最近添加的 Dataflow 模板,您可以:创建一个每 N 小时触发一次的管道,并参数化您的 REST 调用以仅提取数据?since=latestCall。从那里您可以执行 BigQuery 写入。我建议在批处理模式下执行此操作,因为 1)如果您有数百万行,它会更好地扩展 2)管理起来不那么麻烦(在非活动时间)。

    由于 Cloud Dataflow 为 BiqQuery 内置了重试逻辑,并提供了所有输入和输出集合的一致性——在这种情况下,我投票支持 Dataflow。

    您的 REST 调用导致的记录数有多大?

    【讨论】:

    • @Eric...感谢您的回答...从这个 API,我可以获得基于秒的数据数据(我将每天汇总)..这个 API 最多可以提供 10000 个数据点每个电话....它也有分页支持。让我们举个例子 - 总实体 - 10,000,与每个实体相关的测量类型 - 1000。因此,每年(每天每次测量的单个条目) - 365(天数)* 10,000(总实体)* 1000(总测量) = 3650000000(约 40 亿)
    • @abhay - 我坚持我的回答,我会选择 Dataflow。您的工作流程的每日节奏将与模板很好地配合使用,您可以按天进行分区,以使您的查询具有成本效益。
    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2015-12-14
    • 2016-11-02
    • 1970-01-01
    • 2020-10-27
    相关资源
    最近更新 更多