本頁說明使用 Datastream 時的最佳做法,協助您從 Dataflow Datastream to BigQuery 範本遷移至 Datastream 內建的 BigQuery 複製解決方案。
事前準備
本頁的操作說明假設您已符合以下條件:
- 您熟悉並已安裝 Docker。
- 您知道如何從 GitHub 等服務複製存放區。
- 您瞭解如何在 Datastream 中執行串流。
- 您已安裝 Google Cloud CLI。
遷移工具包總覽
Datastream BigQuery 遷移工具包是由 Google Cloud提供的開放原始碼軟體。這個工具包可協助您從 Dataflow Datastream to BigQuery 範本遷移,但您也可以用來從其他管道遷移,詳情請參閱下方的「從其他管道遷移」一節。
如要使用工具包遷移 BigQuery 資料表,請完成下列步驟:
- 建立、啟動及暫停以 BigQuery 為目的地的 Datastream 串流。
- 針對每個需要遷移的 BigQuery 資料表執行遷移作業。
- 繼續串流。
工具包會執行下列作業:
- 使用 Datastream discover API 擷取來源資料表結構定義。
- 根據擷取的結構定義,建立與 Datastream 相容的 BigQuery 資料表。
- 從要遷移的 BigQuery 資料表擷取結構定義,以判斷必要的資料類型轉換。
- 將原始資料表中的所有現有資料列複製到新資料表,包括適當的資料欄類型 轉換。
如要進一步瞭解工具包的結構和使用的引數,請參閱工具包 README.md 檔案。
設定遷移工具包
如要使用 Docker 執行遷移工具包,請按照下列步驟操作:
複製存放區,然後將目錄變更為該存放區:
git clone https://github.com/GoogleCloudPlatform/datastream-bigquery-migration-toolkit && cd datastream-bigquery-migration-toolkit建構映像檔:
docker build -t migration-service .使用 Google Cloud CLI 憑證進行驗證:
docker run -ti \ --name gcloud-config migration-service gcloud auth application-default login設定 Google Cloud 專案屬性:
docker run -ti --volumes-from gcloud-config migration-service \ gcloud config set project PROJECT_ID將 PROJECT_ID 替換為專案的 ID。 Google Cloud
從 Dataflow 遷移至 Datastream 內建解決方案
開始播放串流內容,然後立即暫停。這樣一來,Datastream 就能擷取遷移作業開始前擷取變更的位置。
排空 Datastream 和 Dataflow 管道:
- 暫停現有的 Cloud Storage 目的地串流。
- 檢查串流的總延遲時間指標,並等待至少與目前延遲時間一樣長的時間,確保所有傳輸中的事件都寫入目的地。
- 排空 Dataflow 工作。
執行遷移作業:
在
dry_run模式下執行遷移作業。dry_run模式可讓您產生CREATE TABLEDDL 陳述式和用於複製資料的 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:專案的專屬 ID。 Google Cloud
- STREAM_ID:BigQuery 目的地串流的專屬 ID。
- STREAM_REGION:串流的位置,例如
us-central1。 - SOURCE_SCHEMA_NAME:來源結構定義的名稱。
- SOURCE_TABLE_NAME:來源資料表的名稱。
- BIGQUERY_SOURCE_DATASET_NAME:現有 BigQuery 資料集的名稱。
- BIGQUERY_SOURCE_TABLE_NAME:現有 BigQuery 資料表的名稱。
檢查
output/create_target_table和output/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 {} \;如要執行 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
繼續播放暫停的串流。
開啟 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 來源。