Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

Great Expectations: Validação e Qualidade de Dados para Pipelines de Machine Learning

Great Expectations: Validação e Qualidade de Dados para Pipelines de Machine Learning

O que é o Great Expectations?

O Great Expectations (GX) é uma biblioteca open-source Python para validação, documentação e profiling de dados. Criada em 2018 pela Superconductive, a ferramenta se tornou o padrão-ouro para garantia de qualidade de dados em pipelines de dados e machine learning — equivalente ao que testes unitários representam para o desenvolvimento de software.

Em vez de confiar em scripts ad-hoc de validação espalhados pelo código, o Great Expectations oferece uma abordagem declarativa: você define expectations (expectativas) sobre seus dados, executa validações automaticamente e gera documentação rica e interativa sobre a qualidade dos seus datasets.

Conceitos Fundamentais

O Great Expectations é construído sobre quatro conceitos principais:

  • Expectation (Expectativa): Uma afirmação verificável sobre seus dados. Exemplos: expect_column_values_to_not_be_null, expect_column_values_to_be_between, expect_table_row_count_to_be_between. Existem mais de 50 expectations nativas.
  • Expectation Suite (Suíte): Um conjunto organizado de expectations que define o perfil de qualidade esperado para um determinado dataset.
  • Data Source (Fonte de Dados): Conectores para diversas fontes — Pandas DataFrames, Spark DataFrames, bancos SQL (PostgreSQL, Snowflake, BigQuery), e arquivos (CSV, Parquet, Excel).
  • Data Docs (Documentação de Dados): Documentação HTML interativa gerada automaticamente, mostrando o resultado das validações com gráficos, estatísticas e exemplos de falhas.

Primeiros Passos na Prática

Vamos configurar o Great Expectations em um pipeline real:

# Instalação\npip install great_expectations\n\n# Inicializar um projeto GX\ngreat_expectations init

Com o projeto inicializado, crie sua primeira suíte de expectations:

import great_expectations as gx\n\n# Conectar a uma fonte de dados\ncontext = gx.get_context()\n\n# Adicionar validações\nsuite = context.suites.add(gx.ExpectationSuite("vendas_suite"))\n\nsuite.add_expectation(\n    gx.expectations.ExpectColumnValuesToNotBeNull(\n        column="valor_total"\n    )\n)\nsuite.add_expectation(\n    gx.expectations.ExpectColumnValuesToBeBetween(\n        column="quantidade",\n        min_value=1,\n        max_value=1000\n    )\n)\nsuite.add_expectation(\n    gx.expectations.ExpectColumnValuesToBeInSet(\n        column="status",\n        value_set=["PENDENTE", "PAGO", "CANCELADO", "REEMBOLSADO"]\n    )\n)\nsuite.add_expectation(\n    gx.expectations.ExpectTableRowCountToBeBetween(\n        min_value=1_000,\n        max_value=10_000_000\n    )\n)

Validando Dados em Produção

Com as expectations definidas, você pode validar qualquer dataset contra a suíte:

import pandas as pd\nimport great_expectations as gx\n\n# Carregar dados\ndf = pd.read_parquet("vendas_2026_06_17.parquet")\n\n# Criar validador\nvalidator = context.sources.pandas_default.add_dataframe_asset(\n    name="vendas", dataframe=df\n)\n\n# Executar validação\nresultados = validator.validate(suite)\n\n# Verificar resultado\nif not resultados["success"]:\n    print(f"Falhas encontradas: {resultados['statistics']['unsuccessful_expectations']}")\n    for resultado in resultados["results"]:\n        if not resultado["success"]:\n            print(f"  - {resultado['expectation_config']['expectation_type']}: "\n                  f"{resultado['expectation_config']['kwargs']}")\nelse:\n    print("✓ Todos os dados passaram nas validações!")

Integração com Pipelines de Dados

O Great Expectations se integra nativamente com as principais ferramentas de orquestração de dados:

Com Apache Airflow

from airflow import DAG\nfrom airflow.operators.python import PythonOperator\nfrom datetime import datetime\nimport great_expectations as gx\n\ndef validar_vendas():\n    context = gx.get_context()\n    df = ... # carregar dados\n    \n    validator = context.sources.pandas_default.add_dataframe_asset(\n        name="vendas", dataframe=df\n    )\n    suite = context.suites.get("vendas_suite")\n    resultados = validator.validate(suite)\n    \n    if not resultados["success"]:\n        raise ValueError("Dados não passaram nas validações!")\n\nwith DAG(\n    "pipeline_vendas",\n    start_date=datetime(2026, 1, 1),\n    schedule="@daily",\n    catchup=False\n) as dag:\n    validar = PythonOperator(\n        task_id="validar_qualidade",\n        python_callable=validar_vendas\n    )

Com dbt

O Great Expectations complementa o dbt perfeitamente. Enquanto o dbt valida a lógica de transformação SQL, o GX valida os dados brutos na origem e os dados finais nas tabelas:

