Wiki Delta Lake
OPTIMIZE, Z-ORDER, clustering e VACUUM
Muitos arquivos pequenos deixam toda leitura lenta. OPTIMIZE compacta, Z-ORDER e liquid clustering aproximam dados parecidos, VACUUM limpa o que sobrou.
Carga incremental frequente (a cada 5 minutos, por streaming) produz arquivos pequenos. Ler 10 mil arquivos de 1 MB custa muito mais que ler 10 arquivos de 1 GB: cada arquivo é uma abertura, uma leitura de rodapé do Parquet e uma entrada no log.
OPTIMIZE: compactar
OPTIMIZE silver.pedidos;
OPTIMIZE silver.pedidos WHERE data >= '2024-06-01';Junta arquivos pequenos em arquivos maiores. É uma transação como outra qualquer: quem lê durante a compactação continua vendo a versão anterior.
Data skipping e Z-ORDER
O Delta guarda o mínimo e o máximo de cada coluna por arquivo (por padrão, das 32 primeiras colunas). Um filtro WHERE cliente_id = 42 pula todo arquivo cujo intervalo não contém 42. Isso só funciona bem se os valores parecidos estiverem nos mesmos arquivos.
OPTIMIZE silver.pedidos ZORDER BY (cliente_id);ZORDER BY reescreve os dados aproximando linhas de valores próximos nas colunas escolhidas. Escolha colunas usadas em filtro e com muitos valores distintos (para coluna de poucos valores, a partição já resolve).
Liquid clustering
Para tabelas novas, o Databricks recomenda *liquid clustering* no lugar de particionamento e Z-ORDER: as chaves de clustering podem mudar sem reescrever a tabela, e o OPTIMIZE agrupa de forma incremental.
CREATE TABLE silver.eventos (id STRING, cliente_id BIGINT, ts TIMESTAMP)
CLUSTER BY (cliente_id);VACUUM: apagar o que nenhuma versão usa
OPTIMIZE, UPDATE, DELETE e MERGE deixam arquivos antigos no disco. O VACUUM apaga os que não são mais referenciados pela versão atual e são mais velhos que a retenção (padrão de 7 dias).
VACUUM silver.pedidos; -- retenção padrão
VACUUM silver.pedidos RETAIN 168 HOURS; -- o mesmo, explícito
VACUUM silver.pedidos DRY RUN; -- só lista o que apagaria- Encurtar a retenção abaixo do padrão pode apagar arquivo que uma leitura longa ou um streaming ainda usa; o Delta recusa sem uma configuração de segurança desligada de propósito.
- Depois do
VACUUM, o time travel para antes da retenção deixa de funcionar. - Em tabelas gerenciadas pelo Unity Catalog, a *otimização preditiva* pode rodar
OPTIMIZEeVACUUMsozinha.
Fontes
Conhecimento compartilhado pela Genesis Innovation.