top of page

Coffee and Tips Newsletter

Inscreva-se na nossa newsletter semanal

Nos vemos em breve!

#9 Data Quality e Observabilidade na Prática com Great Expectations (GX)

  • Foto do escritor: JP
    JP
  • há 14 minutos
  • 7 min de leitura

Série: Trilha prática para se tornar Engenheiro de Dados – Capítulo 9


  1. Introdução: o papel do Data Quality e da Data Observability


Great Expectations
Data Quality e Observability


Empresas modernas dependem de dados para tudo: desde entender o comportamento do cliente até tomar decisões estratégicas que movimentam milhões. Mas existe um ponto crítico e inevitável: não importa o quão avançada seja sua arquitetura — sem qualidade e observabilidade, seus dados não são confiáveis.


Data Quality é o conjunto de práticas que garantem que os dados estejam:


  • corretos

  • completos

  • consistentes

  • íntegros

  • dentro dos padrões esperados


Ou seja: trata-se de garantir que o conteúdo do dado esteja como deveria.


Mas, conforme pipelines crescem, passam por múltiplas camadas (Bronze → Silver → Gold), dependem de dezenas de integrações e rodam milhares de vezes por mês, surge outra necessidade: entender o comportamento do pipeline como um todo.


É aí que entra a Data Observability.


Ela amplia o monitoramento para além do valor do dado, incluindo:


  • frescor (freshness)

  • volume

  • esquema

  • performance do pipeline

  • distribuição dos dados

  • anomalias operacionais

  • linhagem (lineage) entre datasets


Enquanto Data Quality garante que o dado esteja certo, Data Observability garante que o ecossistema esteja saudável.


E por que isso importa?


Porque dados ruins geram decisões ruins — e decisões ruins custam caro. Porque erros silenciosos nas camadas iniciais contaminam dashboards, produtos, modelos de IA e decisões executivas. Porque sem monitoramento contínuo, incidentes são percebidos tarde demais — quando já afetaram o negócio.


Validar dados não é um detalhe técnico. É um pilar de sobrevivência para qualquer operação orientada por dados.



  1. Validar dados: uma das etapas mais importantes do pipeline


Antes de entrar na parte prática com Great Expectations, é importante entender por que fazemos validação.


2.1. Evitar decisões incorretas


Um valor monetário negativo, uma categoria inexistente, um campo nulo ou uma duplicação pode distorcer KPIs importantes, gerando conclusões equivocadas.


2.2 Impedir propagação de erros entre camadas


Uma inconsistência que passa pela Bronze pode chegar até o Data Warehouse e contaminar relatórios críticos.


2.3 Reduzir retrabalho


Sem validação automática:


  • analistas identificam erros tardiamente

  • engenheiros investigam falhas

  • pipelines precisam ser reprocessados

  • custos crescem


Com validação, o erro é pego no início — e com clareza.


2.4 Gerar confiança entre áreas


Validações explícitas + documentação automática formam uma base sólida para relação entre engenharia, analistas e gestores.


  1. O que é o Great Expectations (GX)?


O Great Expectations (GX) é uma das ferramentas mais populares do mercado para validar a qualidade dos dados de forma automatizada. Ele permite que você crie testes unitários para dados, garantindo que cada coluna, cada valor e cada regra de negócio seja verificada antes que o dado avance no seu pipeline.


A ideia é simples:

Assim como você escreve testes unitários para funções em Python, aqui você escreve testes unitários para o seu dataset. Ou seja, você declara o que é correto e deixa o GX verificar automaticamente.

3.1. Um teste unitário de dados — por quê?


Quando validamos dados com GX, estamos fazendo o equivalente a:


  • "testar se o ID é inteiro"

  • "testar se o preço está dentro do esperado"

  • "testar se não existem valores nulos"

  • "testar se apenas categorias válidas aparecem"


Esses testes são executados toda vez que seu dataset é processado, detectando erros antes que eles contaminem o Data Lake, o Data Warehouse ou dashboards.


É literalmente um unit test, só que aplicado ao DataFrame.


