Proposta de site feita pela Genesis Innovation · conteúdo do LinkedIn de Daniel Santos

Pular para o conteúdo
Daniel Santos

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

Databricks SQLDatabricks SQL / Delta: roda num workspace, não aqui.
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.

Databricks SQLDatabricks SQL / Delta: roda num workspace, não aqui.
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.

Databricks SQLDatabricks SQL / Delta: roda num workspace, não aqui.
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).

Databricks SQLDatabricks SQL / Delta: roda num workspace, não aqui.
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 OPTIMIZE e VACUUM sozinha.

Fontes

Conhecimento compartilhado pela Genesis Innovation.