# No seu projeto dbt, use GX para validar tabelas materializadas\nimport great_expectations as gx\nfrom sqlalchemy import create_engine\n\nengine = create_engine("postgresql://user:pass@host:5432/warehouse")\ncontext = gx.get_context()\n\n# Validar tabela final do dbt\nsuite = context.suites.get("dbt_mart_vendas")\nvalidator = context.sources.sql.add_sql_data_source(\n    name="warehouse", connection_string=str(engine.url)\n)\n\nbatch = validator.get_batch(\n    data_source="warehouse",\n    data_asset_name="marts.vendas_final"\n)\nresultados = batch.validate(suite)

Expectations Avançadas

Além das expectations básicas, o Great Expectations oferece validações sofisticadas:

# Validações estatísticas\nsuite.add_expectation(\n    gx.expectations.ExpectColumnMeanToBeBetween(\n        column="valor",\n        min_value=50.0,\n        max_value=500.0\n    )\n)\n\n# Validações de distribuição\nsuite.add_expectation(\n    gx.expectations.ExpectColumnQuantileValuesToBeBetween(\n        column="valor",\n        quantile_ranges=[\n            {"quantile": 0.25, "min_value": 10, "max_value": 100},\n            {"quantile": 0.50, "min_value": 50, "max_value": 200},\n            {"quantile": 0.75, "min_value": 100, "max_value": 500},\n        ]\n    )\n)\n\n# Validações entre colunas\nsuite.add_expectation(\n    gx.expectations.ExpectColumnPairValuesAToBeGreaterThanB(\n        column_A="data_fim",\n        column_B="data_inicio"\n    )\n)\n\n# Validação de regex\nsuite.add_expectation(\n    gx.expectations.ExpectColumnValuesToMatchRegex(\n        column="email",\n        regex=r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"\n    )\n)\n\n# Validação de distribuição categórica\nsuite.add_expectation(\n    gx.expectations.ExpectColumnDistinctValuesToContainSet(\n        column="categoria",\n        value_set=["Eletrônicos", "Roupas", "Alimentos", "Livros"]\n    )\n)

Data Docs: Documentação Automática de Qualidade

Um dos recursos mais impressionantes do Great Expectations são os Data Docs — documentação HTML interativa gerada automaticamente a partir das validações:

  • Visão geral do dataset: Estatísticas descritivas de cada coluna — contagem, valores nulos, valores únicos, distribuição.
  • Resultados de validação: Expectativas que passaram (verde) vs. que falharam (vermelho), com detalhes sobre cada falha.
  • Exemplos de falhas: Amostras dos dados que violaram cada expectation, facilitando a depuração.
  • Comparação entre execuções: Acompanhamento da evolução da qualidade dos dados ao longo do tempo.

Data Quality as Code na Prática

O Great Expectations permite tratar qualidade de dados como código — versionando sua suíte de expectations no Git, revisando em Pull Requests e aplicando em CI/CD:

# .github/workflows/data_quality.yml\nname: Validar Qualidade dos Dados\non:\n  pull_request:\n    paths:\n      - "data/**"\n      - "expectations/**"\n\njobs:\n  validate:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: "3.12"\n      - run: pip install great_expectations\n      - run: |\n          great_expectations checkpoint run meu_checkpoint

Isso significa que nenhum dado de baixa qualidade chega aos modelos de machine learning ou aos dashboards sem ser detectado — exatamente como nenhum código com bugs chega à produção sem ser pego pelos testes.

Casos de Uso Reais

Empresas como Airbnb, Adobe, Cigna, Dow Jones, Etsy, Fidelity, JP Morgan, Roblox, Stitch Fix, Thrivent e Walmart usam Great Expectations em produção para:

  • Data Lakes: Validar a qualidade de dados ingeridos de dezenas de fontes diferentes antes de disponibilizar para consumo analítico.
  • Pipelines de ML: Garantir que features de modelos em produção continuem dentro das distribuições esperadas (detecção de data drift).
  • Migração de dados: Verificar que dados migrados entre sistemas mantiveram integridade e consistência.
  • Contratos de dados: Estabelecer SLAs de qualidade entre times produtores e consumidores de dados.

Conclusão

O Great Expectations representa uma mudança cultural fundamental na engenharia de dados: assim como nenhum desenvolvedor responsável deploya código sem testes, nenhum engenheiro de dados deveria confiar em dados não validados. Com sua abordagem declarativa, integração nativa com o ecossistema de dados e documentação automática, o GX se tornou uma ferramenta indispensável para qualquer organização que leva qualidade de dados a sério.

Em 2026, com volumes de dados crescendo exponencialmente e modelos de IA cada vez mais dependentes da qualidade dos dados de treinamento, investir em qualidade de dados com Great Expectations não é mais opcional — é um requisito fundamental para qualquer pipeline de dados confiável.

Craft XP
Craft XP