3.2. Validação declarativa com Great Expectations


O GX permite que você escreva validações de forma simples e legível, assim:


  • “os valores dessa coluna não podem ser nulos”

  • “preço deve estar entre 0 e 10.000”

  • “rating precisa ser entre 0 e 5”

  • “categoria deve estar dentro da lista permitida”

  • “IDs devem ser únicos”


Essas regras são chamadas de expectations — expectativas que os seus dados devem cumprir.

E o melhor: são declarações claras, fáceis de entender e simples de manter.


3.3. Como o GX funciona no modo simples


Para o nosso caso, usamos o modo mais direto e acessível do GX:


✔ Lemos o CSV com pandas

✔ Criamos um objeto de validação (Validator baseado em DataFrame)

✔ Declaramos 5 ou mais regras de qualidade

✔ Executamos tudo como um teste unitário

✔ Recebemos um relatório de sucesso/erro


Sem datasources complexos, sem config YAML, sem checkpoints, sem suíte persistida — apenas testes unitários diretos para o dataset que você tem em mãos.


Isso torna o GX perfeito para:

  • scripts de validação rápida

  • checagens leves antes de carregar dados

  • validação local durante o desenvolvimento

  • verificação de amostras ou datasets recebidos por terceiros


3.4. Conceitos centrais do GX


1. Expectations (Regras de qualidade)

São os “testes unitários” que você escreve, por exemplo:


  • expect_column_values_to_not_be_null("price")

  • expect_column_values_to_be_between("rating", 0, 5)


Cada expectation é uma regra declarativa aplicada ao dataset.


2. Validator (o “executor dos testes”)

No modo simples, o Validator é criado diretamente a partir do DataFrame:

validator = Validator(batches=[{"data": df}])

A partir disso, você escreve as expectativas:

validator.expect_column_values_to_be_of_type("id", "int64")
validator.expect_column_values_to_be_between("price", 0.01, 10000)

Ele executa e retorna:


  • sucesso/falha

  • lista de valores inesperados

  • detalhes do problema


3. Teste Unitário de Dados (o foco deste tutorial)

Em vez de uma grande estrutura como Datasources, Checkpoints e Data Docs,aqui queremos ensinar:


  • Como escrever testes unitários declarativos para dados

  • Como aplicar expectativas diretamente sobre um DataFrame

  • Como interpretar rapidamente o resultado


É o caminho mais curto e acessível para aprender Data Quality.


  1. Instalando o Great Expectations (GX)


A ideia deste tutorial é explorar o GX sua maneira mais simples de validação. Hoje existe usando GX existe maneiras mais completas de testar seus datasets mas que em breve iremos explorar. Caso seja sua primeira vez usando GX, é a sua chance de explorar mais a fundo essa versão antes de ir para o próximo passo. Para isso, nos próximos passos, altere o código, acesse a documentação oficial, crie mais tipos de validações e altere o CSV buscando explorar diferentes erros e validações.


Para instalar o Great Expectations, iremos usar o pacote pip, para isso a versão do Python 3.8 ou superior precisa estar instalada. Caso tudo esteja GG, execute o comando abaixo no terminal.


pip install great_expectations==0.18.12
  1. Estrutura de Pastas


Use como exemplo a estrutura de pasta abaixo:

Great Expectations

Use o arquivo abaixo como Dataset, isso vai te ajudar no Tutorial. Faça o Download e copie para dentro da pasta data.



  1. Código Python com as validações


No código abaixo, temos um código python com 5 validações usando Great Expectations. É um código relativamente simples que possibilita ler o arquivo CSV e fazer as devidas validações. Nos passos seguintes, iremos explicar mais o código.


scripts/run_validations.py



  1. Entendendo o código


Carregando o CSV


df = pd.read_csv("data/products.csv")

Neste trecho, usando Pandas, é feito a leitura do arquivo CSV e carregando para um DataFrame representado pela variável df.


Se você não é familiarizado com Pandas, é só dar uma olhada nesse Tutorial que criamos, bem simples e direto ao ponto! Lembre-se, Pandas é essencial nessa área, GG?


