dbt
Nível médioComo sei o que quebra downstream antes de mudar um modelo do dbt?
O grafo de linhagem já existe no manifest.json de cada execução do dbt. A questão é se você checa ele antes de uma mudança ir pro ar, ou descobre por um dashboard quebrado depois.
Uma coluna renomeada ou um modelo removido parecem seguros no diff de um PR se nada downstream referencia visivelmente aquilo no mesmo arquivo - isso não diz nada sobre o que realmente consome aquilo três modelos adiante.
O grafo de linhagem já existe - você provavelmente não está lendo ele
Toda execução do dbt produz o manifest.json, que codifica completamente o grafo de dependências do projeto - as fontes upstream e os consumidores downstream de cada modelo, já calculados. dbt ls --select +my_model+ lista tudo que é upstream e downstream de um modelo dado direto desse grafo, sem abrir o dbt docs nem rastrear a estrutura de pastas na mão.
Exposures transformam "downstream" em algo concreto
Uma entrada em exposures.yml liga um modelo a um consumidor real fora do próprio DAG do dbt - um dashboard, uma sincronização reverse-ETL, um relatório que alguém realmente olha. Sem exposures, "nada depende desse modelo" só significa que nada dentro do dbt depende dele, o que é uma afirmação mais fraca e muitas vezes enganosa se o consumidor real é uma ferramenta de BI que o dbt não enxerga.
Fazer isso antes de uma mudança que quebra algo, não depois
Rodar dbt ls --select +model_name contra o seletor de um modelo alterado como checagem de CI pre-merge pega o caso onde uma renomeação ou uma coluna removida quebra três marts downstream antes do PR ser mesclado - não depois que alguém percebe dias depois que um dashboard está silenciosamente errado.
Veja como isso fica no seu próprio pipeline.
Envie um event log real do Spark, um run_results.json do dbt ou uma exportação de métricas do Flink e receba recomendações concretas, para aprovar antes de aplicar - não mais uma regra geral.