0Pricing
SQL Academy · Aula

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 + test

Testes 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 < 0

Testes 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: 120

Pacote 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

  1. Fundamentos do DBT (Data Build Tool)
  2. SQLFluff e análise estática
  3. Testes de SQL: testes do dbt, Great Expectations
  4. CI para alterações de esquema (GitHub Actions)
← Voltar para SQL Academy