Otimizações no processo de consolidação física

Description

Stakeholder

  • @Bruno Tortato Furtado
  • @Robson Thanael Poffo

Problema

Identificamos casos onde registros foram deletados da staging de forma lógica (mdmDeleted=true) mas acabaram não sendo excluídos do Data Model pois, antes da execução da pipeline, o registro havia sido excluído de forma física pela consolidação que plataforma executa.

Analisando o código fonte da versão 1 de consolidação (link) e também o da versão 2 (link), notamos que a deleção é realizada sem quaisquer outros filtros, podendo gerar esse tipo de inconsitência.

Exemplificando o problema:

  1. Pipeline roda semanalmente no sábado a noite.
  2. Um registro foi enviado com mdmDeleted=true durante a semana.
  3. No sábado a tarde a consolidação roda e remove esse registro.
  4. No sábado a noite a pipeline roda e não considera esse registro, mantendo o mesmo na DM.
  5. Para o cliente, o comportamento não é o adequado pois o registro deveria ser removido da DM.

Objetivo

  1. Atender as necessidades de clientes, onde manter o último registro, mesmo que ele possua o campo mdmDeleted=true, preserva o estado e gera maior consistência de dados, minimizando impactos de negócio.
  2. Impactar o mínimo possível armazenamento e processamentos ao manter um volume de registros maior na plataforma, levando em consideração o fato de que estaremos mantendo alguns registros com mdmDeleted=true.

Links

  • Thread com conversa no Slack: link

Critérios de aceite

  1. Excluir todas as versões dos registros diferentes da mais atual (preservando a versão mais recente que o mdmDeleted seja true).
    1. Excluir registros que a versão mais recente seja o registro com mdmDeleted = true e tempo de vida (mdmStagingCounter) maior do que 30 dias.
  2. Eliminamos registros idênticos, deixando apenas um deles. Devemos considerar no desempate o _ingestionDatetime. E mesmo caso haja empate manter apenas um registro.

Activity

Automation for Jira 25 July 2024, 14:30 Jira Internal Users

Ocorreu o deploy em Produção. Issue movimentada para Done.

Nenhuma issue associada no Jira Produção.

Automation for Jira 25 July 2024, 14:01 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 25 July 2024, 14:01 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 25 July 2024, 14:01 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 24 July 2024, 21:27 Jira Internal Users

Esta issue teve o seu status alterado, pois ocorreu o merge da branch capl-6257-fix-consolidation-query-v2 na branch main.

Automation for Jira 24 July 2024, 21:27 Jira Internal Users

Foi realizado o commit.

Automation for Jira 24 July 2024, 21:27 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 24 July 2024, 21:27 Jira Internal Users

Foi aprovado o PR.

Chámam Diomede Caires 24 July 2024, 21:26 Jira Internal Users

Teste 3:

  • Limpar a tabela consolidations, consolidation_tenant_status, consolidation_stats e consolidation_discover_stats do postgres.

  • Limpar a tabela dmticket no BigQuery e recopiar os dados.

  • Rodar uma consolidação agendada alterando a coluna execution_weekday da tabela consolidation_config para o dia da semana atual e a coluna execution_hour para 3 horas posterior a hora atual e a coluna execution_lookback_days para 15 dias

  • Confirmar na tabela consolidations do postgres que todas as consolidações terminaram com um status DONE

  • Confirmar na ingestion_dmticket no BigQuery que apenas um registros duplicado foi removido por ter _ingestionDatetime maior do que 15 dias atrás.

    image-20240724-212620.png


Chámam Diomede Caires 24 July 2024, 20:52 Jira Internal Users

Teste 2:

  • Limpar a tabela consolidations e consolidation_tenant_status do postgres.

  • Limpar a tabela dmticket no BigQuery e recopiar os dados.

  • Rodar uma consolidação agendada alterando a coluna execution_weekday da tabela consolidation_config para o dia da semana atual e a coluna execution_hour para 3 horas posterior a hora atual com o apoio do Mendes

  • Confirmar na tabela consolidations do postgres que todas as consolidações terminaram com um status DONE

    image-20240724-205136.png
  • Confirmar na ingestion_dmticket no BigQuery que os registros duplicados ou com mdmDeteled true inseridos há mais de 30 dias foram devidamente excluídos.

image-20240724-205226.png
Chámam Diomede Caires 24 July 2024, 19:56 Jira Internal Users

