O modelo do Spanner para BigQuery é um pipeline em lote que lê dados de uma tabela do Spanner e os grava no BigQuery.
Requisitos de pipeline
- A tabela de entrada do Spanner precisa existir antes da execução do pipeline.
- O conjunto de dados do BigQuery precisa existir antes da execução do pipeline.
- Um arquivo JSON que descreve o esquema do BigQuery.
O arquivo precisa conter uma matriz JSON de nível superior chamada
fields
. O conteúdo da matrizfields
precisa usar o seguinte padrão:{"name": "COLUMN_NAME", "type": "DATA_TYPE"}
.Veja no JSON a seguir um exemplo de esquema do BigQuery:
{ "fields": [ { "name": "location", "type": "STRING" }, { "name": "name", "type": "STRING" }, { "name": "age", "type": "STRING" }, { "name": "color", "type": "STRING" }, { "name": "coffee", "type": "STRING" } ] }
O modelo de lote do Spanner para BigQuery não dá suporte à importação de dados para os campos
STRUCT
(registro) na tabela de destino do BigQuery.
Parâmetros do modelo
Parâmetros obrigatórios
- spannerInstanceId: o ID da instância do banco de dados do Spanner que será usado para as leituras.
- spannerDatabaseId: o ID do banco de dados do Spanner a ser exportado.
- outputTableSpec: o local da tabela de saída do BigQuery em que a saída será gravada. Por exemplo,
<PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>
. Dependendo docreateDisposition
especificado, a tabela de saída pode ser criada automaticamente usando o esquema do Avro fornecido pelo usuário.
Parâmetros opcionais
- spannerProjectId: o ID do projeto em que o banco de dados do Spanner está localizado. O valor padrão desse parâmetro é o projeto em que o pipeline do Dataflow está em execução.
- spannerTableId: o nome da tabela do banco de dados do Spanner a ser exportado. Será ignorado se sqlQuery estiver definido.
- spannerRpcPriority: a prioridade da solicitação (https://cloud.google.com/spanner/docs/reference/rest/v1/RequestOptions) para chamadas do Spanner. Os valores possíveis são
HIGH
,MEDIUM
eLOW
. O valor padrão éHIGH
. - sqlQuery: a consulta SQL a ser usada para ler dados do banco de dados do Spanner. Obrigatório se spannerTableId estiver vazio.
- bigQuerySchemaPath: o caminho do Cloud Storage (gs://) para o arquivo JSON que define o esquema do BigQuery. (Exemplo: gs://your-bucket/your-schema.json).
- writeDisposition: o valor de WriteDisposition do BigQuery (https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationload). Por exemplo,
WRITE_APPEND
,WRITE_EMPTY
ouWRITE_TRUNCATE
. O padrão éWRITE_APPEND
. - createDisposition: o valor de CreateDisposition do BigQuery (https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationload). Por exemplo,
CREATE_IF_NEEDED
eCREATE_NEVER
. O padrão éCREATE_IF_NEEDED
. - useStorageWriteApi: se
true
, o pipeline usará a API BigQuery Storage Write (https://cloud.google.com/bigquery/docs/write-api). O valor padrão éfalse
. Para mais informações, consulte Como usar a API Storage Write (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api). - useStorageWriteApiAtLeastOnce: ao usar a API Storage Write, especifica a semântica de gravação. Para usar a semântica pelo menos uma vez (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), defina este parâmetro como
true
. Para usar semântica exatamente uma vez, defina o parâmetro comofalse
. Esse parâmetro se aplica apenas quandouseStorageWriteApi
étrue
. O valor padrão éfalse
.
Executar o modelo
Console
- Acesse a página Criar job usando um modelo do Dataflow. Acesse Criar job usando um modelo
- No campo Nome do job, insira um nome exclusivo.
- Opcional: em Endpoint regional, selecione um valor no menu suspenso. A região padrão é
us-central1
.Para ver uma lista de regiões em que é possível executar um job do Dataflow, consulte Locais do Dataflow.
- No menu suspenso Modelo do Dataflow, selecione the Spanner to BigQuery template.
- Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
- Cliquem em Executar job.
gcloud
No shell ou no terminal, execute o modelo:
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,\
Substitua:
JOB_NAME
: um nome de job de sua escolhaVERSION
: a versão do modelo que você quer usarUse estes valores:
latest
para usar a versão mais recente do modelo, disponível na pasta mãe não datada no bucket: gs://dataflow-templates-REGION_NAME/latest/- o nome da versão, como
2023-09-12-00_RC00
, para usar uma versão específica do modelo, que pode ser encontrada aninhada na respectiva pasta mãe datada no bucket: gs://dataflow-templates-REGION_NAME/
REGION_NAME
: a região em que você quer implantar o job do Dataflow, por exemplo,us-central1
SPANNER_INSTANCE_ID
: o ID da instância do SpannerSPANNER_DATABASE_ID
: o ID do banco de dados do SpannerSPANNER_TABLE_ID
: o nome da tabela do SpannerSQL_QUERY
: a consulta SQLOUTPUT_TABLE_SPEC
: o local da tabela do BigQuery
API
Para executar o modelo usando a API REST, envie uma solicitação HTTP POST. Para mais informações sobre a
API e os respectivos escopos de autorização, consulte
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" } } }
Substitua:
PROJECT_ID
: o ID do projeto do Google Cloud em que você quer executar o job do DataflowJOB_NAME
: um nome de job de sua escolhaVERSION
: a versão do modelo que você quer usarUse estes valores:
latest
para usar a versão mais recente do modelo, disponível na pasta mãe não datada no bucket: gs://dataflow-templates-REGION_NAME/latest/- o nome da versão, como
2023-09-12-00_RC00
, para usar uma versão específica do modelo, que pode ser encontrada aninhada na respectiva pasta mãe datada no bucket: gs://dataflow-templates-REGION_NAME/
LOCATION
: a região em que você quer implantar o job do Dataflow, por exemplo,us-central1
SPANNER_INSTANCE_ID
: o ID da instância do SpannerSPANNER_DATABASE_ID
: o ID do banco de dados do SpannerSPANNER_TABLE_ID
: o nome da tabela do SpannerSQL_QUERY
: a consulta SQLOUTPUT_TABLE_SPEC
: o local da tabela do BigQuery
A seguir
- Saiba mais sobre os modelos do Dataflow.
- Confira a lista de modelos fornecidos pelo Google.