搭配現有的 BigQuery 資料表使用 Datastream

本頁說明以下用途的最佳做法:

  • 使用者在 BigQuery 中已有資料表,需要使用變更資料擷取 (CDC) 將資料複製到同一個 BigQuery 資料表。
  • 使用者需要將資料複製到現有的 BigQuery 資料表,而非使用 Datastream 補充功能,原因可能是時間不足或產品受限。

問題

使用 BigQuery Storage Write API 填入資料的 BigQuery 資料表不允許執行一般資料操縱語言 (DML) 作業。也就是說,一旦 CDC 串流開始寫入 BigQuery 資料表,就無法新增資料表中尚未預先填入的歷來資料。

請考量下列情境:

  1. TIMESTAMP 1:啟動資料表複製作業。
  2. TIMESTAMP 2:在複製資料表時,來源的 DML 作業會導致資料變更 (新增、更新或移除資料列)。
  3. TIMESTAMP 3:啟動 CDC,系統不會擷取 TIMESTAMP 2 發生的變更,導致資料出現差異。

解決方案

為確保資料完整性,CDC 程序必須擷取來源中所有變更,這些變更是在上次更新後立即發生,且已複製到 BigQuery 資料表。

以下解決方案可讓您確保 CDC 程序擷取 TIMESTAMP 2 之後的所有變更,且不會阻止複製作業將資料寫入 BigQuery 資料表。

事前準備

  • BigQuery 中的目標資料表必須具備與 Datastream 建立的資料表完全相同的結構定義和設定。您可以使用 Datastream BigQuery Migration Toolkit 完成這項工作。
  • 針對 MySQL 和 Oracle 來源,使用者必須能夠在啟動複製作業時識別記錄位置。
  • 資料庫必須有足夠的儲存空間和記錄保留政策,才能讓資料表複製程序完成。

MySQL 和 Oracle 來源

  1. 建立要用於持續 CDC 複製作業的串流,但不要啟動串流。串流必須處於「已建立」狀態。
  2. 準備開始資料表複製作業時,請找出資料庫目前的記錄位置:
    • 如要瞭解如何取得複製作業二進位記錄座標,請參閱 MySQL 說明文件。找出記錄位置後,請關閉工作階段,釋放資料庫上的所有鎖定。
    • 如為 Oracle,請執行下列查詢:SELECT current_scn FROM V$DATABASE
  3. 將資料表從來源資料庫複製到 BigQuery。
  4. 複製作業完成後,請按照「管理串流」頁面所述步驟,從您先前指定的記錄位置開始串流。

PostgreSQL 來源

  1. 準備好開始複製資料表時,請建立複製時段。詳情請參閱「設定來源 PostgreSQL 資料庫」。
  2. 將資料表從來源資料庫複製到 BigQuery。
  3. 複製作業完成後,請建立並啟動串流。