Data Build Tool (DBT)
O que é o DBT e para que serve?
Em um pipeline ELT, os dados brutos são extraídos (extract) de uma fonte e carregados (load) em uma data warehouse (no nosso caso: o BigQuery Storage). Em seguida, os dados brutos são transformados em tabelas utilizáveis, usando consultas SQL executadas sobre os dados estocados nessa data warehouse.
O dbt (Data Build Tool) é uma ferramenta de linha de comando que oferece uma maneira fácil para que analistas e engenheiros de dados criem, transformem e validem os dados em um data warehouse de maneira mais eficiente. O dbt faz o T nos processos ELT (Extrair, Carregar, Transformar) ilustrados na figura abaixo.

No dbt, trabalhamos com modelos, que nada mais são do que um arquivo SQL com uma instrução select. Esses modelos podem depender de outros modelos, ter testes definidos neles e podem ser criados como tabelas ou visualizações.
Fazendo um paralelo com o processo de ELT do DataHub: utilizamos códigos semi-automatizados em Python para extrair dados de fontes variadas (APIs, Planilhas, PDFs...) e subir esses dados no Google Cloud Storage. Após esse passo, os dados já estão disponíveis para realizar os procedimentos de tratamento no BigQuery. O DBT é responsável por operacionalizar uma pedra fundamental do nosso processo de dados: padronizar dados de acordo com nosso manual de estilo e regras de negócio, validando o resultado com o próprio DBT. Alguns exemplos de tratamento comumente feitos são:
- Tipagem de colunas (
FLOAT64,STRING,GEOMETRY,INT64, etc.). - (Re)nomeação de colunas.
- Mapeamento de seed values (troca de
id_bairropornome_bairroou vice-versa). - Criação de novas colunas a partir dos próprios dados brutos.
- Complementação de dados a partir de outras bases que estão no mesmo data warehouse (Google Cloud Storage).
Além de tratamento, uma forma de registrar Metadados
O DBT transcende sua função primária de transformação de dados, atuando como uma ferramenta útil para documentação e catalogação de metadados. Cada modelo criado no DBT pode ser acompanhado de documentação detalhada que descreve seu propósito, origem dos dados, transformações aplicadas e contexto de negócio. Esta documentação não apenas facilita a compreensão para novos membros da equipe, mas também garante a governança e rastreabilidade dos dados ao longo de todo o processo de transformação.
Na definição atual do Instituto, todos os modelos serão acompanhados de um arquivo que descreve a tabela, as colunas e unidades de medida, quando necessário. Além disso, o modelo abriga todas as informações de tipagem dos dados.
Onde ficam os modelos DBT?
Os modelos DBT ficam armazenados no repositório de dados do DataHub. São arquivos .sql que ficam na pasta models.
- Ex. do modelo br_correio_agencia__agencia.sql
{{
config(
alias="agencia", schema="tratada_br_correio_agencia", materialized="table"
)
}}
select
safe_cast(estado as string) sigla_uf,
safe_cast(municipio as string) municipio,
safe_cast(bairro as string) bairro,
safe_cast(nome_agencia as string) nome_agencia,
safe_cast(endereco as string) endereco,
safe_cast(cep as string) cep,
safe_cast(horario_funcionamento as string) funcionamento,
from `datahub-igarape-dev.bruto_br_correio_agencia.agencia` as t
O que são testes no DBT?
O sistema de testes do DBT é uma das suas funcionalidades mais poderosas, permitindo a validação da qualidade dos dados que estão no DataHub. No contexto do Instituto Igarapé, podemos implementar diversos testes que verificam a integridade dos dados. Por exemplo:
-
validar que campos de data estão dentro de intervalos esperados.
-
validar que valores de colunas com identificadores únicos não possuem duplicatas.
-
validar que valores críticos como coordenadas geográficas estão dentro dos limites territoriais brasileiros.
Estes testes funcionam como guardrails que previnem a propagação de dados incorretos para as camadas superiores do data warehouse. No Datahub, as tabelas validadas ficam disponíveis no projeto do BigQuery chamado datahub-igarape dentro de conjuntos de dados que possuem o prefixo validada_. Essas tabelas passaram pelos testes de qualidades e regras de negócio acordadas e estão prontas parem serem utilizadas na construção de outros produtos de dados!
Os testes no DBT podem ser categorizados em testes genéricos (como unique, not_null, accepted_values) e testes customizados específicos para as regras de negócio do Instituto. Quando um teste falha, o DBT interrompe a execução e gera relatórios detalhados sobre as inconsistências encontradas, permitindo correções rápidas antes que dados problemáticos cheguem aos produtos finais como dashboards e relatórios utilizados pelos pesquisadores do Instituto.
Um caso prático
A tabela agencia do conjunto de dados br_correio_agencia possui 2 testes: um que valida a existência de linhas duplicadas e o outro que valida a existência de um percentual mínimo de valores nulos que cada coluna pode ter. Os testes ficam nos arquivos .yml que também armazenam o modelo de metadados das tabelas, com descrições de cada coluna.
---
version: 2
models:
- name: br_correio_agencia__agencia
description: A tabela contém dados extraídos diretamente do site oficial dos Correios,
oferecendo uma visão abrangente das agências em diversas localidades.
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- sigla_uf
- municipio
- bairro
- nome_agencia
- endereco
- cep
- funcionamento
- not_null_proportion_multiple_columns:
at_least: 0.95
columns:
- name: sigla_uf
description: Sigla da Unidade Federativa.
- name: municipio
description: Municipio da Agencia
- name: bairro
description: Bairro da Agencia
- name: nome_agencia
description: Nome da Agencia
- name: endereco
description: Endereço da Agencia
- name: cep
description: Cep da Agencia
- name: funcionamento
description: Horario de Funcionamento da Agencia
Como o DBT acessa o Big Query?
O acesso é feito via uma conta de serviço com seus devidos papeis, que possibilita a conexão com Big Query para as atividades de manipulação e testagem de dados. Na seção de configuração de acessos via contas de serviço explicamos como é feita a configuração além de uma breve explicação sobre o termo.