Testes de SQL: testes do dbt, Great Expectations
Escreva testes de qualidade de dados com dbt (unique, not_null, accepted_values) e asserções mais completas com Great Expectations.
Testes de SQL: testes do dbt, Great Expectations é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
Por que testar SQL?
Dados incorretos ficam invisíveis até causarem uma decisão equivocada. Os testes detectam:
- Desvio do esquema (coluna removida, tipo alterado)
- Qualidade dos dados (NULLS onde não são permitidos, duplicatas, valores fora do intervalo)
- Problemas de referência (linhas órfãs)
- Invariantes de negócio (receita ≥ 0, totais que fecham)
Testes integrados do dbt
Declare-os por coluna em YAML:
# models/orders.yml
version: 2
models:
- name: orders
columns:
- name: id
tests:
- unique
- not_null
- name: user_id
tests:
- not_null
- relationships:
to: ref('users')
field: id
- name: status
tests:
- accepted_values:
values: ['pending', 'paid', 'cancelled']Executando testes do dbt
Execute todos os testes:
dbt test
dbt test --select orders
dbt build # = run + testTestes singulares personalizados
Um teste é apenas um SELECT que retorna linhas quando falha:
-- tests/no_negative_totals.sql
SELECT id, total
FROM {{ ref('orders') }}
WHERE total < 0Testes genéricos
Testes parametrizados para reutilização em muitas colunas:
-- tests/generic/test_in_range.sql
{% test in_range(model, column_name, min, max) %}
SELECT * FROM {{ model }}
WHERE {{ column_name }} < {{ min }} OR {{ column_name }} > {{ max }}
{% endtest %}
-- Use it in YAML:
columns:
- name: age
tests:
- in_range:
min: 0
max: 120Pacote dbt-utils
Adiciona mais testes: combinações únicas, expression_is_true, equal_rowcount etc.:
- dbt_utils.expression_is_true:
expression: "revenue >= 0"
- dbt_utils.equal_rowcount:
compare_model: ref('staging_orders')Great Expectations
Uma alternativa mais completa — uma estrutura Python com uma ampla biblioteca de expectativas e relatórios detalhados:
import great_expectations as ge
suite = context.add_or_update_expectation_suite('orders')
batch = context.get_validator(batch_request, expectation_suite_name='orders')
batch.expect_column_values_to_not_be_null('id')
batch.expect_column_values_to_be_between('total', 0, 10000)
results = context.run_checkpoint('orders_checkpoint')Quando usar cada um
- testes do dbt — primeira escolha quando o dbt já é usado; leves e apenas com SQL
- Great Expectations — quando são necessários relatórios detalhados, verificações mais abrangentes e formatos além de SQL (CSV/parquet)
Severidade dos testes
O dbt 1.0+ permite definir a severidade como aviso ou erro:
- accepted_values:
values: [...]
config:
severity: warn
warn_if: ">100"
error_if: ">1000"Integração com CI
Execute os testes em cada PR — bloqueie a mesclagem em caso de falha:
# GitHub Actions
- run: dbt deps && dbt build --profiles-dir profiles
- if: failure()
run: echo "::error::dbt tests failed"Painéis de qualidade dos dados
dbt-utils + dbt-expectations + Elementary podem transformar os resultados dos testes em um painel do Grafana / Looker.
Testes de esquema e testes de linhas
Detecte regressões do esquema com o "instantâneo" do dbt dos tipos de coluna; os testes de linhas detectam bugs nos dados.
Recapitulação
Os testes transformam o SQL de "confie em mim" em "verificado".
- Testes do dbt para validações declarativas no armazém de dados
- Great Expectations para verificações mais abrangentes e detalhadas
- Execute na CI; bloqueie em caso de falha
- Acompanhe os resultados ao longo do tempo
Verificação rápida
Deseja um teste do dbt que falhe se alguma linha tiver total < 0. Qual é a abordagem mais simples?
Perguntas Frequentes
A aula “Testes de SQL: testes do dbt, Great Expectations” é grátis?
Sim — o texto completo de “Testes de SQL: testes do dbt, Great Expectations” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Testes de SQL: testes do dbt, Great Expectations”?
Escreva testes de qualidade de dados com dbt (unique, not_null, accepted_values) e asserções mais completas com Great Expectations. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Testes de SQL: testes do dbt, Great Expectations”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Fundamentos do DBT (Data Build Tool)
- SQLFluff e análise estática
- Testes de SQL: testes do dbt, Great Expectations
- CI para alterações de esquema (GitHub Actions)