首页 > 解决方案 > 在 Cloud SQL 中批量加载数据的 ETL 方法

问题描述

我需要将数据 ETL 到我的 Cloud SQL 实例中。此数据来自 API 调用。目前,我正在使用 Cronjobs 在 Kubernetes 中运行自定义 Java ETL 代码,该代码请求收集这些数据并将其加载到 Cloud SQL 上。问题在于管理 ETL 代码和监控 ETL 作业。当合并更多 ETL 流程时,当前的解决方案可能无法很好地扩展。在这种情况下,我需要使用 ETL 工具。

My Cloud SQL 实例包含两种类型的表:常见的事务表和包含来自 API 的数据的表。第二种类型在“操作数据库角度”中主要是只读的,并且很大一部分表每小时(批量)批量更新以丢弃旧数据并刷新值。

考虑到这种情况,我注意到 Cloud Dataflow 是 GCP 提供的 ETL 工具。但是,这个工具似乎更适合需要进行复杂转换并以多种格式摄取数据的大数据应用程序。此外,在 Dataflow 中,数据是并行处理的,并且工作节点会根据需要升级。由于 Dataflow 是一个分布式系统,因此在分配资源以执行简单的批量加载时,ETL 过程可能会产生开销。除此之外,我注意到 Dataflow 没有针对 Cloud SQL 的特定接收器。这可能意味着 Dataflow 不是 Cloud SQL 数据库中简单批量加载操作的正确工具。

在我目前的需求中,我只需要做简单的转换和批量加载数据。然而,在未来,我们可能想要处理其他数据源(png、json、csv 文件)和接收器(Cloud Storage 和也许是 BigQuery)。此外,在未来,我们可能希望提取流数据并将其存储在 Cloud SQL 上。从这个意义上说,底层的 Apache Beam 模型真的很有趣,因为它为批处理和流式处理提供了一个统一的模型。

考虑到所有这些背景,我可以看到两种方法:

1) 使用云中的 Talend 等 ETL 工具来帮助监控 ETL 作业和维护。

2) 使用 Cloud Dataflow,因为我们可能需要流功能以及与各种来源和接收器的集成。

第一种方法的问题在于,当未来的需求到来时,我可能最终还是会使用 Cloud Dataflow,这对我的项目的基础设施成本来说是不利的,因为我需要为两个工具付费。

第二种方法的问题在于,Dataflow 似乎不适合在 Cloud SQL 数据库中进行简单的批量加载操作。

我在这里有什么问题吗?有人可以启发我吗?

标签: google-cloud-platformgoogle-cloud-dataflowgoogle-cloud-sql

解决方案


您可以仅将 Cloud Dataflow 用于加载操作。这是有关如何使用 Dataflow 执行 ETL 操作的教程。它使用 BigQuery,但您可以调整它以连接到您的 Cloud SQL或其他JDBC 源

更多示例可以在Google Cloud Platform 官方 github 页面上找到,用于对用户生成的内容进行数据流分析。

您还可以查看这个GCP ETL 架构示例,该示例自动执行从操作数据库中提取数据的任务。

对于更简单的 ETL 操作,Dataprep是一个易于使用的工具,并且还提供流调度


推荐阅读