Modelo de validação de dados do Cloud Storage Avro para Spanner

O modelo de arquivos Avro do Cloud Storage para validação de dados do Spanner é um pipeline em lote que lê dados do Cloud Storage e do Spanner e os compara para validar a correção da migração.

Requisitos de pipeline

  • O diretório do Cloud Storage para arquivos Avro precisa existir antes da execução do pipeline. Gere esses arquivos Avro executando o pipeline SourceDB para Cloud Spanner com o parâmetro gcsOutputDirectory.
  • O conjunto de dados de destino do BigQuery para resultados da validação precisa existir antes da execução do pipeline.
  • As tabelas do Spanner precisam existir antes da execução do pipeline.
  • As tabelas do Spanner precisam ter um esquema compatível (diretamente ou por mapeamento de esquema).
  • Para validar uma migração realizada pelo pipeline do SourceDB para o Cloud Spanner, transmita valores idênticos para todas as configurações compartilhadas (como sessionFilePath, schemaOverridesFilePath e transformationJarPath).

Parâmetros do modelo

Parâmetros obrigatórios

  • gcsInputDirectory: esse diretório é usado para ler os arquivos AVRO dos registros lidos da origem. Por exemplo, gs://your-bucket/your-path.
  • projectId: o nome do projeto do Cloud Spanner.
  • instanceId: a instância de destino do Cloud Spanner.
  • databaseId: o banco de dados de destino do Cloud Spanner.
  • bigQueryDataset: o ID do conjunto de dados do BigQuery em que os resultados da validação serão armazenados. Por exemplo, validation_report_dataset.

Parâmetros opcionais

  • spannerHost: o endpoint do Cloud Spanner para chamar no modelo. Por exemplo, https://batch-spanner.googleapis.com. O padrão é: https://batch-spanner.googleapis.com.
  • spannerPriority: a prioridade da solicitação para chamadas do Cloud Spanner. O valor precisa ser um destes: [HIGH,MEDIUM,LOW]. O padrão é HIGH.
  • sessionFilePath: o caminho do arquivo de sessão no Cloud Storage que contém informações de mapeamento da ferramenta de migração do Spanner. O padrão é vazio.
  • schemaOverridesFilePath: um arquivo que especifica as substituições de nome da tabela e da coluna da origem para o Spanner. O padrão é vazio.
  • tableOverrides: substituições de nome de tabela da origem para o Spanner. Eles são gravados no seguinte formato: [{SourceTableName1, SpannerTableName1}, {SourceTableName2, SpannerTableName2}]. Este exemplo mostra o mapeamento da tabela "Singers" para "Vocalists" e da tabela "Albums" para "Records". Por exemplo, [{Singers, Vocalists}, {Albums, Records}]. O padrão é vazio.
  • columnOverrides: substituições de nome de coluna da origem para o Spanner. Eles são gravados no seguinte formato: [{SourceTableName1.SourceColumnName1, SourceTableName1.SpannerColumnName1}, {SourceTableName2.SourceColumnName1, SourceTableName2.SpannerColumnName1}]. O SourceTableName precisa ser o mesmo na origem e no par do Spanner. Para substituir nomes de tabelas, use tableOverrides.O exemplo mostra o mapeamento de SingerName para TalentName e AlbumName para RecordName nas tabelas "Singers" e "Albums", respectivamente. Por exemplo, [{Singers.SingerName, Singers.TalentName}, {Albums.AlbumName, Albums.RecordName}]. O padrão é vazio.
  • runId: um identificador exclusivo da execução da validação. Se não for fornecido, o nome do job do Dataflow será usado. Por exemplo, run_20230101_120000.
  • transformationJarPath: local do jar personalizado no Cloud Storage que contém a lógica de transformação personalizada para processar registros. O padrão é vazio.
  • transformationClassName: o nome de classe totalmente qualificado com lógica de transformação personalizada. É um campo obrigatório no caso de transformationJarPath é especificado. O padrão é vazio.
  • transformationCustomParameters: string contendo os parâmetros personalizados que serão passados para a classe de transformação personalizada. O padrão é vazio.
  • tables: uma lista separada por vírgulas de tabelas de origem a serem incluídas na execução da validação. O padrão é vazio.
  • tableConfigurationFilePath: um caminho de arquivo do GCS que contém uma lista JSON de tabelas de origem a serem validadas. Precisa ser um arquivo JSON com a estrutura {"tableNames": ["table1", "table2"]}. Opcionalmente, optionalConfigurations.<sourceTable>.spannerQuery define a consulta do Spanner usada para ler essa tabela, por exemplo, para restringir ao shardIds selecionado. Chaveie uma tabela somente do Spanner pelo nome dela no Spanner. Consulte a seção "Validação de um subconjunto de fragmentos" do README.md do módulo para ver as regras de consulta. O padrão é vazio.
  • shardIds: uma lista separada por vírgulas de IDs de fragmentos lógicos (os IDs usados pelo modelo sourcedb-to-spanner, que aparecem como o diretório <table>/<shardId>/ na saída Avro). Quando definido, apenas esses fragmentos são validados. As tabelas com um arquivo de sessão ShardIdColumn são filtradas nessa coluna. Todas as outras tabelas no escopo precisam de um spannerQuery em tableConfigurationFilePath. Caso contrário, o job falha. Por exemplo, shard_001,shard_007. O padrão é vazio.

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 Arquivos Avro do Cloud Storage para validação de dados do Spanner.
  6. Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
  7. Cliquem em Executar job.

