Saltar para o conteúdo principal
Versão 3.0.0

Configuração do Delta Lake

O chart tdp-deltalake empacota jobs de manutenção para tabelas Delta Lake 4.0.0, utilizando Apache Spark 4.0.0.

O que é o Delta Lake e por que ele precisa de manutenção?

O Delta Lake é um formato de tabela aberta que adiciona transações ACID ao armazenamento de objetos (S3/Ozone).

Em vez de gravar arquivos Parquet diretamente, o Delta Lake mantém um transaction log — um histórico de todas as operações (INSERT, UPDATE, DELETE, MERGE) realizadas na tabela.

Com o tempo, esse modelo gera dois tipos de acúmulo que precisam de limpeza periódica:

  1. Arquivos órfãos: arquivos Parquet que existem no S3 mas não são mais referenciados por nenhuma versão ativa da tabela (resultado de operações abortadas ou versões antigas)
  2. Versões antigas: o transaction log mantém histórico indefinidamente; sem limpeza, ele cresce sem limite

O chart tdp-deltalake não é uma aplicação contínua — ele cria Kubernetes CronJobs que rodam periodicamente (como um cron do Linux, mas gerenciado pelo Kubernetes) para realizar essa manutenção automaticamente.

Para saber mais

Consulte Delta Lake — Conceitos para uma visão completa do formato, transações ACID e casos de uso.

Visão geral

Este chart fornece CronJobs para manutenção agendada de tabelas Delta Lake:

  • VACUUM -- remove arquivos antigos não referenciados pelo transaction log
  • OPTIMIZE -- compacta arquivos pequenos em arquivos maiores
  • OPTIMIZE Z-ORDER -- otimiza o layout dos dados para consultas com filtros específicos
  • DESCRIBE HISTORY -- registra histórico de alterações para auditoria

O chart utiliza o chart upstream do Spark como dependência para fornecer o runtime utilizado pelos jobs de manutenção.

Compatibilidade

ComponenteVersão
Spark4.0.0
Delta Lake4.0.0
Scala2.13

Instalação

Terminal input
helm upgrade --install <release> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-deltalake \
-n <namespace> --create-namespace

Outros registros OCI podem existir na sua organização; use o catálogo interno de charts ou as instruções fornecidas pela Tecnisys.

Jobs de manutenção

Configure os jobs de manutenção em maintenance.jobs:

maintenance:
enabled: true
jobs:
vacuum:
enabled: true
schedule: "0 2 * * *" # Diariamente às 2h
retentionHours: 168 # 7 dias

optimize:
enabled: true
schedule: "0 3 * * 0" # Semanalmente aos domingos às 3h

optimizeZOrder:
enabled: false
schedule: "0 1 * * 6" # Sábados às 1h

VACUUM

Remove arquivos que não são mais referenciados pelo Delta Log:

VACUUM delta.`s3a://warehouse/delta/tabela` RETAIN 168 HOURS;
Importante

O período de retenção padrão é 7 dias (168 horas). Não reduza abaixo de 7 dias em produção, pois isso pode causar perda de dados para consultas em andamento.

OPTIMIZE

Compacta arquivos pequenos em arquivos maiores para melhorar a performance de leitura:

OPTIMIZE delta.`s3a://warehouse/delta/tabela`;

OPTIMIZE com Z-ORDER

Otimiza o layout dos dados para consultas com filtros específicos:

OPTIMIZE delta.`s3a://warehouse/delta/tabela` ZORDER BY (coluna1, coluna2);

Configuração do Spark

Configure o runtime Spark utilizado pelos jobs de manutenção:

maintenance:
spark:
image:
repository: "registry.tecnisys.com.br/community/images/bitnamilegacy/spark"
tag: "4.0.0-debian-12-r0"
resources:
requests:
cpu: 1
memory: 2Gi
limits:
cpu: 2
memory: 4Gi

Habilitação da dependência Spark

A dependência do Spark é controlada via maintenance.spark.enabled:

maintenance:
spark:
enabled: true

Integrações

Para configuração de S3/MinIO e integração com outras ferramentas TDP (Trino, Spark, Airflow), consulte Integrações — Delta Lake.

Parâmetros principais

ParâmetroDescriçãoPadrão
maintenance.enabledHabilitar jobs de manutençãotrue
maintenance.spark.enabledHabilitar dependência Sparktrue
maintenance.spark.image.repositoryImagem Sparkregistry.tecnisys.com.br/community/images/bitnamilegacy/spark
maintenance.spark.image.tagTag da imagem Spark4.0.0-debian-12-r0
maintenance.jobs.vacuum.enabledHabilitar job VACUUMtrue
maintenance.jobs.vacuum.scheduleCron do VACUUM0 2 * * *
maintenance.jobs.vacuum.retentionHoursRetenção VACUUM (horas)168
maintenance.jobs.optimize.enabledHabilitar job OPTIMIZEtrue
maintenance.jobs.optimize.scheduleCron do OPTIMIZE0 3 * * 0
maintenance.jobs.optimizeZOrder.enabledHabilitar OPTIMIZE Z-ORDERfalse