splor-mg / dpm

https://splor-mg.github.io/dpm/
0 stars 0 forks source link

Impact analysis utilizando informações do `data.toml` #63

Open fjuniorr opened 10 months ago

fjuniorr commented 10 months ago

Como estamos utilizando o data.toml para armazenar as dependências de dados dos nossos projetos a gente consegue rodar análises de impacto para evitar problemas como https://github.com/splor-mg/painel-admin-sisor/issues/1 (que vão se tornar cada vez mais comuns) e termos a tranquilidade de tomar decisões como https://github.com/splor-mg/cookiecutter-datapackage/issues/2 e https://github.com/splor-mg/atividades/issues/86.

No caso a informação mais relevante é de column-level lineage, ou seja, podemos responder perguntas do tipo _"Em quais projetos a coluna sisor-dados-2024.ELEMENTO_ITEM_COD é utilizada?"_.

Pra isso utilizamos as informações do data.toml para identificar quais projetos utilizam o conjunto de dados sisor-dados-2024 e depois utilizamos algo como ripgrep[^1] para identificar o uso das colunas:

rg identificador_tipo_acao_cod
R/check_valores_qdd_plurianual.R
18:      filter = is_deleted_acao == FALSE & identificador_tipo_acao_cod %in% c(1, 2, 4, 7, 9)

R/check_valores_qdd_fiscal.R
17:      filter = is_deleted_acao == FALSE & identificador_tipo_acao_cod %in% c(1, 2, 4, 7, 9),

R/check_valores_qdd_investimento.R
18:      filter = is_deleted_acao == FALSE & identificador_tipo_acao_cod %in% c(3, 6, 8)

R/check_intra_despesa.R
8:  key <- c("uo_cod", "identificador_tipo_acao_cod", "projeto_atividade_cod", "grupo_cod", "modalidade_cod", "elemento_cod", "item_cod")
22:        "identificador_tipo_acao_cod",

R/check_valores_qdd_plurianual_invest.R
18:      filter = is_deleted_acao == FALSE & identificador_tipo_acao_cod %in% c(3, 6, 8)
checks-planejamento (main)$ rg ELEMENTO_ITEM_COD

[^1]: Isso implica que informação da coluna somente vai ser extraída se estiver em arquivos texto

fjuniorr commented 5 months ago

Algumas sugestões de nomes para o comando são:

dpm findout dados-totais-armazem-siafi.elemento_item_cod
dpm lineage dados-totais-armazem-siafi.elemento_item_cod

O comando vai recuperar todos os repositórios que utilizam o data package dados-totais-armazem-siafi via data.toml e depois buscar nos scripts o uso da coluna elemento_item_cod.

fjuniorr commented 2 months ago

De certa forma esse processo é similar ao processo de reverse dependencies checks que acontece no CRAN se pensarmos que a publicação de uma nova versão de um data package deveria acionar o make check ou make all de todos os projetos ou data packages que possuem como dependência o data package atualizado.

Outra forma de ver a questão que funciona mais para data packages é que a gente poderia ter um orquestrador (eg. airflow) com as dependências entre os data packages para que a atualização em um gere atualizações nos demais.

Discutimos esses pontos em reunião no contexto de https://github.com/splor-mg/volumes-loa/pull/117#issuecomment-2341852517