以增量方式将 Cloud SQL 转换为 BigQuery

Posted

技术标签:

【中文标题】以增量方式将 Cloud SQL 转换为 BigQuery【英文标题】:Cloud SQL to BigQuery incrementally 【发布时间】:2020-05-13 11:01:35 【问题描述】:

我需要一些关于我正在处理的用例之一的建议。

用例:

我们在 Cloud SQL 中拥有大约 5-10 个表的数据,其中一些被视为查找,而另一些则被视为事务性的。我们需要将其提供给 BigQuery,以制作 3-4 个表(扁平化、嵌套或非规范化),这些表将用于 Data Studio、Looker 等中的报告。

数据应该以增量方式处理,Cloud SQL 中的更改可能每 5 分钟发生一次,这意味着 BigQuery 报告应该可以近乎实时地获取数据。如果可能,我们还应该维护数据更改的历史记录。

解决方案:

我们在 BigQuery 中保留了 3 层,因此来自 Cloud SQL 的数据进入第一层,然后在展平后将其保存到第二层(维护历史),然后将其处理以插入第三层(报告) . 这种方法的 问题是它是为日常处理而开发的,无法帮助处理 Cloud SQL 中每 5 分钟的数据变化。

欢迎提出任何建议。

注意:-我们需要使用Dataflow,VM或其他方式来做一些逻辑处理,这意味着我们不能只使用预定查询,因为我们不能使用查询来处理所有逻辑,但是可以混合使用视图和代码。

【问题讨论】:

【参考方案1】:

这比您想象的要简单:BigQuery 可以直接从您的 Cloud SQL 中读取数据。

文档:

https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries

更多阅读:

https://medium.com/google-cloud/loading-mysql-backup-files-into-bigquery-straight-from-cloud-sql-d40a98281229

所以您需要做的就是编写一个 MySQL 查询来查找过去 5 分钟内的所有更改。您可以在 BigQuery 中运行此查询 - 并通过一个查询将所有数据具体化到 BigQuery 中,例如:

INSERT INTO `dataset.table`

SELECT * 
FROM EXTERNAL_QUERY(
  'your.CloudSql.database'
  , 'SELECT * FROM users')

【讨论】:

是否可以在计划查询中将此查询设置为每 5 分钟一次到 BigQuery 中?如果是这样,则同步接近实时 @Felipa,感谢您的回答,实际上我们正在对一些具有 5-6GB 数据的表使用联合查询工作,让我告诉 Postgres 无法直接处理,而是外部查询以更快的方式获取数据。 这里的事情就像我说的我需要用于报告的数据并且我正在连接 8-10 表,我在 Cloud SQL 上避免了这种情况,因为我认为它可能会导致那里出现问题。我使用普通查询和外部查询将每个表都发送到 BigQuery,然后使用 Dataflow 对其进行处理以将其带到第二层(历史维护),然后是报告层。现在,整个过程需要 15-20 分钟,因为 Dataflow 是批处理的。问题是我应该使用什么过程来加速这件事。您认为其他方式还是我可以在外部查询中使用那些 Big Join 并且它不会对 Cloud SQL 施加负载?【参考方案2】:

这是一个有趣的用例!如果 BQ 外部查询不是您的难题,我们最近构建了一个解决方案,可将 MySQL 中的表与 BigQuery 中的表“同步”。

该解决方案通过使用两个组件来工作:

    使用 Debezium 开发的连接器,用于将更改从 MySQL 发布到 PubSub 使用来自 PubSub 的更改并将其推送到 BigQuery 的 Dataflow 管道

请参阅此 README 以了解如何部署它:https://github.com/GoogleCloudPlatform/DataflowTemplates/tree/master/v2/cdc-parent/

如果有帮助请告诉我!

【讨论】:

以上是关于以增量方式将 Cloud SQL 转换为 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL 地理转换为 SQL 几何或以其他方式提高查找速度

如何以编程方式将 HQL 转换为 SQL 查询(不记录)

如何将时间增量转换为分钟?

Azure Synapse 管道:如何将增量更新从 SQL Server 移动到 Synapse 以处理数字

odi增量更新策略

008.Numpy日期时间和增量