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 Spanner que você quer exportar.
  • databaseId: o código do banco de dados referente ao 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. (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: 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: 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. (Exemplo: 1990-12-31T23:59:60Z). O padrão é vazio.
  • spannerProjectId: o ID do projeto do Google Cloud que contém o banco de dados do Spanner de que você quer ler os dados.
  • shouldExportTimestampAsLogicalType: se verdadeiro, os carimbos de data/hora sã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.

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