【问题标题】:Cloud SQL to BigQuery incrementally以增量方式将 Cloud SQL 转换为 BigQuery
【发布时间】: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或其他方式来做一些逻辑处理,这意味着我们不能只使用预定查询,因为我们不能使用查询来处理所有逻辑,但是可以混合使用视图和代码。

【问题讨论】:

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


    【解决方案1】:

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

    文档:

    更多阅读:

    所以您需要做的就是编写一个 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 中的表“同步”。

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

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

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

    如果有帮助请告诉我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2022-11-07
      相关资源
      最近更新 更多