CLI da gcloud

No shell ou no terminal, execute o modelo:

gcloud dataflow flex-template run JOB_NAME \
    --template-file-gcs-location=gs://dataflow-templates/VERSION/flex/Avro_to_Spanner_Data_Validator \
    --region=REGION_NAME \
    --parameters \
       gcsInputDirectory=PATH_TO_AVRO_FILES,\
       projectId=PROJECT_ID,\
       instanceId=INSTANCE_ID,\
       databaseId=DATABASE_ID,\
       bigQueryDataset=BIGQUERY_DATASET

Substitua:

  • JOB_NAME: um nome de job de sua escolha
  • VERSION: a versão do modelo que você quer usar

    Use estes valores:

    • latest para usar a versão mais recente do modelo, disponível na pasta mãe não datada no bucket: gs://dataflow-templates/latest/
    • o nome da versão, como 2023-09-12-00_RC00, para usar uma versão específica do modelo, que pode ser aninhada na respectiva pasta mãe datada no bucket: gs://dataflow-templates
  • REGION_NAME: a região em que você quer implantar o job do Dataflow, por exemplo, us-central1
  • PATH_TO_AVRO_FILES: o caminho do Cloud Storage para os arquivos Avro.
  • PROJECT_ID: o ID do projeto do Spanner.
  • INSTANCE_ID: o ID da instância de destino do Spanner.
  • DATABASE_ID: o ID do banco de dados de destino do Spanner.
  • BIGQUERY_DATASET: o ID do conjunto de dados do BigQuery para os resultados da validação.

API

Para executar o modelo usando a API REST, envie uma solicitação POST HTTP. 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/flexTemplates:launch
{
   "launchParameter": {
     "jobName": "JOB_NAME",
     "parameters": {
       "gcsInputDirectory": "PATH_TO_AVRO_FILES",
       "projectId": "PROJECT_ID",
       "instanceId": "INSTANCE_ID",
       "databaseId": "DATABASE_ID",
       "bigQueryDataset": "BIGQUERY_DATASET"
     },
     "containerSpecGcsPath": "gs://dataflow-templates/VERSION/flex/Avro_to_Spanner_Data_Validator"
  }
}

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
  • VERSION: a versão do modelo que você quer usar

    Use estes valores:

    • latest para usar a versão mais recente do modelo, disponível na pasta mãe não datada no bucket: gs://dataflow-templates/latest/
    • o nome da versão, como 2023-09-12-00_RC00, para usar uma versão específica do modelo, que pode ser aninhada na respectiva pasta mãe datada no bucket: gs://dataflow-templates
  • LOCATION: a região em que você quer implantar o job do Dataflow, por exemplo, us-central1
  • PATH_TO_AVRO_FILES: o caminho do Cloud Storage para os arquivos Avro.
  • PROJECT_ID: o ID do projeto do Spanner.
  • INSTANCE_ID: o ID da instância de destino do Spanner.
  • DATABASE_ID: o ID do banco de dados de destino do Spanner.
  • BIGQUERY_DATASET: o ID do conjunto de dados do BigQuery para os resultados da validação.