dbt

Junior

O que realmente há dentro do run_results.json do dbt, e por que vale a pena lê-lo diretamente?

Toda execução do dbt escreve esse arquivo em target/, você abrindo ou não. Ele já contém a resposta para «qual modelo está lento».

Ler em:
execution_time thread_id / concorrência status
Quanto sinal cada campo carrega para investigar um modelo lento - não é um levantamento medido.

Sem precisar de conta no dbt Cloud, histórico de consultas do warehouse, ou instrumentação extra - target/run_results.json já tem o tempo por modelo de cada execução desde a última vez que você limpou o diretório target.

A forma do arquivo: um objeto de resultado por node

O array results tem uma entrada para cada modelo, teste ou seed que rodou, cada uma com um unique_id, um status («success», «error», «skipped»), um execution_time em segundos, um thread_id, e um array timing que divide esse tempo em fases de compile e execute com timestamps reais.

# os 10 modelos mais lentos da última execução jq -r '.results[] | [.unique_id, .execution_time] | @tsv' target/run_results.json | sort -k2 -n -r | head -10

O thread_id fala sobre concorrência, não só identidade

O dbt roda modelos em paralelo até o número de --threads que você passou. Se seus modelos mais lentos compartilham o mesmo thread_id e rodaram um atrás do outro em vez de sobrepor com outro trabalho, isso é um problema de forma do DAG - uma cadeia de dependências forçando execução serial - não um problema de lentidão por modelo. Vale checar antes de gastar uma tarde otimizando SQL que nunca foi o gargalo.

O que ele não consegue te dizer

Só tempo, não custo. O run_results.json não tem números de bytes escaneados nem créditos consumidos - para custo de computação no Snowflake ou BigQuery você ainda precisa do histórico de consultas do próprio warehouse, cruzado com a execução do dbt via comentário de consulta ou query ID se seu adapter registrar um. Essa é uma lacuna real, não algo para disfarçar.

Esse é exatamente o arquivo que as regras de dbt do opti-pipe leem - sem precisar de conta no dbt Cloud nem credenciais do warehouse, só o arquivo que seu último dbt run já escreveu em disco.

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 que exigem sua aprovação - não mais uma regra geral.