-
Notifications
You must be signed in to change notification settings - Fork 22
feat(br_ms_sim): pipeline sob demanda, com os dados preliminares do DATASUS #1969
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
72 commits
Select commit
Hold shift + click to select a range
c46e6af
feat: criação de flow para o conjunto br_ms_sim
DaviMacielCavalcante 079c31d
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] a3037cc
fix: ajustando para pedir * G de RAM
DaviMacielCavalcante dd101a9
Merge branch 'pipeline/br_ms_sim' of https://github.com/basedosdados/…
DaviMacielCavalcante 5718249
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] b32ab64
chore: verificando se os recursos são alocados corretamente
DaviMacielCavalcante 42f043e
Merge branch 'pipeline/br_ms_sim' of https://github.com/basedosdados/…
DaviMacielCavalcante 0ef2b27
fix: trocando por cliente com autenticação
DaviMacielCavalcante 61d4bc7
chore: removendo funções e logs de depuração
DaviMacielCavalcante 2468e1a
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 2f4c18e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 39211af
fix: adicionando uma coluna nova e impedindo do código continuar dele…
DaviMacielCavalcante 27e2753
Merge branch 'pipeline/br_ms_sim' of https://github.com/basedosdados/…
DaviMacielCavalcante b3c05da
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] c51c05f
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 965a9fb
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 5aa8c17
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 68da8d3
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 4b0fa4d
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 874ab2c
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 5de24c2
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] d5c3c5b
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 0215acd
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 8a49427
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 08c5353
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] b50ffc7
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 4223e0e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] f837655
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 8023d86
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 61b2be7
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 24cea63
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] f07ac41
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 451a1ec
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 3130f8c
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 4d6d5dc
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 9540ff1
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 2e3ae1f
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 40a57e2
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] a132c39
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 57e8e46
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 56a2e26
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 831e334
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 9d21398
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 82e05d8
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] f484a4f
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 49f9a0a
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 3eacabf
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 0e2857e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 8a53d27
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 9c2984e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] ad8f268
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 4d0eeea
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] a0e53f2
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 752a003
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 61c09b5
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 54af205
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] ae225eb
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] e4b13d9
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 085d339
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 2cb1c5e
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 2911b4d
chore: deixando o flow mais no padrão do repo
DaviMacielCavalcante b61661a
Merge branch 'pipeline/br_ms_sim' of https://github.com/basedosdados/…
DaviMacielCavalcante 9ec90ea
fix(br_ms_sim): descrição de dado_preliminar sem quebra final
DaviMacielCavalcante d88406c
fix(br_ms_sim): remove chave memory, que o work pool descarta
DaviMacielCavalcante 08f0d93
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 4fc414d
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 13ff52a
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] f0c65f3
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 7de81b7
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] e7109b0
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 4a980d5
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] 4e8a127
Merge branch 'main' into pipeline/br_ms_sim
mergify[bot] File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,102 @@ | ||
| # br_ms_sim — pipeline | ||
|
|
||
| Carga dos microdados de óbitos não fetais (CID-10) do SIM/DATASUS, do FTP até a | ||
| materialização em `basedosdados.br_ms_sim.microdados`. | ||
|
|
||
| Contexto da base, investigações de qualidade e decisões de tratamento estão em | ||
| [`models/br_ms_sim/README.md`](../../../models/br_ms_sim/README.md). | ||
|
|
||
| ## Sem schedule, por quê | ||
|
|
||
| O DATASUS republica o SIM duas vezes por ano, sem data fixa. O flow é deployado | ||
| sem `deploy_schedules`: o deployment existe, aceita execução avulsa e não dispara | ||
| sozinho. Para armar depois, basta acrescentar a lista de crons em `flows.py`. | ||
|
|
||
| ## Definitivo e preliminar | ||
|
|
||
| A fonte serve o mesmo ano em dois diretórios: | ||
|
|
||
| | Diretório | Conteúdo | | ||
| |---|---| | ||
| | `SIM/CID10/DORES/` | definitivo, publicado cerca de um ano após o fechamento | | ||
| | `SIM/PRELIM/DORES/` | preliminar, ainda sujeito a revisão | | ||
|
|
||
| `resolve_year_source` dá precedência ao definitivo. Reprocessar um ano depois do | ||
| fechamento troca o dado e muda `dado_preliminar` de `1` para `0` — não há passo | ||
| manual para a virada, só rodar o flow com aquele ano. | ||
|
|
||
| ## Parâmetros | ||
|
|
||
| | Parâmetro | Padrão | Efeito | | ||
| |---|---|---| | ||
| | `ano` | vazio | Vazio pega o ano mais recente da fonte. Preenchido é backfill: o flow pula o poll e não mexe no metadado da fonte | | ||
| | `materialize_after_dump` | `True` | Sobe para prod e materializa lá | | ||
| | `update_metadata` | `True` | Registra a cobertura materializada | | ||
| | `force_run` | `False` | Materializa mesmo sem novidade na fonte | | ||
|
|
||
| Execução de teste no pool de dev, sem tocar em produção: | ||
|
|
||
| ```json | ||
| {"materialize_after_dump": false, "update_metadata": false, "force_run": true} | ||
| ``` | ||
|
|
||
| Os padrões escrevem em **produção**, mesmo saindo do pool de teste. | ||
|
|
||
| ## Qual ano entra | ||
|
|
||
| Sem `ano`, o flow carrega o ano mais recente que existe na fonte, que é o ano em | ||
| curso: o diretório preliminar publica o ano corrente antes de ele fechar. | ||
|
|
||
| O poll compara esse ano com o fim da cobertura da tabela. Depois que a cobertura | ||
| alcança o ano, as execuções seguintes encerram sem carregar nada, e as revisões | ||
| que o DATASUS publicar naquele ano preliminar não entram. Para trazê-las, executar | ||
| com `ano` preenchido ou com `force_run`. | ||
|
|
||
| ## Formato da staging | ||
|
|
||
| A staging é CSV desde a carga original. O particionado sai em | ||
| `ano=<ano>/sigla_uf=<UF>/microdados.csv` e sobe com `dump_mode="append"`: os | ||
| caminhos são fixos, então reenviar um ano sobrescreve aquele ano e preserva o | ||
| resto da série. `overwrite` apagaria o prefixo inteiro, com ele 1996 em diante. | ||
|
|
||
| Trocar para parquet exigiria recriar a tabela externa e, com ela, recarregar | ||
| toda a série. | ||
|
|
||
| ## Carga manual | ||
|
|
||
| `utils.py` não importa Prefect, então a transformação roda fora do flow: | ||
|
|
||
| ```python | ||
| from pipelines.datasets.br_ms_sim import utils | ||
|
|
||
| source = utils.resolve_year_source(2025) | ||
| utils.download_table("microdados", 2025, source) | ||
| utils.clean_table("microdados", 2025, source) | ||
| ``` | ||
|
|
||
| ## Série histórica | ||
|
|
||
| Os CSVs de 1996–2024 na staging foram gravados pela limpeza anterior, que | ||
| nulificava o código `6` de `local_ocorrencia` (aldeia indígena) antes do upload. | ||
| O dado não chegou à staging, então `full-refresh` não o recupera — só | ||
| reprocessar os `.dbc`. É o que faz `reprocess_br_ms_sim.py`, na raiz do repo. | ||
|
|
||
| Enquanto o histórico não é reprocessado, ele também não traz `dado_preliminar`, | ||
| e a coluna volta nula nesses anos. O modelo aplica `coalesce(dado_preliminar, | ||
| '0')`: tudo anterior à primeira execução do pipeline veio do diretório | ||
| definitivo. Depois do reprocessamento o `coalesce` deixa de encontrar nulos e | ||
| continua correto. | ||
|
|
||
| ## Pontos de atenção | ||
|
|
||
| - `dado_preliminar` é coluna nova no modelo, e em `dump_mode="append"` quem | ||
| amplia o schema da tabela externa é o `_sync_staging_schema` | ||
| (`pipelines/utils/tasks.py`). Esse caminho nunca tinha sido exercitado e | ||
| falhava com `403 bigquery.tables.update`, porque abria o cliente do BigQuery | ||
| sem credencial; corrigido nesta mesma branch para usar o cliente da lib. | ||
| - O dicionário do conjunto vem de uma staging própria, alimentada por | ||
| `models/br_ms_sim/code/update_dicionario.py`. As linhas de `dado_preliminar` | ||
| precisam ser acrescentadas por lá. | ||
| - Os scripts em `models/br_ms_sim/code/microdados/` são a carga anterior e não | ||
| conhecem `dado_preliminar`: gravam CSV com uma coluna a menos do que o modelo | ||
| espera. Usar o flow. |
Empty file.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.