dbt

Junior

Por que minha macro do dbt compila para algo completamente diferente do que eu esperava?

Uma macro é um template, não o SQL que roda. Depurar o template em vez do que ele realmente produziu é depurar a camada errada por completo.

Ler em:
Depurar a macro Depurar SQL compilado
Onde a resposta realmente está - não é um levantamento medido.

A macro lê certinho. O SQL compilado não se parece nada com o que a macro diz - e essa diferença quase sempre se resume a um de três comportamentos específicos do Jinja, não um bug do dbt.

Leia o SQL compilado, não a macro

O dbt compile grava o SQL totalmente renderizado de cada modelo em target/compiled/ - esse arquivo, não o template Jinja, é a verdadeira fonte da verdade do que a macro realmente produziu. Ficar olhando o código-fonte da macro e raciocinando sobre o que ela deveria produzir é depurar uma camada diferente da que realmente roda.

# o SQL renderizado, não o template, é a verdade dbt compile --select my_model cat target/compiled/my_project/models/my_model.sql

O controle de espaço em branco muda o que o Jinja considera código

{%- ... -%} corta o espaço em branco e as quebras de linha bem ao redor de uma tag. Deixar esses traços de fora dentro de um loop ou condicional numa macro é a razão mais comum pela qual o SQL compilado sai com linhas em branco perdidas, ou pior, com uma vírgula sobrando deixada por uma iteração do loop que não cortou do jeito que parecia que cortaria.

O escopo de variável dentro de uma macro não é o que parece

Uma variável definida com {% set x = ... %} dentro de um loop {% for %} não persiste fora do escopo daquele loop como uma variável comum faria na maioria das linguagens - esse é um comportamento rotineiro do Jinja, não uma peculiaridade específica do dbt, e o jeito usual de consertar quando uma macro precisa acumular um valor através das iterações do loop é um objeto namespace() em vez de um set simples.

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.