Imagine que você foi contratado para construir o maior arranha-céu da cidade. Seria um projeto incrível, não é mesmo? Mas e se eu te dissesse que você precisa usar tijolos rachados, cimento vencido e vigas de ferro enferrujadas? Provavelmente você pensaria duas vezes antes de aceitar o projeto, certo?
Pois é exatamente isso que acontece quando tentamos construir um sistema de Business Intelligence (BI) com dados de baixa qualidade. Assim como um prédio precisa de materiais confiáveis, nossos relatórios e dashboards precisam de dados limpos e organizados. Valores nulos, duplicados ou inconsistentes são como rachaduras na fundação - podem não parecer perigosos no início, mas com o tempo podem derrubar toda a estrutura.
Neste artigo, vamos aprender como ser um “engenheiro de qualidade de dados”, garantindo que nosso arranha-céu de BI seja construído sobre bases sólidas. E o melhor: vou mostrar exemplos práticos de como fazer isso no Microsoft Fabric e no Databricks !
O Projeto do Arranha-Céu: Entendendo a Qualidade de Dados
Antes de começar a construção, todo bom engenheiro precisa de um projeto bem detalhado. No mundo dos dados, esse projeto é o que chamamos de framework de qualidade de dados [1]. É como ter a planta baixa, as especificações técnicas e o cronograma da obra.
Os Materiais de Construção (Dados Brutos)
Os dados brutos que chegam dos sistemas da empresa são como os materiais que chegam no canteiro de obras:
- Alguns vêm sujos (com caracteres especiais ou espaços extras)
- Outros vêm quebrados (valores nulos ou incompletos)
- Alguns chegam no formato errado (datas como texto, números como string)
- E às vezes chegam materiais duplicados (o mesmo cliente cadastrado duas vezes)
O Canteiro de Obras (Processo ETL)
O processo de ETL (Extração, Transformação e Carga) é nosso canteiro de obras. É aqui que:
- Extraímos os materiais dos fornecedores (sistemas origem)
- Transformamos e limpamos os materiais (tratamos os dados)
- Carregamos os materiais tratados na estrutura (Data Warehouse)
O Engenheiro de Qualidade (Data Steward)
Todo canteiro de obras precisa de um engenheiro de qualidade que inspeciona cada material antes dele ser usado na construção. No mundo dos dados, essa pessoa é o Data Steward - o profissional responsável por garantir que apenas dados de boa qualidade entrem no nosso “arranha-céu” [2].
As 6 Inspeções Obrigatórias: As Dimensões da Qualidade
Assim como um engenheiro faz diferentes tipos de inspeção nos materiais, precisamos verificar nossos dados em 6 aspectos fundamentais [3]:
1. Completude: “Chegaram todos os materiais?”
O que é: Verificar se todos os dados necessários estão presentes. Exemplo prático: Um cadastro de cliente sem e-mail é como tentar construir uma parede sem todos os tijolos.
Como implementar no Fabric:
-- Verificar completude no Fabric
SELECT COUNT(*) as total_registros
, COUNT(email) as emails_preenchidos
, (COUNT(email) 100.0 / COUNT()) as percentual_completude
FROM clientes;
Como implementar no Databricks:
# Verificar completude no Databricks
from pyspark.sql.functions import col, count, when, isnan, isnull
df_clientes = spark.table("clientes")
completude_email = df_clientes.select(
count("*").alias("total"),
count(when(col("email").isNotNull(), 1)).alias("emails_validos")
).collect()[0]
percentual = (completude_email.emails_validos / completude_email.total) * 100
print(f"Completude do email: {percentual:.2f}%")
2. Precisão: “Os materiais têm as medidas certas?”
O que é: Os dados refletem corretamente a realidade. Exemplo prático: Uma viga que deveria ter 10 metros mas tem 9,5 metros pode comprometer toda a estrutura.
Como implementar no Fabric:
-- Validar formato de CPF no Fabric
SELECT *
FROM clientes
WHERE LEN(REPLACE(REPLACE(cpf, '.', ''), '-', '')) != 11
OR cpf NOT LIKE '[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]-[0-9][0-9]';
3. Consistência: “As plantas estão alinhadas?”
O que é: Os mesmos dados devem ser iguais em diferentes lugares. Exemplo prático: A planta do arquiteto e a do engenheiro devem mostrar a mesma parede no mesmo lugar.
Como implementar no Databricks:
# Verificar consistência entre tabelas no Databricks
vendas_total = spark.sql("""
SELECT cliente_id, SUM(valor) as total_vendas
FROM vendas
GROUP BY cliente_id
""")
clientes_total = spark.sql("""
SELECT cliente_id, total_compras
FROM clientes
""")
inconsistencias = vendas_total.join(
clientes_total, "cliente_id", "inner"
).filter(
col("total_vendas") != col("total_compras")
)
inconsistencias.show()
4. Conformidade: “Os materiais seguem as normas técnicas?”
O que é: Os dados seguem os padrões e formatos definidos. Exemplo prático: Todos os parafusos devem ser do tipo especificado na norma ABNT.
5. Integridade: “As conexões estão firmes?”
O que é: As relações entre diferentes dados são válidas. Exemplo prático: Cada coluna do 5º andar deve estar conectada à fundação correspondente.
6. Atualidade: “Estamos usando a planta mais recente?”
O que é: Os dados são recentes o suficiente para serem úteis. Exemplo prático: Usar uma planta de 2020 para construir em 2024 pode gerar problemas.
O Maior Vilão: Os Valores Nulos (Materiais Faltando)
Imagine que você está construindo uma parede e, de repente, percebe que faltam alguns tijolos. O que fazer? Deixar o buraco? Improvisar com outro material? Parar a obra até os tijolos chegarem?
No mundo dos dados, os valores nulos são exatamente esses “tijolos faltando”. E a forma como lidamos com eles pode fazer a diferença entre um prédio seguro e um desastre [4].
Cenário 1: Falta Material na Decoração (Atributos de Dimensão)
Situação: Um cliente não tem o campo “estado” preenchido porque mora no exterior. Solução: Em vez de deixar em branco, colocamos “Não se Aplica” ou “Internacional”.
Implementação no Fabric:
-- Tratar nulos em dimensões no Fabric
UPDATE dim_clientes
SET estado = CASE
WHEN estado IS NULL AND pais != 'Brasil' THEN 'Internacional'
WHEN estado IS NULL AND pais = 'Brasil' THEN 'Não Informado'
ELSE estado
END;
Implementação no Databricks:
# Tratar nulos em dimensões no Databricks
from pyspark.sql.functions import when, col
df_clientes_tratado = df_clientes.withColumn(
"estado_tratado",
when(col("estado").isNull() & (col("pais") != "Brasil"), "Internacional")
.when(col("estado").isNull() & (col("pais") == "Brasil"), "Não Informado")
.otherwise(col("estado"))
)
Cenário 2: Falta Material na Estrutura (Chaves Estrangeiras)
Situação: Uma venda foi registrada, mas o produto ainda não existe no cadastro. Solução: Criamos um “produto temporário” até o cadastro correto chegar.
Implementação no Databricks com Delta Lake:
# Implementar "Inferred Members" no Databricks
def tratar_produto_inexistente(df_vendas, df_produtos):
# Identificar produtos que não existem
produtos_faltando = df_vendas.select("produto_id").distinct() \
.join(df_produtos.select("produto_id"), "produto_id", "left_anti")
# Criar registros temporários
produtos_temporarios = produtos_faltando.withColumn(
"nome_produto", lit("Produto Pendente")
).withColumn(
"categoria", lit("Aguardando Cadastro")
).withColumn(
"status", lit("Temporário")
)
# Adicionar à tabela de produtos
df_produtos_completo = df_produtos.union(produtos_temporarios)
return df_produtos_completo
Automatizando a Inspeção: Ferramentas do Engenheiro
No Microsoft Fabric: Data Quality Rules
-- Criar regra de qualidade no Fabric
CREATE OR ALTER PROCEDURE sp_validar_qualidade_clientes
AS
BEGIN
-- Verificar completude
DECLARE @completude_email FLOAT = (
SELECT COUNT(email) * 100.0 / COUNT(*)
FROM clientes
);
-- Verificar duplicatas
DECLARE @duplicatas INT = (
SELECT COUNT(*) - COUNT(DISTINCT cpf)
FROM clientes
);
-- Alertar se qualidade baixa
IF @completude_email < 90 OR @duplicatas > 0
BEGIN
PRINT 'ALERTA: Qualidade dos dados abaixo do esperado!';
PRINT 'Completude email: ' + CAST(@completude_email AS VARCHAR(10)) + '%';
PRINT 'Duplicatas encontradas: ' + CAST(@duplicatas AS VARCHAR(10));
END
END;
No Databricks: Great Expectations
# Implementar validação automática no Databricks
import great_expectations as ge
# Criar expectativas de qualidade
df_ge = ge.from_pandas(df_clientes.toPandas())
# Definir regras
df_ge.expect_column_to_exist("email")
df_ge.expect_column_values_to_not_be_null("email", mostly=0.9)
df_ge.expect_column_values_to_be_unique("cpf")
df_ge.expect_column_values_to_match_regex("cpf", r"^\d{3}\.\d{3}\.\d{3}-\d{2}$")
# Executar validação
resultado = df_ge.validate()
print(f"Validação passou: {resultado.success}")
Monitoramento Contínuo: A Manutenção do Prédio
Assim como um prédio precisa de manutenção regular, nossos dados precisam de monitoramento contínuo.
Dashboard de Qualidade no Fabric:
-- Métricas de qualidade para dashboard
SELECT
'Clientes' as tabela,
COUNT(*) as total_registros,
COUNT(email) * 100.0 / COUNT(*) as completude_email,
COUNT(DISTINCT cpf) * 100.0 / COUNT(*) as unicidade_cpf,
GETDATE() as data_verificacao
FROM clientes
UNION ALL
SELECT
'Produtos' as tabela,
COUNT(*) as total_registros,
COUNT(nome) * 100.0 / COUNT(*) as completude_nome,
COUNT(DISTINCT codigo) * 100.0 / COUNT(*) as unicidade_codigo,
GETDATE() as data_verificacao
FROM produtos;
Alertas Automáticos no Databricks:
# Sistema de alertas no Databricks
def verificar_qualidade_e_alertar():
# Verificar qualidade
qualidade = calcular_metricas_qualidade()
# Definir thresholds
thresholds = {
'completude_minima': 95,
'duplicatas_maximas': 0,
'precisao_minima': 98
}
# Verificar alertas
alertas = []
for metrica, valor in qualidade.items():
if metrica in thresholds:
if valor < thresholds[metrica]:
alertas.append(f" {metrica}: {valor}% (esperado: {thresholds[metrica]}%)")
# Enviar alertas se necessário
if alertas:
enviar_notificacao_slack(alertas)
# Agendar execução
dbutils.jobs.taskValues.set("alertas_qualidade", verificar_qualidade_e_alertar())
Conclusão: Seu Arranha-Céu Está Pronto!
Construir um sistema de BI com dados de qualidade é como erguer um arranha-céu: exige planejamento, materiais de qualidade, inspeções rigorosas e manutenção constante. Mas quando tudo está funcionando bem, você tem uma estrutura sólida que pode suportar qualquer decisão de negócio.
Lembre-se sempre:
- Planeje antes de construir: Defina seu framework de qualidade
- Inspecione todos os materiais: Implemente as 6 dimensões de qualidade
- Trate os problemas na origem: Não deixe valores nulos se acumularem
- Monitore constantemente: Use ferramentas automáticas de validação
- Mantenha a estrutura: Qualidade de dados é um processo contínuo
Com essas práticas e as ferramentas do Fabric e Databricks, você estará pronto para construir o arranha-céu de dados mais confiável da sua empresa! Até a próxima !
Referências
[1] LakeFS. (2025). Data Quality Framework: Best Practices & Tools. https://lakefs.io/data-quality/data-quality-framework/
[2] Hauskrecht, A. (s.d.). Building a Data Warehouse Data Quality Process. Toptal. https://www.toptal.com/database/data-warehouse-data-quality-process
[3] Data Science Academy. (2023). As 6 Dimensões da Qualidade de Dados (Data Quality). https://blog.dsacademy.com.br/as-6-dimensoes-da-qualidade-de-dados-data-quality/
[4] Iverson, H. K., & Oates, J. (2016). How to Manage Null Values in Your Data Warehouse. TDAN.com.



