(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como validar partições de data em ELT: passo a passo

João Barros 18 de September de 2026 4 min de leitura

Este tutorial mostra como validar partições de data em ELT para garantir consistência, evitar lacunas e melhorar o desempenho de consultas. Validar partições de data é útil para detetar falhas de carga, ficheiros corrompidos e problemas de retenção antes que afectem relatórios ou pipelines downstream.

Pré-requisitos

  • Acesso a um ambiente com suporte a ficheiros/Delta (por exemplo: Data Lake com Delta Lake ou parquet) e SQL/Notebooks.
  • Ferramentas para correr SQL ou Python (por exemplo: Databricks, Synapse, ou outro ambiente com Spark/SQL).
  • Conhecimentos básicos de ELT, partições por data (date, year/month/day) e comandos SQL/Python.

Passo 1: Identificar o esquema de partição

Perceber como os dados estão particionados: por date, year/month/day ou por outra convenção. Isto permite construir verificações específicas (lacunas, formatos inválidos, metadados).

# Exemplo SQL para ver estrutura de partição (Delta ou Hive metastore)  DESCRIBE DETAIL nome_da_tabela;  -- ou  SHOW PARTITIONS nome_da_tabela LIMIT 100;  

Passo 2: Listar partições esperadas

Gerar a lista de datas que deveriam existir no período de interesse. Isto ajuda a detetar lacunas (missing partitions) no intervalo de carga.

# Exemplo Python (Spark) para gerar datas esperadas entre start_date e end_date  from pyspark.sql.functions import sequence, to_date, explode, lit  start = '2026-09-01'  end = '2026-09-10'  dates_df = spark.sql(f"SELECT explode(sequence(to_date('{start}'), to_date('{end}'), interval 1 day)) as dt")  dates_df.show()  

Passo 3: Obter partições reais

Extrair as partições efectivamente presentes no armazenamento/metastore. Para Delta/Hive, podemos consultar as partições ou inferir a partir dos caminhos de ficheiro.

# Exemplo SQL para obter partições reais (tabela particionada por dt)  SELECT DISTINCT dt FROM nome_da_tabela ORDER BY dt;  -- Ou listar ficheiros no diretório de data: /data/tabela/dt=YYYY-MM-DD/  

Passo 4: Comparar esperado vs real e reportar lacunas

Fazer a junção entre as datas esperadas e as reais para identificar dias em falta. Reporte resultados para alertas ou triggers de backfill.

# Exemplo Spark SQL juntando datas esperadas e reais  dates_df.createOrReplaceTempView('expected_dates')  spark.sql("""
SELECT e.dt as date_expected, r.dt as date_present
FROM expected_dates e
LEFT JOIN (SELECT DISTINCT dt FROM nome_da_tabela) r
ON e.dt = r.dt
WHERE r.dt IS NULL
ORDER BY e.dt
""").show()  

Passo 5: Verificar integridade dos ficheiros por partição

Detetar ficheiros corrompidos ou com schema diferente que causem erros em leituras. Podemos tentar ler cada partição e capturar excepções; também validar número de ficheiros e tamanho mínimo.

# Exemplo Python para validar leitura por partição e contar ficheiros  from pyspark.sql.utils import AnalysisException    partitions = [r['dt'] for r in spark.sql("SELECT DISTINCT dt FROM nome_da_tabela").collect()]  bad_partitions = []  for p in partitions:      path = f"/data/nome_da_tabela/dt={p}"      try:          df = spark.read.format('delta').load(path)  # ou parquet          cnt = df.count()          if cnt == 0:              bad_partitions.append((p, 'empty'))      except Exception as e:          bad_partitions.append((p, str(e)))    print('Partições com problemas:', bad_partitions)  

Passo 6: Validar metadados e estatísticas por partição

Verificar colunas-chave (ex.: id, timestamp) para valores nulos, tipos inesperados ou outliers por partição. Calcular estatísticas básicas ajuda a detetar regressões.

# Exemplo SQL para checar nulos e contar por partição  SELECT dt,         COUNT(*) as rows,         SUM(CASE WHEN id IS NULL THEN 1 ELSE 0 END) as id_nulls,         MIN(event_time) as min_time,         MAX(event_time) as max_time  FROM nome_da_tabela  GROUP BY dt  ORDER BY dt;  

Verificar o resultado

Confirme que:

  • Não existem datas em falta na janela analisada (resultado do Passo 4 vazio).
  • Lista de bad_partitions do Passo 5 está vazia ou tem apenas casos explicáveis.
  • Estatísticas por partição (Passo 6) estão dentro de limites esperados (rows, id_nulls, min/max ok).

Conclusão

Validar partições de data em ELT previne falhas de carga e degradação de performance. Próximos passos: automatizar estas verificações como parte do pipeline (jobs agendados) e integrar alertas/rollback para partições com falhas. Dica: comece por monitorizar uma janela curta (7-14 dias) para reduzir falsos positivos e ajustar limites.