Datastream BigQuery 遷移工具包


本頁說明使用 Datastream 從 Dataflow Datastream 到 BigQuery 範本遷移至 Datastream 內建 BigQuery 複製解決方案時的最佳做法。

事前準備

本頁的操作說明假設您已符合下列條件:

  • 您熟悉並已安裝 Docker
  • 您知道如何從 GitHub 等服務複製存放區。
  • 您已瞭解如何在 Datastream 中執行串流。
  • 您已安裝 Google Cloud CLI

遷移工具包總覽

Datastream BigQuery Migration Toolkit 是 Google Cloud提供的開放原始碼軟體。您可以使用工具包從 Dataflow Datastream 遷移至 BigQuery 範本,但也可以在從其他管道遷移時使用,如後續的「從其他管道遷移」一節所述。

如要使用工具包遷移 BigQuery 資料表,請完成下列步驟:

  1. 使用 BigQuery 目的地建立、啟動及暫停 Datastream 串流。
  2. 針對每個需要遷移的 BigQuery 資料表執行遷移作業。
  3. 繼續串流。

工具包會執行以下操作:

  • 使用 Datastream discover API 擷取來源資料表結構定義。
  • 根據擷取的結構定義,建立與 Datastream 相容的 BigQuery 表格。
  • 擷取要遷移的 BigQuery 資料表結構定義,以決定必要的資料類型轉換。
  • 將原始資料表的所有現有資料列複製到新資料表,包括適當的資料欄類型轉換

如要進一步瞭解工具包的結構方式和使用的引數,請參閱工具包 README.md 檔案

設定遷移工具包

如要使用 Docker 執行遷移工具包,請執行下列步驟:

  1. 複製存放區並變更目錄:

    git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit &&
    cd datastream-bigquery-migration-toolkit
    
  2. 建構映像檔:

    docker build -t migration-service .
    
  3. 使用 Google Cloud CLI 憑證進行驗證:

    docker run -ti \
    --name gcloud-config migration-service gcloud auth application-default login
    
  4. 設定 Google Cloud 專案屬性:

    docker run -ti --volumes-from gcloud-config migration-service \
    gcloud config set project PROJECT_ID
    

    PROJECT_ID 替換為 Google Cloud專案的 ID。

從 Dataflow 遷移至 Datastream 內建解決方案

  1. 建立 Datastream 串流,並將資料傳送至 BigQuery

  2. 開始串流,然後立即暫停。這可讓 Datastream 在遷移作業開始前,擷取擷取變更的起始位置。

  3. 排空 Datastream 和 Dataflow pipeline:

    1. 暫停現有的 Cloud Storage 目的地串流。
    2. 請檢查串流的總延遲指標,並等待至少目前延遲時間,確保任何傳輸中事件都會寫入目的地。
    3. 排空 Dataflow 工作
  4. 執行遷移作業:

    1. dry_run 模式下執行遷移作業。dry_run 模式可讓您產生 CREATE TABLE DDL 陳述式和 SQL 陳述式,用於複製資料,但不執行這些陳述式:

      docker run -v output:/output -ti --volumes-from gcloud-config \
      migration-service python3 ./migration/migrate_table.py dry_run \
      --project-id PROJECT_ID \
      --stream-id STREAM_ID \
      --datastream-region STREAM_REGION \
      --source-schema-name SOURCE_SCHEMA_NAME \
      --source-table-name SOURCE_TABLE_NAME \
      --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
      --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME
      

      更改下列內容:

      • PROJECT_ID: Google Cloud專案的專屬 ID。
      • STREAM_ID:BigQuery 目的地串流的專屬 ID。
      • STREAM_REGION:串流的位置,例如 us-central1
      • SOURCE_SCHEMA_NAME:來源結構定義的名稱。
      • SOURCE_TABLE_NAME:來源資料表的名稱。
      • BIGQUERY_SOURCE_DATASET_NAME:現有 BigQuery 資料集的名稱。
      • BIGQUERY_SOURCE_TABLE_NAME:現有 BigQuery 資料表的名稱。
    2. 檢查 output/create_target_tableoutput/copy_rows 底下的 .sql 檔案。以下是會在 Google Cloud 專案中執行的 SQL 指令:

      docker run -v output:/output -ti migration-service find output/create_target_table \
      -type f -print -exec cat {} \;
      
      docker run -v output:/output -ti migration-service find output/copy_rows \
      -type f -print -exec cat {} \;
      
    3. 如要執行 SQL 指令,請在 full 模式下執行遷移作業。full 模式可讓您在 BigQuery 中建立資料表,並複製現有 BigQuery 資料表的所有資料列:

      docker run -v output:/output -ti --volumes-from gcloud-config \
      migration-service python3 ./migration/migrate_table.py full \
      --project-id PROJECT_ID \
      --stream-id STREAM_ID \
      --datastream-region STREAM_REGION \
      --source-schema-name SOURCE_SCHEMA_NAME \
      --source-table-name SOURCE_TABLE_NAME \
      --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
      --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME
      
  5. 繼續播放暫停的串流。

  6. 開啟 Google Cloud 「Logs Explorer」(記錄檔探索工具),然後使用以下查詢尋找 Datastream 記錄:

    resource.type="datastream.googleapis.com/Stream"
    resource.labels.stream_id=STREAM_ID
    

    請找出以下記錄,其中 %d 為數字:

    Completed writing %d records into..
    

    這份記錄指出,新串流已成功將資料載入 BigQuery。只有在有 CDC 資料可載入時才會顯示。

