[英]Will bin log replication from a MySQL database maintain unique constraints if synched to Redshift/BigQuery?
我們希望將數據倉庫從 MySQL 數據庫遷移到 Redshift 或 BigQuery。
雖然針對 OLAP 操作進行了優化,但這些基於列的數據庫的缺點之一是它們不強制執行唯一約束。
因此,您的表格中存在重復的訂單/產品並非不可能。 我們工作的行業是零售業,我們使用標准的 Kimball 事實和維度(星型模式)數據庫設計。
提出的一種潛在解決方案是在 MySQL 中構建數據庫,並使用第三方復制工具將數據同步到 Redshift/BigQuery。 這樣,我們將在原始 MySQL 數據庫中強制執行鍵約束,並且我們將僅將 Redshift/BigQuery 用於讀取查詢。
但是,在 MySQL 中強制執行約束並設置到 Redshift/BigQuery 的 bin 日志復制將使數據與 MySQL 中的數據相同,從而強制執行唯一約束?
首先,您不能從 MySQL 復制到 RedShift/BigQuery。
請理解 BigQuery 是一個分析型數據庫。
建議您從雲 SQL 中的 MySQL 設置復制。 然后在 BigQuery 中,您現在可以運行 EXTERNAL_QUERY,這意味着您可以使用 Cloud SQL MySQL 數據庫查詢/加入您的 BQ 數據庫。
您可以通過這種方式實時訪問您的關系數據庫:
您在 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 數據庫的事件(插入、更新、(刪除:並非所有 SaaS 產品支持...))的視圖。 因此,您的倉庫中的“原始”表將具有每個 MySQL 的唯一鍵的多個事件,然后您需要重新處理這些事件以最終得到與 MySQL 中相同的表。
為了進一步說明這一點:就像您的 MySQL 表在每個時間點都是快照或凍結的圖片/狀態,而您從二進制日志復制中獲得的是數據庫所有連續 state 更改的“電影”。 如果您想在倉庫中創建快照,則需要“重播”所有更改,直到您想要快照的位置。
這非常強大,因為您永遠不會丟失數據庫上發生的任何更改,並且總能找回它。 但它確實需要額外的工作來使您的數據倉庫表與輸入數據庫的“快照”形狀相同。
這通常可以通過 CTE 在您的倉庫上完成,該 CTE 添加row_number() over (partition by id order by updated_at desc) as rn
,然后where rn = 1 and deleted_at is null
的位置過濾該 CTE(其中id
是您的列唯一約束,如果您的唯一約束是復合的(在多個鍵上),您可以列出多個,並且updated_at
是每個更改數據捕獲事件的時間戳,而deleted_at
是刪除事件的時間戳(或者 null 如果給定鍵沒有發生刪除事件))。
對於開源和自托管變更數據捕獲,您還可以查看在 Kafka Connect(或 AWS Kinesis 或其他...)上運行的 Debezium 之類的東西,如果這是您的客戶願意投資的基礎設施...或者只是在您選擇的數據庫引擎/lib 中查看您首選數據庫的邏輯復制連接(例如,我在 Python 上為 PostgreSQL 使用psycopg2
(帶有extras
)...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.