如何将 Google Cloud SQL 与 Google Big Query 集成
Posted
技术标签:
【中文标题】如何将 Google Cloud SQL 与 Google Big Query 集成【英文标题】:How to integrate Google Cloud SQL with Google Big Query 【发布时间】:2017-09-22 17:13:51 【问题描述】:我正在设计一个解决方案,在该解决方案中,Google Cloud SQL 将用于存储来自应用程序正常运行的所有数据(OLTP 数据类型)。预计数据会随着时间的推移增长到相当大的规模。数据本身是关系型的,因此我们选择了 Cloud SQL 而不是 Cloud Datastore。
这些数据需要输入 Big Query 进行分析,并且需要接近实时的分析(最好的情况),尽管实际上可能会出现一些滞后。但我正在尝试设计一种解决方案,将这种延迟降至最低。
我的问题有 3 个部分 -
我应该使用 Cloud SQL 存储数据,然后将其移至 BigQuery 还是更改基本设计本身并最初也使用 BigQuery 存储数据? BigQuery 是否适合用于常规、低延迟的 OLTP 工作负载?(我不这么认为 - 我的假设是否正确?)
将 Cloud SQL 数据加载到 BigQuery 并让这种集成近乎实时地工作的推荐/最佳做法是什么?
Cloud Dataflow 是一个不错的选择吗?如果我将 Cloud SQL 连接到 Cloud DataFlow 并进一步连接到 BigQuery - 它会起作用吗?或者有没有其他更好的方法来实现这一点(如问题 2 中所问)?
【问题讨论】:
【参考方案1】:看看WePay是如何做到的:
https://wecode.wepay.com/posts/bigquery-wepaymysql 到 GCS 运算符对 MySQL 执行 SELECT 查询 桌子。 SELECT 提取所有大于(或等于)最后一个的数据 高水印。高水位线要么是主键 表(如果表是仅附加的),或修改时间戳 列(如果表接收更新)。同样,SELECT 语句 还可以回溯一点时间(或行)以捕获可能丢弃的 上次查询中的行(由于上述问题)。
借助 Airflow,他们设法让 BigQuery 每 15 分钟与他们的 MySQL 数据库同步一次。
【讨论】:
谢谢费利佩!它对我真的很有帮助。【参考方案2】:BigQuery 支持Cloud SQL federated queries,可让您直接从 BigQuery 查询 Cloud SQL 数据库。要使 Cloud SQL 表与 BigQuery 保持同步,您可以编写一个简单的脚本,其中包含以下查询,以每小时同步两个表。
INSERT
demo.customers (column1)
SELECT
*
FROM
EXTERNAL_QUERY(
"project.us.connection",
"SELECT column1 FROM mysql_table WHERE timestamp > $timestamp;");
请记住将 $timestamp 替换为当前时间戳 - 1 小时。
【讨论】:
【参考方案3】:另一种方法是将写入过程拆分到 CloudSQL 和 Cloud Pub/Sub,然后让 Dataflow 阅读器流式传输到 BigQuery。当您的 BigQuery 表具有明显不同的目标架构时,这很有效 - 这在对关系数据进行非规范化时很常见。
好处是您可以将整体延迟减少到几秒钟;然而,主要的缺点是,如果您的事务数据高度变异,您将不得不创建一个版本控制方案来跟踪更改。
【讨论】:
【参考方案4】:Google 已就此主题提供了reference article,该主题与使用变更数据捕获工具识别变更数据并仅推送该工具有关。
这做出了一些可能对您不起作用的假设:
愿意学习 debezium 愿意让 GCP 连接到您的源 MySQL 数据库如果这些适合您的情况,这似乎是一个很好的解决方案。
【讨论】:
以上是关于如何将 Google Cloud SQL 与 Google Big Query 集成的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Google App Engine (Flex) Go 应用程序连接到 Google Cloud Postgres 实例
如何使用github.com/mattn/go-sqlite3对Google Cloud VM交叉编译Go软件包?
如何从 Cloud Functions 连接 Google Cloud SQL?
将 MySQL Workbench 与 Google Cloud SQL 连接起来