從其他管道遷移

您也可以使用工具包,從其他管道遷移至 Datastream 內建的 BigQuery 解決方案。工具包可使用 dry_run 模式,根據來源資料庫結構定義,為 Datastream 相容的 BigQuery 資料表產生 CREATE TABLE DDL:

  docker run -v output:/output -ti --volumes-from gcloud-config \
  migration-service python3 ./migration/migrate_table.py dry_run \
  --project-id PROJECT_ID \
  --stream-id STREAM_ID \
  --datastream-region STREAM_REGION \
  --source-schema-name SOURCE_SCHEMA_NAME \
  --source-table-name SOURCE_TABLE_NAME \
  --bigquery-source-dataset-name BIGQUERY_SOURCE_DATASET_NAME \
  --bigquery-source-table-name BIGQUERY_SOURCE_TABLE_NAME

由於 BigQuery 資料表結構定義可能有所不同,因此很難提供通用的 SQL 陳述式來複製資料列。您可以使用來源資料表 DDL 目錄 (output/source_table_ddl) 和目的地資料表 DDL 目錄 (output/create_target_table) 中的結構定義,在來源資料欄上建立 SQL 陳述式,並套用適當的轉換

以下是可用的 SQL 陳述式格式範例:

  INSERT INTO DESTINATION_TABLE (DESTINATION_COLUMN1, DESTINATION_COLUMN2...)
  SELECT SOURCE_COLUMN1, SOURCE_COLUMN2
  FROM SOURCE_TABLE;

更改下列內容:

  • DESTINATION_TABLE:BigQuery 中目的地資料表的名稱。
  • DESTINATION_COLUMN:目的地資料表中的資料欄名稱。
  • SOURCE_COLUMN:來源資料表中的資料欄名稱。
  • SOURCE_TABLE:來源資料表的名稱。

限制

工具包有以下限制:

  • 現有和新 BigQuery 資料表中的資料欄名稱必須相符 (不含中繼資料欄)。如果您套用會變更現有資料表中資料欄名稱 (例如新增前置字元或變更大小寫) 的 資料流使用者定義函式 (UDF),遷移作業就會失敗。
  • 不支援跨區域和跨專案的遷移作業。
  • 遷移作業是以個別資料表為單位進行。
  • 僅支援 Oracle 和 MySQL 來源。