如果標準 Datastream 補充作業耗時過長,或有產品限制,您可以將初始資料另外複製到現有的 BigQuery 資料表。從特定記錄位置將串流變更資料擷取 (CDC) 更新內容傳入 BigQuery,即可讓資料表保持同步,不必執行內建補充作業。
問題
使用 BigQuery Storage Write API 填入的 BigQuery 資料表不允許一般資料操縱語言 (DML) 作業。也就是說,在 CDC 資料串流開始寫入 BigQuery 資料表後,就無法新增資料表中尚未預先填入的歷來資料。
請考量下列情境:
- 時間戳記 1:資料表複製作業啟動。
- 時間戳記 2:複製資料表時,來源的 DML 作業會導致資料變更 (新增、更新或移除資料列)。
- 時間戳記 3:CDC 啟動,但不會擷取時間戳記 2 期間發生的變更,導致資料不一致。
解決方案
為確保資料完整性,CDC 程序必須擷取來源中所有變更,這些變更發生於上次更新後,並已複製到 BigQuery 資料表。
下列解決方案可確保 CDC 程序擷取 TIMESTAMP 2 的所有變更,而不會阻止複製作業將資料寫入 BigQuery 資料表。
必要條件
- BigQuery 中的目標資料表必須與 Datastream 建立的資料表具有完全相同的結構定義和設定。您可以使用 Datastream BigQuery 遷移工具包完成這項作業。
- 如果是 MySQL 和 Oracle 來源,您必須能夠在啟動複製作業時找出記錄位置。
- 資料庫必須有足夠的儲存空間和適當的記錄保留政策,才能完成資料表複製程序。
MySQL 和 Oracle 來源
- 建立串流,但不要啟動要用於持續 CDC 複寫的串流。串流必須處於「CREATED」狀態。
- 準備好開始複製資料表時,請找出資料庫目前的記錄位置:
- 如果是 MySQL,請參閱 MySQL 說明文件,瞭解如何取得複製二進位記錄座標。找出記錄位置後,請關閉工作階段,釋出資料庫的所有鎖定。
- 如為 Oracle,請執行下列查詢:
SELECT current_scn FROM V$DATABASE。
- 將來源資料庫中的資料表複製到 BigQuery。
- 複製作業完成後,請按照「管理串流」頁面所述步驟,從先前確定的記錄位置啟動串流。
PostgreSQL 來源
- 準備好開始複製資料表時,請建立複製槽。詳情請參閱「設定來源 PostgreSQL 資料庫」。
- 將來源資料庫中的資料表複製到 BigQuery。
- 複製作業完成後,請建立並啟動串流。