Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:
Databricks SQL
Databricks Runtime
Esta página descreve o OPTIMIZE comando, que otimiza a disposição dos dados do Delta Lake. Pode otimizar um subconjunto de dados ou colocar dados por coluna. Se não especificares colocação e a tabela não usar clustering líquido, a Delta Lake realiza otimização bin-packing.
Sintaxe
OPTIMIZE table_name [FULL] [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Nota
A optimização bin-packing é idempotente: se a executares duas vezes no mesmo conjunto de dados, a segunda execução não tem efeito. Produz ficheiros de dados equilibrados de forma uniforme em relação ao seu tamanho no disco, mas não necessariamente o número de tuplas por ficheiro. As duas medidas são mais frequentemente correlacionadas.
A Ordenação Z não é idempotente, mas opera de forma incremental. O tempo que a Ordenação Z demora não é garantido que diminua ao longo de várias corridas. No entanto, se não foram adicionados novos dados a uma partição que foi apenas Z-Ordered, executar novamente Z-Ordering nessa partição não tem efeito. A Ordenação Z produz ficheiros de dados equilibrados de forma uniforme em relação ao número de tuplas, mas não necessariamente ao tamanho dos dados no disco. As duas medidas estão mais frequentemente correlacionadas, mas pode ocorrer um desvío nos tempos de otimização das tarefas quando divergem.
Nota
Ao usar o Databricks Runtime, para controlar o tamanho do ficheiro de saída, defina a configuração spark.databricks.delta.optimize.maxFileSizedo Spark. O valor padrão é 1073741824 (1 GB). Especificar 104857600 define o tamanho do ficheiro para 100 MB.
Parâmetros
-
Identifica uma tabela Delta existente. O nome não deve incluir uma especificação temporal ou uma especificação de opções.
FULLAplica-se a:
Databricks Runtime 16.0 e versões superioresReescreve todos os arquivos de dados na tabela. Use
OPTIMIZE table_name FULLpara:- Otimize toda a tabela, incluindo dados que estavam previamente agrupados (para tabelas que usam agrupamento líquido).
- Recompacte os arquivos de dados existentes quando você alterar o codec de compactação da tabela usando a
delta.parquet.compression.codecpropriedade.
Para recomprimir dados existentes após alterar o codec de compressão, execute
OPTIMIZE table_name FULL:-- Change compression codec ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD'); -- Recompress all existing data files OPTIMIZE table_name FULL;Para otimizar um subconjunto de ficheiros numa tabela com clustering líquido ativado, combine
FULLcom umWHEREpredicado (Databricks Runtime 18.1 e superior). Apenas são suportados predicados simples de intervalo numa única coluna de agrupamento. Um ficheiro é incluído se qualquer parte do seu alcance coincidir com o predicado. Por exemplo,OPTIMIZE events FULL WHERE date > 15inclui um ficheiro com alcance(col_min = 10, col_max = 20)porque o intervalo do ficheiro se sobrepõe ao predicado.WHEREOtimiza o subconjunto de linhas que correspondem a um predicado de partição/clustering. Apenas são suportados filtros nos atributos da chave de partição/clustering.
Para tabelas que usam cluster líquido, use
OPTIMIZE table_name FULL WHERE predicate(Databricks Runtime 18.1 e superior) em vez disso.ZORDER BYColoca a informação das colunas no mesmo conjunto de ficheiros. Os algoritmos de salto de dados de Delta Lake usam co-localidades para reduzir a quantidade de dados que precisam de ser lidos. Pode especificar múltiplas colunas como uma lista separada por vírgulas, mas a eficácia da co-localidade diminui a cada coluna adicional.
Não podes usar esta cláusula em tabelas que usam clustering líquido.
Exemplos
> OPTIMIZE events;
> OPTIMIZE events FULL;
> -- Partitioned table
> OPTIMIZE events WHERE date >= '2017-01-01';
> -- Table with liquid clustering enabled (DBR 18.1 and above)
> OPTIMIZE events FULL WHERE date >= '2025-01-01';
> OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType);
Para mais informações, consulte Otimizar layout de ficheiros de dados.