Configuração do Delta Lake
O chart tdp-deltalake empacota jobs de manutencao 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:
- 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)
- 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.
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 manutencao 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 especificos
- DESCRIBE HISTORY -- registra historico de alteracoes para auditoria
O chart utiliza o chart upstream do Spark como dependencia para fornecer o runtime utilizado pelos jobs de manutencao.
Compatibilidade
| Componente | Versão |
|---|---|
| Spark | 4.0.0 |
| Delta Lake | 4.0.0 |
| Scala | 2.13 |
Instalação
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 manutencao
Configure os jobs de manutencao em maintenance.jobs:
maintenance:
enabled: true
jobs:
vacuum:
enabled: true
schedule: "0 2 * * *" # Diariamente as 2h
retentionHours: 168 # 7 dias
optimize:
enabled: true
schedule: "0 3 * * 0" # Semanalmente aos domingos as 3h
optimizeZOrder:
enabled: false
schedule: "0 1 * * 6" # Sabados as 1h
VACUUM
Remove arquivos que não sao mais referenciados pelo Delta Log:
VACUUM delta.`s3a://warehouse/delta/tabela` RETAIN 168 HOURS;
O periodo de retencao padrão e 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 especificos:
OPTIMIZE delta.`s3a://warehouse/delta/tabela` ZORDER BY (coluna1, coluna2);
Configuração do Spark
Configure o runtime Spark utilizado pelos jobs de manutencao:
maintenance:
spark:
image:
repository: "docker.io/bitnamilegacy/spark"
tag: "4.0.0-debian-12-r0"
resources:
requests:
cpu: 1
memory: 2Gi
limits:
cpu: 2
memory: 4Gi
Habilitacao da dependencia Spark
A dependencia do Spark e controlada via maintenance.spark.enabled:
maintenance:
spark:
enabled: true
Configuração S3/MinIO
Os CronJobs requerem um Secret chamado minio-credentials com as seguintes chaves:
access-keysecret-key
Criar o Secret
kubectl -n <namespace> create secret generic minio-credentials \
--from-literal=access-key='<ACCESS_KEY>' \
--from-literal=secret-key='<SECRET_KEY>'
Configuração do endpoint S3
maintenance:
spark:
config:
"spark.hadoop.fs.s3a.endpoint": "http://<s3-host>.<namespace>.svc.cluster.local:9000"
"spark.hadoop.fs.s3a.path.style.access": "true"
Integração com TDP
Este chart faz parte do TDP e pode ser integrado com:
- tdp-trino -- consultas SQL em tabelas Delta Lake
- tdp-spark -- processamento Spark
- tdp-airflow -- orquestracao de pipelines
Parametros principais
| Parâmetro | Descrição | Padrão |
|---|---|---|
maintenance.enabled | Habilitar jobs de manutencao | true |
maintenance.spark.enabled | Habilitar dependencia Spark | true |
maintenance.spark.image.repository | Imagem Spark | docker.io/bitnamilegacy/spark |
maintenance.spark.image.tag | Tag da imagem Spark | 4.0.0-debian-12-r0 |
maintenance.jobs.vacuum.enabled | Habilitar job VACUUM | true |
maintenance.jobs.vacuum.schedule | Cron do VACUUM | 0 2 * * * |
maintenance.jobs.vacuum.retentionHours | Retencao VACUUM (horas) | 168 |
maintenance.jobs.optimize.enabled | Habilitar job OPTIMIZE | true |
maintenance.jobs.optimize.schedule | Cron do OPTIMIZE | 0 3 * * 0 |
maintenance.jobs.optimizeZOrder.enabled | Habilitar OPTIMIZE Z-ORDER | false |