Google Cloud上的ETL - (数据流与Spring批处理) - > BigQuery

问题描述:

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

  1. 使用JAVA Spring Batch并创建微服务并使用Kubernetes作为部署环境。它会缩放吗?
  2. 使用云数据流的ETL

然后使用BigQuery的批量插入API(初始负载)和流插入API(增量负载时,在源提供的新数据)来加载BigQuery的非规范化架构。

请让我知道您的意见。

不知道你的数据量,具体是多少新的或差异数据,你每天和你如何做分页与REST API的 - 这里是我的指导...

如果你走的路一个使用Spring Batch的人很可能不得不想出你自己的分片机制:你将如何划分REST调用来实例化你的Spring服务?您也将在Kub管理空间中,并且将不得不通过流式API处理BQ重试。

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

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

您的REST呼叫有多大会导致记录计数?

+0

@Eric ...感谢您的回答...从这个API中,我可以获得第二基础的数据数据(我将每天汇总到此数据库中)。此API可以在每次调用时给出最多10000个数据点...还有分页支持。让我们举个例子 - 实体总数 - 10,000,与每个实体相关的度量类型 - 1000.因此,每年(每次每次测量的单次输入) - 365(不是天)* 10,000(总实体)* 1000(总测量) = 3650000000(约40亿) – Abhay

+0

@abhay - 我支持我的答案,然后,我会用数据流。您的工作流程的每日节奏将与模板很好地协同工作,您可以在一天之内进行分区,以使您的查询具有成本效益。 –

+0

@埃里克斯..感谢您的回答 – Abhay