Teste 1:

  • Criar sandbox e provisioná-la

  • Criar data model dmticket usando snapshot

  • Copiar dados da tabela labs-poc.custom_data.dmticket_copy para a tabela dmticket criada na sandbox Mendes ajudou aqui

  • Solicitar consolidação utilizando o endpoint /v1/tenant/{mdmTenantId}/consolidations_tenant com um payload:
    {"mdmTaskId": "COLOQUE AQUI UM TASK ID"}

  • Confirmar na tabela consolidations do postgres que todas as consolidações terminaram com um status DONE

image-20240724-195509.png
  • Confirmar na ingestion_dmticket no BigQuery que os registros duplicados ou com mdmDeteled true inseridos há mais de 30 dias foram devidamente excluídos.

image-20240724-195619.png
Automation for Jira 24 July 2024, 17:56 Jira Internal Users

Esta issue teve o seu status alterado, pois foi aprovado o PR.

Automation for Jira 23 July 2024, 22:56 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 21:08 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 21:08 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 21:06 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 21:06 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 20:29 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 20:28 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 20:28 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 13:55 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 13:54 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 13:54 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 13:54 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 23 July 2024, 12:32 Jira Internal Users

Esta issue teve o seu status alterado, pois foi aprovado o PR.

Automation for Jira 22 July 2024, 21:23 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 22 July 2024, 21:23 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 22 July 2024, 21:23 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 22 July 2024, 19:47 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 22 July 2024, 19:46 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 22 July 2024, 19:46 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 22 July 2024, 19:45 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 22 July 2024, 19:27 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 19 July 2024, 20:33 Jira Internal Users

Esta issue teve o seu status alterado, pois foi criado o PR sem a sigla WIP no título.

Automation for Jira 19 July 2024, 20:30 Jira Internal Users

Foi criada a branch.

Automation for Jira 19 July 2024, 20:30 Jira Internal Users

Foi aprovado o PR.

Automation for Jira 19 July 2024, 20:30 Jira Internal Users

Foi aprovado o PR.

Robson Thanael Poffo 17 July 2024, 14:42 Jira Internal Users

@FELIPE BARBOSA MENDES ,

1. Dúvida sobre o campo mdmStagingCounter

Nas stagings o atributo é mdmCounterForEntity.

2. Casos onde mdmStagingCounter forem nulos

Curioso esse cenários, não deveria ser null o counterForEntity. Talvez sejam dados inseridos via endpoint golden RT e que por consequencia não tenham um vinculo com staging table.

Respondendo a pergunta:

@Robson Thanael Poffo para os cenários levantados pelo Bruno você acredita que possamos usar o campo _ingestionDatetime?

Sim, podemos assumir o _ingestionDateTime quando o mdmStagingCounter for null.

FELIPE BARBOSA MENDES 15 July 2024, 14:38 Jira Internal Users

@Robson Thanael Poffo para os cenários levantados pelo Bruno você acredita que possamos usar o campo _ingestionDatetime?

Bruno Tortato Furtado 10 July 2024, 17:37 Jira Internal Users

Olá pessoal, vou aproveitar a oportunidade para levantar os seguintes pontos sobre a query sugerida:

1. Dúvida sobre o campo mdmStagingCounter

O trecho de código abaixo leva em conta tanto DM quanto STG?
Pergunto pois o campo mdmStagingCounter parece não existir em STGs.

1

2

3

_rowcount = 1
AND IFNULL(mdmDeleted, FALSE) = TRUE
AND mdmStagingCounter < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY))

2. Casos onde mdmStagingCounter forem nulos

Para algumas situações, notamos que o mdmStagingCounter pode ser nulo (não entendi muito bem se tem relação com registros passados ou o porque isso ocorre, talvez porque ainda inserem direto pelo DM). O fato é que isto ocorre e pode impactar o resultado desta condição:

1

mdmStagingCounter < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY))

Sendo assim a sugestão de melhoria seria algo como:

1

IFNULL(mdmStagingCounter, <OUTRO_CAMPO>) < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY))

Lembrando que a sugestão acima aparentemente funcionaria apenas para DM, para STG teriamos de inserir alguma condição no script pois o campo mdmStagingCounter parece não existir.

Automation for Jira 5 July 2024, 19:57 Jira Internal Users

@Robson Thanael Poffo ,
@PEDRO BUZZI FILHO ,
@Geny Isam Hamud Herrera ,
Este issue foi planejada para ser entregue até 2024-08-30. Você pode confirmar consultando o campo Due Date desta issue.

Data já planejadas para esta issue: 2024-08-30

Se o campo External Issue Link estiver preenchido com o link de uma issue válida no Jira Produção o cliente também será notificado no Jira Produção.