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


OPTIMIZE

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

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

Синтаксис

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

Примечание.

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

Примечание.

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

Параметры

  • table_name

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

  • FULL

    Область применения: галочка Databricks Runtime 16.0 и выше

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

  • WHERE

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

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

  • ZORDER BY

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

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

Примеры

> OPTIMIZE events;

> OPTIMIZE events FULL;

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

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

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