OPTIMIZE
Aplica-se a: SQL do Databricks Runtime do Databricks
Otimiza o layout dos dados do Delta Lake. Opcionalmente, otimize um subconjunto de dados ou coloque os dados por coluna. Se você não especificar a colocação e a tabela não for definida com clustering líquido, a otimização de empacotamento em compartimento será executada.
Sintaxe
OPTIMIZE table_name [FULL] [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Observação
- A otimização de empacotamento de compartimentos é idempotente, o que significa que, se ela for executada duas vezes no mesmo conjunto de dados, a segunda não terá nenhum efeito. Ela visa a produzir arquivos de dados balanceados de forma equilibrada em relação ao seu tamanho no disco, mas não necessariamente ao número de tuplas por arquivo. No entanto, as duas medidas são correlacionadas com mais frequência.
- A Ordenação Z não é idempotente, mas visa ser uma operação incremental. Não há garantia de que o tempo necessário à Ordenação Z seja reduzido em várias execuções. No entanto, se nenhum dado novo tiver sido adicionado a uma partição que acabou de sofreu Ordenação Z, outra Ordenação Z dessa partição não terá efeito. O objetivo dessa medida é produzir arquivos de dados balanceados de forma equilibrada em relação ao número de tuplas, mas não necessariamente ao tamanho dos dados no disco. As duas medidas são correlacionadas com mais frequência, mas pode haver situações em que esse não é o caso, levando à distorção nos tempos de tarefa de otimização.
Observação
Ao usar o Databricks Runtime, para controlar o tamanho do arquivo de saída, defina a Configuração do Spark spark.databricks.delta.optimize.maxFileSize
. O valor padrão é 1073741824
, que define o tamanho como 1 GB. A especificação do valor 104857600
define o tamanho do arquivo como 100 MB.
Parâmetros
-
Identifica uma tabela do Delta existente. O nome não deve incluir uma especificação temporal ou especificação de opções.
FULL
Aplica-se a: Databricks Runtime 16.0 e posterior
Otimize toda a tabela, incluindo dados que podem ter sido agrupados anteriormente. Essa cláusula só pode ser especificada para tabelas que usam clustering líquido.
WHERE
Otimize o subconjunto de linhas correspondente ao predicado de partição determinado. Há suporte apenas para filtros que envolvam atributos de chave de partição.
Você não pode usar essa cláusula em tabelas que usam clustering líquido.
ZORDER BY
Colocar as informações da coluna no mesmo conjunto de arquivos. A colocalidade é usada por algoritmos que ignoram dados do Delta Lake a fim de reduzir significativamente o volume de dados que precisam ser lidos. Você pode especificar várias colunas para
ZORDER BY
como lista separada por vírgulas. No entanto, a eficácia da localidade diminui a cada coluna adicional.Você não pode usar essa cláusula em tabelas que usam clustering líquido.
Exemplos
> OPTIMIZE events;
> OPTIMZIE events FULL;
> OPTIMIZE events WHERE date >= '2017-01-01';
> OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType);
Para obter mais informações sobre o comando OPTIMIZE
, confira Otimizar o layout do arquivo de dados.