OPTIMIZE

Aplica-se a:check marked yes Databricks SQL check marked yes Databricks Runtime

Otimiza o layout dos dados do Delta Lake. Opcionalmente, otimize um subconjunto de dados ou coloque dados por coluna. Se você não especificar a colocação e a tabela não estiver definida com clustering líquido, a otimização de empacotamento de compartimento será executada.

Sintaxe

OPTIMIZE table_name [WHERE predicate]
  [ZORDER BY (col_name1 [, ...] ) ]

Nota

  • A otimização de empacotamento de compartimentos é idempotente, o que significa que, se for executada duas vezes no mesmo conjunto de dados, a segunda execução não terá efeito. Ele visa produzir arquivos de dados equilibrados em relação ao seu tamanho no disco, mas não necessariamente o número de tuplas por arquivo. No entanto, as duas medidas estão mais frequentemente correlacionadas.
  • Z-Ordering não é idempotente , mas pretende ser uma operação incremental. Não é garantido que o tempo necessário para Z-Ordering reduza em várias execuções. No entanto, se nenhum novo dado foi adicionado a uma partição que foi apenas Z-Ordered, outra Z-Ordering dessa partição não terá qualquer efeito. Ele visa produzir arquivos de dados equilibrados em relação ao número de tuplas, mas não necessariamente o tamanho dos dados no disco. As duas medidas são mais frequentemente correlacionadas, mas pode haver situações em que esse não é o caso, levando a distorções nos tempos de tarefa otimizados.

Nota

Ao usar o Databricks Runtime, para controlar o tamanho do arquivo de saída, defina a configuraçãospark.databricks.delta.optimize.maxFileSize do Spark. 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

  • table_name

    Identifica uma tabela Delta existente. O nome não deve incluir uma especificação temporal.

  • WHERE

    Otimize o subconjunto de linhas correspondentes ao predicado de partição dado. Apenas filtros envolvendo atributos de chave de partição são suportados.

    Não é possível usar essa cláusula em tabelas que usam clustering líquido.

  • ZORDER BY

    Coloque as informações da coluna no mesmo conjunto de arquivos. A co-localidade é usada por algoritmos de pulo de dados do Delta Lake para reduzir drasticamente a quantidade de dados que precisam ser lidos. Você pode especificar várias colunas para ZORDER BY como uma lista separada por vírgula. No entanto, a eficácia da localidade diminui a cada coluna adicional.

    Não é possível usar essa cláusula em tabelas que usam clustering líquido.

Exemplos

> OPTIMIZE events;

> 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 OPTIMIZE comando, consulte Compactar arquivos de dados com otimizar no Delta Lake.