「從 Spanner 到 BigQuery」範本是一個批次管道,可從 Spanner 資料表讀取資料,並將資料寫入 BigQuery。
管道相關規定
- 執行管道之前,來源 Spanner 資料表必須已存在。
- 執行管道之前,BigQuery 資料集必須已存在。
- 說明您 BigQuery 結構定義的 JSON 檔案。
檔案必須包含名為
fields的頂層 JSON 陣列。fields陣列的內容必須使用下列模式:{"name": "COLUMN_NAME", "type": "DATA_TYPE"}。下列 JSON 說明 BigQuery 結構定義範例:
{ "fields": [ { "name": "location", "type": "STRING" }, { "name": "name", "type": "STRING" }, { "name": "age", "type": "STRING" }, { "name": "color", "type": "STRING" }, { "name": "coffee", "type": "STRING" } ] }
「Spanner 到 BigQuery」批次範本不支援將資料匯入目標 BigQuery 資料表中的
STRUCT(記錄) 欄位。
範本參數
必要參數
- spannerInstanceId:要讀取的 Spanner 資料庫執行個體 ID。
- spannerDatabaseId:要匯出的 Spanner 資料庫的資料庫 ID。
- outputTableSpec:用於寫入輸出內容的 BigQuery 輸出資料表位置。例如
<PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>。視指定的createDisposition而定,系統可能會使用使用者提供的 Avro 結構定義,自動建立輸出資料表。
選用參數
- spannerProjectId:Spanner 資料庫所在的專案 ID。這個參數的預設值是執行 Dataflow 管道的專案。
- spannerTableId:要匯出的 Spanner 資料庫資料表名稱。如果已設定 sqlQuery,系統會忽略這項設定。
- spannerRpcPriority:Spanner 呼叫的請求優先順序 (https://cloud.google.com/spanner/docs/reference/rest/v1/RequestOptions)。可能的值為
HIGH、MEDIUM和LOW。預設值為HIGH。 - sqlQuery:用於從 Spanner 資料庫讀取資料的 SQL 查詢。如果 spannerTableId 為空值,則為必要欄位。
- bigQuerySchemaPath:JSON 檔案的 Cloud Storage 路徑 (gs://),用來定義 BigQuery 結構定義。如果建立配置不是 CREATE_NEVER,則這是必填欄位。例如
gs://your-bucket/your-schema.json。 - writeDisposition:BigQuery WriteDisposition (https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationload) 值。例如
WRITE_APPEND、WRITE_EMPTY或WRITE_TRUNCATE。預設值為WRITE_APPEND。 - createDisposition:BigQuery CreateDisposition (https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationload)。例如
CREATE_IF_NEEDED和CREATE_NEVER。預設值為CREATE_IF_NEEDED。 - useStorageWriteApi:如果為
true,管道會使用 BigQuery Storage Write API (https://cloud.google.com/bigquery/docs/write-api)。預設值為false。詳情請參閱「使用 Storage Write API」(https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api)。 - useStorageWriteApiAtLeastOnce:使用 Storage Write API 時,指定寫入語意。如要使用「至少一次」語意 (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics),請將這個參數設為
true。如要使用「僅限一次」語意,請將參數設為false。只有在useStorageWriteApi為true時,這個參數才會生效。預設值為false。
執行範本
控制台
- 前往 Dataflow 的「Create job from template」(透過範本建立工作) 頁面。 前往「依範本建立工作」
- 在「Job name」(工作名稱) 欄位中,輸入不重複的工作名稱。
- 選用:如要使用區域端點,請從下拉式選單中選取值。預設區域為
us-central1。如需可執行 Dataflow 工作的地區清單,請參閱「Dataflow 位置」。
- 從「Dataflow template」(Dataflow 範本) 下拉式選單中,選取 the Spanner to BigQuery template。
- 在提供的參數欄位中輸入參數值。
- 按一下「Run Job」(執行工作)。
gcloud
在殼層或終端機中執行範本:
gcloud dataflow flex-template run JOB_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Spanner_to_BigQuery_Flex \ --project=PROJECT_ID \ --region=REGION_NAME \ --parameters \ spannerInstanceId=SPANNER_INSTANCE_ID,\ spannerDatabaseId=SPANNER_DATABASE_ID,\ spannerTableId=SPANNER_TABLE_ID,\ sqlQuery=SQL_QUERY,\ outputTableSpec=OUTPUT_TABLE_SPEC,\
更改下列內容:
JOB_NAME: 您選擇的不重複工作名稱VERSION:您要使用的範本版本您可以使用下列值:
latest使用最新版範本,該範本位於值區中非依日期命名的上層資料夾: gs://dataflow-templates-REGION_NAME/latest/- 版本名稱,例如
2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在值區中相應的依日期命名上層資料夾中:gs://dataflow-templates-REGION_NAME/
REGION_NAME:您要部署 Dataflow 工作的區域,例如us-central1SPANNER_INSTANCE_ID:Spanner 執行個體 IDSPANNER_DATABASE_ID:Spanner 資料庫 IDSPANNER_TABLE_ID:Spanner 資料表名稱SQL_QUERY:SQL 查詢OUTPUT_TABLE_SPEC:BigQuery 資料表位置
API
如要使用 REST API 執行範本,請傳送 HTTP POST 要求。如要進一步瞭解 API 和授權範圍,請參閱 projects.templates.launch。
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch { "launchParameter": { "jobName": "JOB_NAME", "parameters": { "spannerInstanceId": "SPANNER_INSTANCE_ID", "spannerDatabaseId": "SPANNER_DATABASE_ID", "spannerTableId": "SPANNER_TABLE_ID", "sqlQuery": "SQL_QUERY", "outputTableSpec": "OUTPUT_TABLE_SPEC", }, "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/Cloud_Spanner_to_BigQuery_Flex", "environment": { "maxWorkers": "10" } } }
更改下列內容:
PROJECT_ID: 您要執行 Dataflow 工作的 Google Cloud 專案 IDJOB_NAME: 您選擇的不重複工作名稱VERSION:您要使用的範本版本您可以使用下列值:
latest使用最新版範本,該範本位於值區中非依日期命名的上層資料夾: gs://dataflow-templates-REGION_NAME/latest/- 版本名稱,例如
2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在值區中相應的依日期命名上層資料夾中:gs://dataflow-templates-REGION_NAME/
LOCATION:您要部署 Dataflow 工作的區域,例如us-central1SPANNER_INSTANCE_ID:Spanner 執行個體 IDSPANNER_DATABASE_ID:Spanner 資料庫 IDSPANNER_TABLE_ID:Spanner 資料表名稱SQL_QUERY:SQL 查詢OUTPUT_TABLE_SPEC:BigQuery 資料表位置
後續步驟
- 瞭解 Dataflow 範本。
- 請參閱 Google 提供的範本清單。