dbt¶
O dbt transforma e documenta os dados analíticos do GovHub BR. No repositório principal, os projetos dbt ficam dentro do Airflow, em airflow_lappis/dags/dbt/, para serem orquestrados pelo Astronomer Cosmos.
Projetos atuais¶
| Projeto | Caminho | Domínios principais |
|---|---|---|
ipea |
airflow_lappis/dags/dbt/ipea |
contratos, pessoas, TED, orçamento, SisBolsas, metadados |
mir |
airflow_lappis/dags/dbt/mir |
emendas, dados abertos, SICONV, empenhos TED, metadados |
Cada projeto tem seu próprio dbt_project.yml, profiles.yml, models/, macros/, seeds/ e, quando aplicável, snapshots/.
airflow_lappis/dags/dbt/
ipea/
models/
contratos_dbt/
pessoas_dbt/
ted_dbt/
orcamento_dbt/
sistema_sisbolsas/
metadata/
macros/
seeds/
snapshots/
cosmos_dag.py
mir/
models/
dados_abertos_dbt/
emendas_dbt/
empenhos_ted_dbt/
siconv_dbt/
metadata/
macros/
seeds/
tests/
cosmos_dag.py
Orquestração com Cosmos¶
Os projetos ipea e mir são executados por DAGs Cosmos:
| Projeto | DAG |
|---|---|
ipea |
ipea_cosmos_dag |
mir |
mir_cosmos_dag |
As DAGs resolvem os caminhos via AIRFLOW_REPO_BASE, apontando para os arquivos do projeto dentro do ambiente Airflow.
profile_config = ProfileConfig(
profiles_yml_filepath=f"{os.environ['AIRFLOW_REPO_BASE']}/dags/dbt/ipea/profiles.yml",
profile_name="ipea",
target_name="prod",
)
Cada DAG também configura DBT_LOG_PATH_ENVVAR com um diretório próprio em
/tmp. Mantenha essa configuração ao alterar a orquestração, pois execuções
paralelas podem disputar o mesmo arquivo de log.
Conexão PostgreSQL¶
Os profiles.yml atuais usam variáveis de ambiente com defaults locais:
ipea:
target: prod
outputs:
prod:
type: postgres
host: "{{ env_var('DB_DW_HOST', 'postgres') }}"
user: "{{ env_var('DB_DW_USER', 'postgres_dw') }}"
password: "{{ env_var('DB_DW_PASSWORD', 'postgres_dw') }}"
port: "{{ env_var('DB_DW_PORT', '5432') | int }}"
dbname: "{{ env_var('DB_DW_DBNAME', 'data_warehouse') }}"
schema: "{{ env_var('DB_DW_SCHEMA', 'ipea') }}"
O projeto mir segue o mesmo padrão, com variáveis DB_DW_*_MIR.
Camadas e organização¶
Cada domínio organiza seus modelos por camadas quando aplicável:
Nem todo domínio possui todas as camadas. Ao criar modelos novos, siga a estrutura existente do domínio mais próximo.
Macros importantes¶
| Macro | Uso |
|---|---|
safe_casts.sql |
conversões seguras de tipos |
parse_financial_value.sql |
normalização de valores financeiros |
data_quality/row_count_match.sql |
verificação de contagem entre camadas |
data_quality/verificacao_tipagem.sql |
validação de tipos |
metadata/generate_metadata.sql |
geração de metadados de modelos |
udfs/f_parse_dates.sql |
parse de datas |
udfs/f_format_nc.sql |
formatacao de notas de credito |
Comandos úteis¶
Execute os comandos dentro do projeto alterado:
cd airflow_lappis/dags/dbt/ipea
dbt debug
dbt run --select <modelo_ou_dominio>
dbt test --select <modelo_ou_dominio>
dbt docs generate
dbt docs serve --port 8081
Para validar o repositório inteiro pelo Makefile:
Critérios para PRs dbt¶
- Modelo no domínio e camada corretos.
schema.ymlatualizado com descrição de modelo e colunas principais.- Testes
not_null,unique,relationshipsouaccepted_valuesquando fizerem sentido. - Campo
dt_ingestpropagado quando o modelo depender de tabelas ingeridas. selectfinal semselect *em modelos finais.- Macros existentes reaproveitadas antes de criar lógica nova.
Veja também Padrões de engenharia e Qualidade de dados.