Qualidade de Dados¶
Estratégia de validação e monitoramento da qualidade dos dados no GovHub BR.
Abordagem Multi-Camada¶
graph LR
A[Ingestão] -->|Retries, logs| B[Bronze]
B -->|dbt tests| C[Silver]
C -->|dbt tests + business rules| D[Gold]
D -->|OpenMetadata| E[Governança]
Testes dbt¶
Schema Tests¶
Aplicados automaticamente via schema.yml:
| Teste | Descrição | Camada |
|---|---|---|
not_null |
Coluna não pode ser nula | Silver, Gold |
unique |
Valores únicos | Silver |
accepted_values |
Valores dentro de conjunto esperado | Silver |
relationships |
Integridade referencial | Gold |
Custom Tests¶
-- tests/assert_transferencias_valor_positivo.sql
-- Garante que não há transferências com valor negativo
SELECT *
FROM {{ ref('transferencias') }}
WHERE valor < 0
-- tests/assert_datas_validas.sql
-- Garante que datas estão em range razoável
SELECT *
FROM {{ ref('transferencias') }}
WHERE data_celebracao < '2000-01-01'
OR data_celebracao > CURRENT_DATE + INTERVAL '1 day'
Freshness¶
# models/staging/schema.yml
sources:
- name: bronze
freshness:
warn_after: {count: 24, period: hour}
error_after: {count: 48, period: hour}
loaded_at_field: _loaded_at
tables:
- name: transferegov_raw
- name: comprasgov_raw
Métricas de Qualidade¶
| Métrica | Definição | Threshold |
|---|---|---|
| Completeness | % de campos não-nulos | > 95% |
| Uniqueness | % de registros únicos (por PK) | 100% |
| Timeliness | Idade do dado mais recente | < 48h |
| Validity | % dentro de valores aceitos | > 99% |
| Consistency | Integridade referencial | 100% |
Execução¶
# Rodar todos os testes
dbt test
# Testes apenas de Silver
dbt test --select silver.*
# Testes de freshness
dbt source freshness
# Verbose (ver falhas)
dbt test --select silver.* --store-failures
Monitoramento¶
Alertas¶
Callbacks de falha e regras de freshness não fazem parte da configuração base atual. Ao habilitá-los, adote como referência:
- falha em
dbt test: notificação pelo mecanismo configurado no Airflow; - freshness acima do limite de atenção: aviso ao time responsável;
- freshness acima do limite crítico: alerta operacional.
Os limites devem refletir o schedule e o SLA de cada fonte, em vez de usar um valor único para todos os pipelines.
OpenMetadata¶
Quando a integração com OpenMetadata estiver habilitada, ela pode:
- Visualizar resultados de testes por dataset
- Rastrear tendências de qualidade ao longo do tempo
- Atribuir ownership a problemas de qualidade
- Dashboard de data quality score
Boas Práticas¶
- Models Silver devem testar
not_nulleuniquenas chaves quando aplicável - Models Gold devem testar relacionamentos relevantes com dimensões
- Sources com campo confiável de atualização devem configurar freshness
- Custom tests para regras de negócio específicas
- Use
--store-failuresem ambiente controlado quando for necessário preservar evidências para diagnóstico