Поделиться через


OPTIMIZE

Область применения: флажок Databricks SQL флажок Databricks Runtime

Вы можете оптимизировать порядок размещения данных Delta Lake. При необходимости оптимизируйте подмножество данных или сортировку данных по столбцам. Если вы не указываете collocation, а таблица не определена с кластеризированием жидкости, выполняется оптимизация упаковки bin.

Синтаксис

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

Примечание.

  • Результат оптимизации для упаковки данных в контейнеры идемпотентен. Это значит, что если повторно оптимизировать набор данных этим способом, это никак не повлияет на их расположение. Задача этой оптимизации в том, чтобы равномерно сбалансировать файлы данных в соответствии с их размером на диске, но при этом количество кортежей на файл не обязательно должно учитываться. Однако оба этих показателя часто бывают взаимозависимыми.
  • Результат Z-упорядочения является не идемпотентным, а инкрементным. Повторная операция Z-упорядочения не всегда будет требовать меньше времени. Однако если новые данные не добавлялись в упорядоченную таким образом секцию, повторная операция никак не отразится на размещении файлов. Задача этой оптимизации в том, чтобы равномерно сбалансировать файлы данных в соответствии с числом их кортежей, но при этом размер файлов на диске не обязательно должен учитываться. Оба этих показателя часто взаимосвязаны, но бывают обратные ситуации, что приводит к дисбалансу во времени выполнения оптимизации.

Примечание.

При использовании Databricks Runtime для управления размером выходного файла задайте конфигурацию spark.databricks.delta.optimize.maxFileSizeSpark. Значение по умолчанию — 1073741824, которое задает размер 1 ГБ. При указании значения 104857600 задает размер файла 100 МБ.

Параметры

  • table_name

    Определяет существующую таблицу Delta. Имя не должно включать темпоральную спецификацию или спецификацию параметров.

  • FULL

    Область применения: флажок Databricks Runtime 16.0 и более поздних версий

    Оптимизируйте всю таблицу, включая данные, которые ранее были кластеризованы. Это предложение можно указать только для таблиц, использующих кластеризацию жидкости.

  • WHERE

    Оптимизирует подмножество строк, соответствующих заданному предикату секции. Поддерживаются только фильтры, включающие атрибуты ключа секции.

    Это предложение нельзя использовать в таблицах, использующих кластеризацию жидкости.

  • ZORDER BY

    Сортировка сведений о столбцах в одном наборе файлов. В Delta Lake такой подход используют алгоритмы пропуска данных, чтобы значительно уменьшить объем данных, которые необходимо считать. Вы можете указать несколько столбцов для ZORDER BY в виде списка с разделением запятыми. Однако эффективность локальности уменьшается с каждым дополнительным столбцом.

    Это предложение нельзя использовать в таблицах, использующих кластеризацию жидкости.

Примеры

> OPTIMIZE events;

> OPTIMZIE events FULL;

> OPTIMIZE events WHERE date >= '2017-01-01';

> OPTIMIZE events
    WHERE date >= current_timestamp() - INTERVAL 1 day
    ZORDER BY (eventType);

Дополнительные сведения о команде OPTIMIZE см. в разделе "Оптимизация макета файла данных".