O modelo do Spanner para o BigQuery é um pipeline em lote que lê dados de uma tabela do Spanner e escreve os dados no BigQuery.
Requisitos do pipeline
- A tabela do Spanner de origem tem de existir antes de executar o pipeline.
- O conjunto de dados do BigQuery tem de existir antes da execução do pipeline.
- Um ficheiro JSON que descreve o seu esquema do BigQuery.
O ficheiro tem de conter uma matriz JSON de nível superior com o título
fields
. O conteúdo da matrizfields
tem de usar o seguinte padrão:{"name": "COLUMN_NAME", "type": "DATA_TYPE"}
.O JSON seguinte descreve 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 o BigQuery não suporta a importação de dados para campos de
STRUCT
(Registo) na tabela do BigQuery de destino.
Parâmetros de modelos
Parâmetros obrigatórios
- spannerInstanceId: o ID da instância da base de dados do Spanner a partir da qual ler.
- spannerDatabaseId: o ID da base de dados do Spanner a exportar.
- outputTableSpec: a localização da tabela de resultados do BigQuery na qual escrever os resultados. Por exemplo,
<PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>
.Consoante ocreateDisposition
especificado, a tabela de saída pode ser criada automaticamente através do esquema Avro fornecido pelo utilizador.
Parâmetros opcionais
- spannerProjectId: o ID do projeto no qual reside a base de dados do Spanner. O valor predefinido para este parâmetro é o projeto onde o pipeline do Dataflow está a ser executado.
- spannerTableId: o nome da tabela da base de dados do Spanner a exportar. É ignorado se sqlQuery estiver definido.
- spannerRpcPriority: a prioridade do pedido (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 predefinido éHIGH
. - sqlQuery: a consulta SQL a usar para ler dados da base de dados do Spanner. Obrigatório se spannerTableId estiver vazio.
- bigQuerySchemaPath: o caminho do Cloud Storage (gs://) para o ficheiro JSON que define o seu esquema do BigQuery. Isto é necessário se a disposição de criação não for CREATE_NEVER. Por exemplo,
gs://your-bucket/your-schema.json
. - writeDisposition: o valor WriteDisposition do BigQuery (https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationload). Por exemplo,
WRITE_APPEND
,WRITE_EMPTY
ouWRITE_TRUNCATE
. A predefinição éWRITE_APPEND
. - createDisposition: o CreateDisposition do BigQuery (https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#jobconfigurationload). Por exemplo,
CREATE_IF_NEEDED
eCREATE_NEVER
. A predefinição éCREATE_IF_NEEDED
. - useStorageWriteApi: se
true
, o pipeline usa a API BigQuery Storage Write (https://cloud.google.com/bigquery/docs/write-api). O valor predefinido éfalse
. Para mais informações, consulte a secção Usar a API Storage Write (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api). - useStorageWriteApiAtLeastOnce: quando usa a API Storage Write, especifica a semântica de escrita. 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 a semântica exatamente uma vez, defina o parâmetro comofalse
. Este parâmetro só se aplica quandouseStorageWriteApi
étrue
. O valor predefinido éfalse
.
Execute o modelo
Consola
- Aceda à página do fluxo de dados Criar tarefa a partir de um modelo. Aceda a Criar tarefa a partir de modelo
- No campo Nome da tarefa, introduza um nome exclusivo para a tarefa.
- Opcional: para Ponto final regional, selecione um valor no menu pendente. A região
predefinida é
us-central1
.Para ver uma lista das regiões onde pode executar uma tarefa do Dataflow, consulte as localizações do Dataflow.
- No menu pendente Modelo do fluxo de dados, selecione the Spanner to BigQuery template.
- Nos campos de parâmetros fornecidos, introduza os valores dos parâmetros.
- Clique em Executar tarefa.
gcloud
Na 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 o seguinte:
JOB_NAME
: um nome de tarefa exclusivo à sua escolhaVERSION
: a versão do modelo que quer usarPode usar os seguintes valores:
latest
para usar a versão mais recente do modelo, que está disponível na pasta principal sem data no contentor: 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 pasta principal com a data correspondente no contentor: gs://dataflow-templates-REGION_NAME/
REGION_NAME
: a região onde quer implementar a tarefa do Dataflow, por exemplo,us-central1
SPANNER_INSTANCE_ID
: o ID da instância do SpannerSPANNER_DATABASE_ID
: o ID da base de dados do SpannerSPANNER_TABLE_ID
: o nome da tabela do SpannerSQL_QUERY
: a consulta SQLOUTPUT_TABLE_SPEC
: a localização da tabela do BigQuery
API
Para executar o modelo através da API REST, envie um pedido HTTP POST. Para mais informações sobre a API e os respetivos âmbitos 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 o seguinte:
PROJECT_ID
: o ID do projeto onde quer executar a tarefa do Dataflow Google CloudJOB_NAME
: um nome de tarefa exclusivo à sua escolhaVERSION
: a versão do modelo que quer usarPode usar os seguintes valores:
latest
para usar a versão mais recente do modelo, que está disponível na pasta principal sem data no contentor: 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 pasta principal com a data correspondente no contentor: gs://dataflow-templates-REGION_NAME/
LOCATION
: a região onde quer implementar a tarefa do Dataflow, por exemplo,us-central1
SPANNER_INSTANCE_ID
: o ID da instância do SpannerSPANNER_DATABASE_ID
: o ID da base de dados do SpannerSPANNER_TABLE_ID
: o nome da tabela do SpannerSQL_QUERY
: a consulta SQLOUTPUT_TABLE_SPEC
: a localização da tabela do BigQuery
O que se segue?
- Saiba mais sobre os modelos do Dataflow.
- Consulte a lista de modelos fornecidos pela Google.