本頁說明使用 Datastream 從 Dataflow Datastream 到 BigQuery 範本遷移至 Datastream 內建 BigQuery 複製解決方案時的最佳做法。
事前準備
本頁的操作說明假設您已符合下列條件:
- 您熟悉並已安裝 Docker。
- 您知道如何從 GitHub 等服務複製存放區。
- 您已瞭解如何在 Datastream 中執行串流。
- 您已安裝 Google Cloud CLI。
遷移工具包總覽
Datastream BigQuery Migration Toolkit 是 Google Cloud提供的開放原始碼軟體。您可以使用工具包從 Dataflow Datastream 遷移至 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 替換為 Google Cloud專案的 ID。
從 Dataflow 遷移至 Datastream 內建解決方案
建立 Datastream 串流,並將資料傳送至 BigQuery
開始串流,然後立即暫停。這可讓 Datastream 在遷移作業開始前,擷取擷取變更的起始位置。
排空 Datastream 和 Dataflow pipeline:
- 暫停現有的 Cloud Storage 目的地串流。
- 請檢查串流的總延遲指標,並等待至少目前延遲時間,確保任何傳輸中事件都會寫入目的地。
- 排空 Dataflow 工作。
執行遷移作業:
在
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 資料表的名稱。
檢查
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 「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 來源。