Criando um PandasDataSet


dataset = PandasDataset(df)

Isso transforma o DataFrame em um objeto do Great Expectations, permitindo aplicar validações.


Validações Utilizadas


Tipo de dado

expect_column_values_to_be_of_type

Garante que a coluna tem o tipo esperado.

Ex.: id deve ser inteiro.


Intervalo

expect_column_values_to_be_between

Garante que um campo terá um range de valores válidos, como por exemplo no código o campo price, onde sempre será maior que zero.


Outro exemplo é o campo rating, nele estamos garantindo que tenha valores entre 0 e 5.


Não nulo

expect_column_values_to_not_be_null

Impede que registros incompletos sigam adiante. Ou seja, campos com esta validações não podem ser nulos.


Domínio (valor permitido)
expect_column_values_to_be_in_set

Assegura que o campo category esteja no catálogo correto. Ou seja, é possível validar os valores a partir de valores pré-definidos em uma outra lista. Fazendo uma relação com SQL, seria algo do tipo usando IN(...)



  1. Executando o código


Agora que explicamos sobre Data Quality e Data Observability, entramos em Great Expectations e explicamos o código, agora é hora de executar, a hora mais esperada!


É a parte mais simples, basta rodar o comando no terminal abaixo:

python scripts/run_validations.py
  1. Checando o resultado de saída


Após executar o comando, algumas das mensagens abaixo podem ser apresentadas como erros, veja mais detalhes:


CSV carregado com 30 linhas.


DETALHES DOS ERROS ENCONTRADOS:


Falhou em: title_not_null


Falhou em: category_valid

- valor inesperado: fragrances

- valor inesperado: fragrances

- valor inesperado: fragrances

- valor inesperado: fragrances

- valor inesperado: fragrances

- valor inesperado: furniture

- valor inesperado: furniture

- valor inesperado: furniture

- valor inesperado: furniture

- valor inesperado: furniture


Perceba que houveram algumas falhas, uma delas no campo title, se você abrir o arquivo CSV, provavelmente uma das linhas está vazia.


O outro erro é referente ao campo category, onde mostra que valores como fragrances e furniture, não estão presentes no DataSet. Encorajo que você altere o arquivo CSV visando explorar ao máximo as vantagens do Great Expectations.

Conclusão


Validar dados não precisa ser complicado — e este tutorial mostrou exatamente isso.

Com uma instalação simples, uma estrutura mínima de pastas e um único script Python, conseguimos aplicar cinco validações reais sobre um arquivo CSV usando o Great Expectations da forma mais direta possível.


Mais do que aprender a usar uma ferramenta, o objetivo aqui foi apresentar o conceito de testes unitários de dados: pequenas regras declarativas que asseguram que os dados atendam às expectativas antes de seguirem para as próximas etapas do pipeline. Assim como testamos funções e classes no desenvolvimento de software, também podemos — e devemos — testar a qualidade dos dados que alimentam nossos sistemas, dashboards e modelos.


O Great Expectations, mesmo em seu modo mais simples, oferece uma abordagem poderosa e transparente para impedir que dados inconsistentes avancem. Esse primeiro passo, baseado em regras diretas e focado no DataFrame, já coloca você no caminho para práticas mais robustas de Data Quality, alinhadas ao que grandes empresas fazem em produção.



Leituras recomendadas




O que vem a seguir?


👉 Capítulo 10 – Data Sharing, BI e Consumo Inteligente de Dados na Prática



Gostou desse capítulo?


👉 Assine a newsletter Coffee & Tips e receba os próximos capítulos direto no seu e-mail.


👉 Pré-venda exclusiva


Em breve também vamos lançar um E-Book avançado, com tutoriais em Spark, Airflow, Redshift, tudo para você se tornar um Engenheiro de Dados!


Cadastre-se agora na lista de pré-venda e garanta:


  • Acesso antecipado antes do lançamento oficial 🚀

  • Benefícios exclusivos para inscritos 💡

  • Conteúdo extra que não estará disponível gratuitamente




Fique ligado!


 
 
 
bottom of page