Modelo do Spanner para o Cloud Storage Avro

O modelo Spanner para ficheiros Avro no Cloud Storage é um pipeline em lote que exporta uma base de dados do Spanner completa para o Cloud Storage no formato Avro. A exportação de uma base de dados do Spanner cria uma pasta no contentor que selecionar. A pasta contém:

  • Um ficheiro spanner-export.json.
  • Um ficheiro TableName-manifest.json para cada tabela na base de dados que exportou.
  • Um ou mais ficheiros TableName.avro-#####-of-#####.

Por exemplo, a exportação de uma base de dados com duas tabelas, Singers e Albums, cria o seguinte conjunto de ficheiros:

  • Albums-manifest.json
  • Albums.avro-00000-of-00002
  • Albums.avro-00001-of-00002
  • Singers-manifest.json
  • Singers.avro-00000-of-00003
  • Singers.avro-00001-of-00003
  • Singers.avro-00002-of-00003
  • spanner-export.json

Requisitos do pipeline

  • A base de dados do Spanner tem de existir.
  • O contentor do Cloud Storage de saída tem de existir.
  • Além das funções de gestão de identidade e de acesso (IAM) necessárias para executar tarefas do Dataflow, também tem de ter as funções de IAM adequadas para ler os dados do Spanner e escrever no contentor do Cloud Storage.

Parâmetros de modelos

Parâmetros obrigatórios

  • instanceId: o ID da instância da base de dados do Spanner que quer exportar.
  • databaseId: o ID da base de dados do Spanner que quer exportar.
  • outputDir: o caminho do Cloud Storage para o qual os ficheiros Avro são exportados. A tarefa de exportação cria um novo diretório neste caminho que contém os ficheiros exportados. Por exemplo, gs://your-bucket/your-path.

Parâmetros opcionais

  • avroTempDirectory: o caminho do Cloud Storage onde os ficheiros Avro temporários são escritos.
  • spannerHost: o ponto final do Cloud Spanner a chamar no modelo. Usado apenas para testes. Por exemplo, https://batch-spanner.googleapis.com. O valor predefinido é: https://batch-spanner.googleapis.com.
  • snapshotTime: a data/hora que corresponde à versão da base de dados do Spanner que quer ler. A data/hora tem de ser especificada através do Zuluformato RFC 3339 UTC. A data/hora tem de ser no passado e aplica-se a obsolescência máxima da data/hora. Por exemplo, 1990-12-31T23:59:60Z. A predefinição é vazio.
  • spannerProjectId: o ID do projeto do Google Cloud que contém a base de dados do Spanner a partir da qual quer ler dados.
  • shouldExportTimestampAsLogicalType: se for true, as indicações de tempo são exportadas como um tipo long com o tipo lógico timestamp-micros. Por predefinição, este parâmetro está definido como false e as indicações de tempo são exportadas como strings ISO-8601 com precisão de nanosegundos.
  • tableNames: uma lista separada por vírgulas de tabelas que especifica o subconjunto da base de dados do Spanner a exportar. Se definir este parâmetro, tem de incluir todas as tabelas relacionadas (tabelas principais e tabelas referenciadas por chaves externas) ou definir o parâmetro shouldExportRelatedTables como true.Se a tabela estiver num esquema com nome, use o nome totalmente qualificado. Por exemplo: sch1.foo em que sch1 é o nome do esquema e foo é o nome da tabela. A predefinição é vazio.
  • shouldExportRelatedTables: se devem ser incluídas tabelas relacionadas. Este parâmetro é usado em conjunto com o parâmetro tableNames. A predefinição é: false.
  • spannerPriority: a prioridade do pedido para chamadas do Spanner. Os valores possíveis são HIGH, MEDIUM e LOW. O valor predefinido é MEDIUM.
  • dataBoostEnabled: definido como true para usar os recursos de computação do Spanner Data Boost para executar a tarefa com um impacto quase nulo nos fluxos de trabalho OLTP do Spanner. Quando está definida como true, também precisa da autorização de IAM spanner.databases.useDataBoost. Para mais informações, consulte a vista geral do Data Boost (https://cloud.google.com/spanner/docs/databoost/databoost-overview). A predefinição é: false.

Execute o modelo

Consola

  1. Aceda à página do fluxo de dados Criar tarefa a partir de um modelo.
  2. Aceda a Criar tarefa a partir de modelo
  3. No campo Nome da tarefa, introduza um nome exclusivo para a tarefa.
  4. 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.

  5. No menu pendente Modelo do fluxo de dados, selecione the Cloud Spanner to Avro Files on Cloud Storage template.
  6. Nos campos de parâmetros fornecidos, introduza os valores dos parâmetros.
  7. Clique em Executar tarefa.

gcloud

Este exemplo usa o comando gcloud dataflow jobs run.

Na shell ou no terminal, execute o modelo:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Spanner_to_GCS_Avro \
    --region REGION_NAME \
    --staging-location GCS_STAGING_LOCATION \
    --parameters 'instanceId=INSTANCE_ID,databaseId=DATABASE_ID,outputDir=GCS_DIRECTORY'

Substitua o seguinte:

  • JOB_NAME: um nome de tarefa exclusivo à sua escolha

    Para que a tarefa seja apresentada na parte do Spanner da Google Cloud consola, o nome da tarefa tem de corresponder ao formatocloud-spanner--INSTANCE_ID-DATABASE_ID.

  • VERSION: a versão do modelo que quer usar

    Pode usar os seguintes valores:

  • REGION_NAME: a região onde quer implementar a tarefa do Dataflow, por exemplo, us-central1
  • GCS_STAGING_LOCATION: o caminho para escrever ficheiros temporários; por exemplo, gs://mybucket/temp
  • INSTANCE_ID: o ID da instância do Spanner
  • DATABASE_ID: o ID da sua base de dados do Spanner
  • GCS_DIRECTORY: o caminho do Cloud Storage para o qual os ficheiros Avro são importados

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/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Cloud_Spanner_to_GCS_Avro
{
   "jobName": "JOB_NAME",
   "parameters": {
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "outputDir": "gs://GCS_DIRECTORY"
   }
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde quer executar a tarefa do Dataflow Google Cloud
  • JOB_NAME: um nome de tarefa exclusivo à sua escolha

    Para que a tarefa seja apresentada na parte do Spanner da Google Cloud consola, o nome da tarefa tem de corresponder ao formatocloud-spanner--INSTANCE_ID-DATABASE_ID.

  • VERSION: a versão do modelo que quer usar

    Pode usar os seguintes valores:

  • LOCATION: a região onde quer implementar a tarefa do Dataflow, por exemplo, us-central1
  • GCS_STAGING_LOCATION: o caminho para escrever ficheiros temporários; por exemplo, gs://mybucket/temp
  • INSTANCE_ID: o ID da instância do Spanner
  • DATABASE_ID: o ID da sua base de dados do Spanner
  • GCS_DIRECTORY: o caminho do Cloud Storage para o qual os ficheiros Avro são importados

O que se segue?