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,schemaOverridesFilePathetransformationJarPath).
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>.spannerQuerydefine a consulta do Spanner usada para ler essa tabela, por exemplo, para restringir aoshardIdsselecionado. 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ãoShardIdColumnsão filtradas nessa coluna. Todas as outras tabelas no escopo precisam de umspannerQueryemtableConfigurationFilePath. Caso contrário, o job falha. Por exemplo,shard_001,shard_007. O padrão é vazio.
Executar o modelo
Console
- Acesse a página Criar job usando um modelo do Dataflow. Acesse Criar job usando um modelo
- No campo Nome do job, insira um nome exclusivo.
- 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.
- No menu suspenso Modelo do Dataflow, selecione o modelo Arquivos Avro do Cloud Storage para validação de dados do Spanner.
- Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
- 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 escolhaVERSION: a versão do modelo que você quer usarUse estes valores:
latestpara 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-central1PATH_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 DataflowJOB_NAME: um nome de job de sua escolhaVERSION: a versão do modelo que você quer usarUse estes valores:
latestpara 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-central1PATH_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.