Qualidade de dados: Great Expectations, dbt tests, Soda
⏱ 12 min·⭐ 50 XP
Pré-requisitos (0/1)0%
- ⬜🧊 Iceberg, Delta e Hudi: table formats abertos(Data Engineering Moderna)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Great Expectations exemplo
| Dimensão | Pergunta que ela faz | Como se verifica |
|---|---|---|
| Completude | Falta valor onde não deveria? | Percentual de nulos por coluna, com limiar |
| Unicidade | A chave é realmente única? | Contagem distinta versus total |
| Validade | O valor está no domínio esperado? | Faixa, expressão, conjunto de valores aceitos |
| Consistência | Bate com a outra tabela? | Contagem cruzada e integridade referencial |
| Frescor | Quando foi atualizado? | Idade do registro mais recente |
| ⚠ Onde a verificação roda | Antes ou depois de publicar? | Depois, ela avisa; antes, ela IMPEDE o dado ruim de circular |
DimensãoCompletude
Pergunta que ela fazFalta valor onde não deveria?
Como se verificaPercentual de nulos por coluna, com limiar
DimensãoUnicidade
Pergunta que ela fazA chave é realmente única?
Como se verificaContagem distinta versus total
DimensãoValidade
Pergunta que ela fazO valor está no domínio esperado?
Como se verificaFaixa, expressão, conjunto de valores aceitos
DimensãoConsistência
Pergunta que ela fazBate com a outra tabela?
Como se verificaContagem cruzada e integridade referencial
DimensãoFrescor
Pergunta que ela fazQuando foi atualizado?
Como se verificaIdade do registro mais recente
Dimensão⚠ Onde a verificação roda
Pergunta que ela fazAntes ou depois de publicar?
Como se verificaDepois, ela avisa; antes, ela IMPEDE o dado ruim de circular
import great_expectations as gx
context = gx.get_context()
datasource = context.sources.add_pandas('my_source')
asset = datasource.add_dataframe_asset(name='orders', dataframe=df)
# Create expectation suite
suite = context.add_expectation_suite('orders_suite')
# Add expectations
validator = context.get_validator(
batch_request=asset.build_batch_request(),
expectation_suite=suite,
)
validator.expect_column_values_to_not_be_null('id')
validator.expect_column_values_to_be_unique('id')
validator.expect_column_values_to_be_between('total', 0, 1_000_000)
validator.expect_column_values_to_match_regex('email', r'^[^@]+@[^@]+$')
# Run + get result
result = validator.validate()
if not result.success:
raise Exception(f"Data quality failed: {result.results}")Data observability — next level
💡
Ferramentas comerciais (Monte Carlo, Bigeye, Anomalo, Metaplane) detectam anomalias AUTOMATICAMENTE sem você escrever test — ML em metadata. Valor quando dataset é grande/dinâmico demais pra curar testes manuais. Open-source: Elementary (dbt-based) e Re_data.
Quiz rápido
Por que verificação de qualidade precisa rodar no pipeline, e não em relatório periódico?
Perguntas frequentes
❓ Que testes de dado valem sempre a pena?
Quatro: volume dentro da faixa esperada, unicidade da chave, ausência de nulo onde é obrigatório e integridade referencial. Eles pegam a maioria dos incidentes reais, custam pouco e falham cedo. Teste de distribuição e de regra de negócio vêm depois, por domínio.
❓ Onde colocar o teste no pipeline?
Na entrada de cada etapa, falhando rápido — não só no fim. Teste apenas no fim descobre o problema depois de propagado por todas as transformações, e o diagnóstico fica caro. Falhar na fronteira diz qual etapa recebeu dado ruim.
❓ O que fazer quando o teste falha em produção?
Interromper a propagação e manter a última versão boa disponível, em vez de publicar dado suspeito. Pipeline que continua com dado ruim gera decisão errada com aparência de normalidade — e recuperar a confiança no número custa mais que o atraso.
Fixando
Quiz rápido
Qual verificação costuma pegar mais problemas com menos esforço?
Quiz rápido
Qual é a diferença entre verificação de qualidade e observabilidade de dados?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…