Spanner to 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 to 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:定义 BigQuery 架构的 JSON 文件的 Cloud Storage 路径 (gs://)。(例如: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 基于模板创建作业页面。 转到“基于模板创建作业”
- 在作业名称字段中,输入唯一的作业名称。
- 可选:对于区域性端点,从下拉菜单中选择一个值。默认区域为
us-central1
。如需查看可以在其中运行 Dataflow 作业的区域列表,请参阅 Dataflow 位置。
- 从 Dataflow 模板下拉菜单中,选择 the Spanner to BigQuery template。
- 在提供的参数字段中,输入您的参数值。
- 点击运行作业。
gcloud
在 shell 或终端中,运行模板:
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-central1
SPANNER_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-central1
SPANNER_INSTANCE_ID
:Spanner 实例 IDSPANNER_DATABASE_ID
:Spanner 数据库 IDSPANNER_TABLE_ID
:Spanner 表名称SQL_QUERY
:SQL 查询OUTPUT_TABLE_SPEC
:BigQuery 表位置
后续步骤
- 了解 Dataflow 模板。
- 参阅 Google 提供的模板列表。