Descrição
Os logs de falha de teste do dbt no Prefect são difíceis de usar de verdade: o erro real fica misturado em nível INFO no meio de dezenas de linhas (incluindo uma por artefato enviado ao GCS), e a exceção final não diz qual teste falhou nem mostra a query que detectou o problema.
Caso real que motivou a issue: run 01a09820-1bc6-7d5d-964c-3f44710cf1b2 (br_tse_eleicoes__receitas_candidato) — o erro de verdade (Got 1 result, configured to fail if != 0, teste custom_relationships_...) está lá, mas sem destaque nenhum.
O que o PR faz
run_dbt() (pipelines/utils/tasks.py) passa a logar cada teste que falha em nível error (destaque visual no Prefect), com o nome do teste, a coluna testada e a query SQL compilada — sem os dados de verdade, só a query, pra rodar manualmente no BigQuery sem expor nada sensível no log.
- A exceção final passa a citar o(s) nome(s) do(s) teste(s) que falharam, em vez de só "dbt test falhou para X".
DBTArtifactUploader (pipelines/utils/gcs.py) para de imprimir uma linha por artefato enviado (15 linhas num caso real) e passa a imprimir 1 linha de resumo.
- Todo
print() dessas duas funções vira log() — log() sempre passa pelo logger do Prefect (get_run_logger()), diferente de print(), que só vira log estruturado se o flow tiver log_prints=True (nem todo flow que chama essas funções tem).
Fora de escopo (por enquanto)
Não mexe no output nativo do próprio dbt (o dbtRunner da API Python do dbt) nem tenta suprimir/redirecionar isso — só o que o nosso código de wrapper (run_dbt) loga.
Referências
PR: (ver vinculado)
Descrição
Os logs de falha de teste do dbt no Prefect são difíceis de usar de verdade: o erro real fica misturado em nível INFO no meio de dezenas de linhas (incluindo uma por artefato enviado ao GCS), e a exceção final não diz qual teste falhou nem mostra a query que detectou o problema.
Caso real que motivou a issue: run 01a09820-1bc6-7d5d-964c-3f44710cf1b2 (
br_tse_eleicoes__receitas_candidato) — o erro de verdade (Got 1 result, configured to fail if != 0, testecustom_relationships_...) está lá, mas sem destaque nenhum.O que o PR faz
run_dbt()(pipelines/utils/tasks.py) passa a logar cada teste que falha em nível error (destaque visual no Prefect), com o nome do teste, a coluna testada e a query SQL compilada — sem os dados de verdade, só a query, pra rodar manualmente no BigQuery sem expor nada sensível no log.DBTArtifactUploader(pipelines/utils/gcs.py) para de imprimir uma linha por artefato enviado (15 linhas num caso real) e passa a imprimir 1 linha de resumo.print()dessas duas funções viralog()—log()sempre passa pelo logger do Prefect (get_run_logger()), diferente deprint(), que só vira log estruturado se o flow tiverlog_prints=True(nem todo flow que chama essas funções tem).Fora de escopo (por enquanto)
Não mexe no output nativo do próprio dbt (o
dbtRunnerda API Python do dbt) nem tenta suprimir/redirecionar isso — só o que o nosso código de wrapper (run_dbt) loga.Referências
PR: (ver vinculado)