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 ID da instância do banco de dados do Spanner que você quer exportar.
  • databaseId: o ID do banco de dados do Spanner que você quer exportar.
  • outputDir: o caminho do Cloud Storage para onde os arquivos Avro serão exportados. O job de exportação cria um novo diretório nesse caminho contendo os arquivos exportados. Por exemplo, gs://your-bucket/your-path.

Parâmetros opcionais

  • avroTempDirectory: o caminho do Cloud Storage em que os arquivos Avro temporários são gravados.
  • spannerHost: 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: o carimbo de data/hora que corresponde à versão do banco de dados do Spanner que você quer ler. O carimbo de data/hora precisa ser especificado no formato UTC Zulu RFC 3339. O carimbo de data/hora precisa estar no passado, e a Inatividade máxima do carimbo de data/hora se aplica. Por exemplo, 1990-12-31T23:59:60Z. O padrão é vazio.
  • spannerProjectId: o ID do projeto Google Cloud que contém o banco de dados do Spanner de que você quer ler os dados.
  • shouldExportTimestampAsLogicalType: se true, os carimbos de data/hora serão exportados como um tipo long com tipo lógico timestamp-micros. Por padrão, esse parâmetro é definido como false, e os carimbos de data/hora são exportados como strings ISO-8601 com precisão de nanossegundos.
  • tableNames: uma lista de tabelas separada por vírgulas que especifica o subconjunto do banco de dados do Spanner a ser exportado. Se você definir esse parâmetro, precisará incluir todas as tabelas relacionadas (tabelas mãe e tabelas referenciadas de chave externa) ou definir o parâmetro shouldExportRelatedTables como true.Se a tabela estiver em um esquema nomeado, use um nome totalmente qualificado. Por exemplo: sch1.foo, em que sch1 é o nome do esquema e foo é o nome da tabela. O padrão é vazio.
  • shouldExportRelatedTables: se quer incluir tabelas relacionadas. Esse parâmetro é usado com o parâmetro tableNames. O padrão é: falso.
  • spannerPriority: a prioridade de solicitação das chamadas do Spanner. Os valores possíveis são HIGH, MEDIUM e LOW. O valor padrão é MEDIUM.
  • dataBoostEnabled: defina como true para usar os recursos de computação do Spanner Data Boost para executar o job com impacto quase zero nos fluxos de trabalho OLTP do Spanner. Quando definido como true, você também precisa da permissão spanner.databases.useDataBoost do IAM. Para mais informações, acesse a visão geral do Data Boost (https://cloud.google.com/spanner/docs/databoost/databoost-overview). O padrão é: falso.
  • checksumAlgorithm: o algoritmo de soma de verificação a ser usado para os arquivos exportados. Os valores possíveis são MD5 e CRC32C. O valor padrão é MD5.

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.
  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 o modelo Cloud Spanner para arquivos Avro no Cloud Storage.
  6. Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
  7. Cliquem em Executar job.

gcloud

Este exemplo usa o comando gcloud dataflow jobs run.

No shell ou no terminal, execute o modelo:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/ \
    --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 Google Cloud , o nome dele precisa corresponder ao formato cloud-spanner--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 importados de

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/
{
   "jobName": "JOB_NAME",
   "parameters": {
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "outputDir": "gs://GCS_DIRECTORY"
   }
}

Substitua:

  • PROJECT_ID: o ID do projeto 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 Google Cloud , o nome dele precisa corresponder ao formato cloud-spanner--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 importados de

A seguir