Wiki Qualidade, CI/CD e custo
Qualidade de dados
Regras escritas como consulta, que rodam a cada carga e barram ou separam o que viola. Qualidade que depende de alguém olhar não é qualidade.
As dimensões clássicas de qualidade viram perguntas que uma consulta responde:
- Completude: o campo obrigatório veio? (
valor IS NULL) - Unicidade: a chave se repete? (
COUNT(*) > 1por chave) - Validade: o valor está no domínio? (status conhecido, valor positivo, data válida)
- Integridade referencial: a chave estrangeira existe? (pedido de cliente que não existe)
- Atualidade: o dado mais novo é de quando?
Um relatório de regras, que roda aqui
Cada regra conta quantas linhas a violam. Zero é verde.
SELECT 'valor preenchido' AS regra, COUNT(*) AS violacoes FROM pedidos WHERE valor IS NULL
UNION ALL
SELECT 'valor positivo', COUNT(*) FROM pedidos WHERE valor <= 0
UNION ALL
SELECT 'status conhecido', COUNT(*) FROM pedidos WHERE status NOT IN ('entregue', 'cancelado', 'pendente')
UNION ALL
SELECT 'cliente existe', COUNT(*) FROM pedidos p WHERE NOT EXISTS (SELECT 1 FROM clientes c WHERE c.id = p.cliente_id)
UNION ALL
SELECT 'evento sem repetição', COUNT(*) - COUNT(DISTINCT id_evento) FROM eventos;Saída
regra | violacoes -------------------- | --------- valor preenchido | 1 valor positivo | 0 status conhecido | 0 cliente existe | 1 evento sem repetição | 1
O que fazer com quem viola
A regra precisa dizer a consequência, e há três:
- Avisar e deixar passar (registrar a métrica);
- Descartar a linha (ou mandar para uma tabela de quarentena, para não perder);
- Parar a carga inteira, quando a violação significa que algo maior quebrou.
Nos pipelines declarativos do Databricks, as três existem como *expectations*:
import dlt
@dlt.table
@dlt.expect("valor_preenchido", "valor IS NOT NULL")
@dlt.expect_or_drop("valor_positivo", "valor > 0")
@dlt.expect_or_fail("status_conhecido", "status IN ('entregue', 'cancelado', 'pendente')")
def pedidos_silver():
return spark.readStream.table("bronze.pedidos")Em tabelas Delta comuns, ALTER TABLE … ADD CONSTRAINT … CHECK (valor > 0) faz a escrita que viola a regra falhar.
- Meça a taxa de violação ao longo do tempo: uma regra que sempre teve 0,1% e hoje tem 30% é um incidente, mesmo que 30% "passe".
- Regra de qualidade é código: versionada, revisada e testada como o resto (veja CI/CD para dados).
Fontes
Conhecimento compartilhado pela Genesis Innovation.