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

ETL approaches to bulk load data in Cloud SQL

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

My Cloud SQL 实例包含两种类型的表:普通事务表和包含来自 API 的数据的表。第二种类型在 "operational database perspective" 中主要是只读的,并且很大一部分表每小时(批量)批量更新以丢弃旧数据并刷新值。

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

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

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

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

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

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

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

我这里有什么问题吗?谁能赐教一下?

您可以仅将 Cloud Dataflow 用于加载操作。这里有一个tutorial on how to perform ETL operations with Dataflow. It uses BigQuery but you can adapt it to connect to your Cloud SQL or other JDBC sources

更多示例可以在用户生成内容的官方 Google Cloud Platform github page for Dataflow analysis 上找到。

您还可以查看此 GCP ETL architecture example,它可以自动执行从操作数据库中提取数据的任务。

对于更简单的 ETL 操作,Dataprep is an easy tool to use and provides flow scheduling 也是如此。