Modelo do Spanner para o Cloud Storage Avro

O modelo do Spanner para arquivos Avro no Cloud Storage é um pipeline em lote que exporta todo o banco de dados do Spanner para o Cloud Storage no formato Avro. A exportação de um banco de dados do Spanner cria uma pasta no bucket selecionado. A pasta contém:

  • Um arquivo spanner-export.json.
  • Um arquivo TableName-manifest.json para cada tabela do banco de dados exportado
  • Um ou mais arquivos TableName.avro-#####-of-#####.

Por exemplo, a exportação de um banco de dados com duas tabelas, Singers e Albums, gera o seguinte conjunto de arquivos:

  • 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 de pipeline

  • O banco de dados do Spanner precisa existir.
  • O bucket de saída do Cloud Storage precisa existir.
  • Além dos papéis de gerenciamento de identidade e acesso (IAM, na sigla em inglês) necessários para executar jobs do Dataflow, é preciso ter os papéis do IAM apropriados para ler e gravar dados do Spanner no bucket do Cloud Storage.

Parâmetros do modelo

Parâmetros obrigatórios

  • instanceId: o código da instância referente ao banco de dados do Cloud Spanner que você quer exportar.
  • databaseId: o código do banco de dados referente ao banco de dados do Cloud Spanner que você quer exportar.
  • outputDir: o caminho do Cloud Storage para onde os arquivos Avro serão exportados. Um novo diretório contendo a exportação será criado nesse caminho. (Exemplo: gs://your-bucket/your-path).

Parâmetros opcionais

  • avroTempDirectory: o caminho do Cloud Storage em que os arquivos Avro temporários podem ser criados. Por exemplo: gs://your-bucket/your-path.
  • spannerHost: opcional: o endpoint do Cloud Spanner para chamar no modelo. Usado apenas para testes. Por exemplo: https://batch-spanner.googleapis.com. O padrão é: https://batch-spanner.googleapis.com.
  • snapshotTime: especifica o horário do snapshot no formato RFC 3339 no formato UTC sem o deslocamento do fuso horário(sempre termina em "Z"). O carimbo de data/hora precisa estar no passado, e a Inatividade máxima do carimbo de data/hora se aplica. Consulte https://cloud.google.com/spanner/docs/timestamp-bounds#maximum_timestamp_staleness (exemplo: 1990-12-31T23:59:59Z). O padrão é vazio.
  • spannerProjectId: o ID do projeto da instância do Cloud Spanner.
  • shouldExportTimestampAsLogicalType: se verdadeiro, os carimbos de data/hora são exportados como o tipo timestamp-micros. Por padrão, os carimbos de data/hora são exportados como strings ISO8601 com precisão de nanossegundos.
  • tableNames: se fornecido, somente essa lista de tabelas separadas por vírgulas será exportada. As tabelas de ancestral e aquelas referenciadas por chaves externas são obrigatórias. Se ela não for listada explicitamente, a flag shouldExportRelatedTables precisará ser definida para uma exportação bem-sucedida. O padrão é vazio.
  • shouldExportRelatedTables: usado em conjunto com tableNames. Se verdadeiro, adicione as tabelas relacionadas necessárias para a exportação, como tabelas pai intercaladas e tabelas de chaves externas. Se tableNames for especificado, mas não incluir tabelas relacionadas, essa opção precisará ser definida como verdadeira para uma exportação bem-sucedida. O padrão é: false.
  • spannerPriority: opcional: a prioridade da solicitação para chamadas do Cloud Spanner. O valor precisa ser um destes: [HIGH,MEDIUM,LOW].
  • dataBoostEnabled: use a computação sob demanda do Spanner para que o job de exportação seja executado em recursos de computação independentes e não afete as cargas de trabalho atuais do Spanner. Isso vai gerar cobranças adicionais no Spanner. O padrão é: false.

Executar o modelo

Console

  1. Acesse a página Criar job usando um modelo do Dataflow.
  2. Acesse Criar job usando um modelo
  3. No campo Nome do job, insira um nome exclusivo.

    Para que o job apareça na página de Instâncias do Spanner do console do Google Cloud, o nome do job precisa corresponder ao seguinte formato:

    cloud-spanner-export-SPANNER_INSTANCE_ID-SPANNER_DATABASE_NAME

    Substitua:

    • SPANNER_INSTANCE_ID: o ID da instância do Spanner
    • SPANNER_DATABASE_NAME: o nome do banco de dados do Spanner
  4. 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.

  5. No menu suspenso Modelo do Dataflow, selecione the Cloud Spanner to Avro Files on Cloud Storage template.
  6. Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
  7. Cliquem em Executar job.

gcloud

No 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:

  • JOB_NAME: um nome de job de sua escolha

    Para que o job seja exibido na parte do Spanner no Console do Google Cloud, o nome dele precisa corresponder ao formato cloud-spanner-export-INSTANCE_ID-DATABASE_ID.

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

    Use estes valores:

  • REGION_NAME: a região em que você quer implantar o job do Dataflow, por exemplo, us-central1
  • GCS_STAGING_LOCATION: o caminho para gravar arquivos temporários (por exemplo, gs://mybucket/temp)
  • INSTANCE_ID: o ID da instância do Spanner
  • DATABASE_ID: o ID do banco de dados do Spanner
  • GCS_DIRECTORY: o caminho do Cloud Storage em que os arquivos Avro são exportados para

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/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:

  • PROJECT_ID: o ID do projeto do Google Cloud em que você quer executar o job do Dataflow
  • JOB_NAME: um nome de job de sua escolha

    Para que o job seja exibido na parte do Spanner no Console do Google Cloud, o nome dele precisa corresponder ao formato cloud-spanner-export-INSTANCE_ID-DATABASE_ID.

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

    Use estes valores:

  • LOCATION: a região em que você quer implantar o job do Dataflow, por exemplo, us-central1
  • GCS_STAGING_LOCATION: o caminho para gravar arquivos temporários (por exemplo, gs://mybucket/temp)
  • INSTANCE_ID: o ID da instância do Spanner
  • DATABASE_ID: o ID do banco de dados do Spanner
  • GCS_DIRECTORY: o caminho do Cloud Storage em que os arquivos Avro são exportados para

A seguir