gpt4 book ai didi

mysql - 如果同步到 Redshift/BigQuery,来自 MySQL 数据库的 bin 日志复制是否会保持唯一约束?

转载 作者:行者123 更新时间:2023-11-29 09:33:29 27 4
gpt4 key购买 nike

我们希望将数据仓库从 MySQL 数据库迁移到 Redshift 或 BigQuery。

虽然针对 OLAP 操作进行了优化,但这些基于列的数据库的缺点之一是它们不强制执行唯一约束。

因此,表中存在重复的订单/产品并非不可能。我们工作的行业是零售业,我们使用标准 Kimball 事实和维度(星型模式)数据库设计。

提出的一个潜在解决方案是在 MySQL 中构建数据库,并使用第三方复制工具将数据同步到 Redshift/BigQuery。这样,我们将在原始 MySQL 数据库中强制执行关键约束,并且仅将 Redshift/BigQuery 用于读取查询。

但是,在 MySQL 中强制执行约束并设置到 Redshift/BigQuery 的 bin 日志复制将使数据与 MySQL 中的数据保持一致,从而强制执行唯一约束?

最佳答案

首先,您无法从 MySQL 复制到 RedShift/BigQuery。

请理解 BigQuery 是一个分析数据库。

建议您在 Cloud SQL 中设置从 MySQL 的复制。然后在 BigQuery 中,您现在可以运行 EXTERNAL_QUERY,这意味着您可以使用 Cloud SQL MySQL 数据库查询/加入 BQ 数据库。

  1. 设置从当前实例到 Cloud SQL 实例的副本,请按照此操作 guide
  2. 了解如何 Cloud SQL federated queries让您从 BigQuery Cloud SQL 实例进行查询。

您可以通过这种方式实时访问关系数据库:

您在 BigQuery 上运行的示例查询:

SELECT * EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM mysqltable AS c ORDER BY c.customer_id'');

您甚至可以将 Bigquery 表与 SQL 表连接起来:

示例:

SELECT c.customer_id, c.name, SUM(t.amount) AS total_revenue,
rq.first_order_date
FROM customers AS c
INNER JOIN transaction_fact AS t ON c.customer_id = t.customer_id
LEFT OUTER JOIN EXTERNAL_QUERY(
'connection_id',
'''SELECT customer_id, MIN(order_date) AS first_order_date
FROM orders
GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;

关于mysql - 如果同步到 Redshift/BigQuery,来自 MySQL 数据库的 bin 日志复制是否会保持唯一约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58181686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com