逐步将SQL迁移到BigQuery

时间:2020-01-28 03:38:38

标签: google-cloud-platform google-bigquery google-cloud-dataflow google-cloud-sql dataflow

对于我正在使用的一种用例,我需要一些建议。

用例:

我们在Cloud SQL中有大约5到10个表的数据,其中一些被视为查找,而其他则被视为事务性。我们需要以某种方式将其发送到BigQuery,以便从其中生成3-4个表(平整,嵌套或非规范化表),这些表将用于Data Studio,Looker等中的报表。

应该对数据进行增量处理,并且每5分钟可能会发生一次Cloud SQL更改,这意味着BigQuery报表应该几乎可以实时获取数据。如果可能的话,我们还应该保留数据更改的历史记录。

解决方案:

我们在BigQuery中保留了3层,因此来自Cloud SQL的数据进入第一层,然后经过展平后将其保存到第二层(保留历史记录),然后进行处理以插入到第三层(报告) 。 问题是因为该方法是为日常处理而开发的,无助于每5分钟更改一次Cloud SQL中的数据更改。

欢迎任何建议。

注意:-我们将要求使用Dataflow,VM或其他方式进行某些逻辑处理,这意味着我们不能仅使用计划查询,因为我们不能使用查询来处理所有逻辑,但是可以的,可以混合使用视图和代码。

2 个答案:

答案 0 :(得分:4)

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

文档:

更多阅读:

因此,您所需要做的就是编写一个MySQL查询,以查找最近5分钟内的所有更改。您可以在BigQuery中运行此查询-并使用以下查询将所有数据具体化为BigQuery:

INSERT INTO `dataset.table`

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

答案 1 :(得分:0)

这是一个有趣的用例!如果不是因为BQ外部查询而引起麻烦,我们最近建立了一种解决方案,可以将MySQL中的表与BigQuery中的表“同步”。

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

  1. 由Debezium开发的连接器,用于发布从MySQL到PubSub的更改
  2. 一个数据流管道,该管道使用PubSub中的更改并将其推送到BigQuery

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

让我知道它是否有帮助!