Datastream BigQuery 遷移工具包


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

事前準備

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

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

遷移工具包總覽

Datastream BigQuery 遷移工具包是由 Google Cloud提供的開放原始碼軟體。這個工具包可協助您從 Dataflow Datastream to 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 替換為專案的 ID。 Google Cloud

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

  1. 建立 以 BigQuery 為目的地的 Datastream 串流

  2. 開始播放影片,然後立即暫停。這樣一來,Datastream 就能擷取遷移作業開始前擷取變更的位置。

  3. 排空 Datastream 和 Dataflow 管道:

    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 「記錄檔探索工具」,然後使用下列查詢尋找 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 資料表中的資料欄名稱必須相符 (忽略中繼資料欄)。如果您套用 Dataflow 使用者定義函式 (UDF),變更現有資料表中的資料欄名稱 (例如新增前置字元或變更大小寫),遷移作業就會失敗。
  • 系統不支援跨區域和跨專案遷移作業。
  • 遷移作業是以資料表為單位進行。
  • 僅支援 Oracle 和 MySQL 來源。