在云 SQL 中批量加载数据的 ETL 方法



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

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

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

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

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

1( 使用 ETL 工具(如 Talend in the Cloud(来帮助监控 ETL 作业和维护。

2( 使用云数据流,因为我们可能需要流式处理功能以及与各种源和接收器的集成。

第一种方法的问题在于,当将来的查询到来时,我最终可能会使用Cloud Dataflow,这对我的项目在基础设施成本方面不利,因为我将支付两个工具的费用。

第二种方法的问题在于数据流似乎不适合在云 SQL 数据库中简单地批量加载操作。

我在这里弄错了什么吗?有人可以开导我吗?

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

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

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

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