OPTIMIZE
Область применения: Databricks SQL Databricks Runtime
Вы можете оптимизировать порядок размещения данных Delta Lake. При необходимости оптимизируйте подмножество данных или сортировку данных по столбцам. Если вы не указываете collocation, а таблица не определена с кластеризированием жидкости, выполняется оптимизация упаковки bin.
Синтаксис
OPTIMIZE table_name [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Примечание.
- Результат оптимизации для упаковки данных в контейнеры идемпотентен. Это значит, что если повторно оптимизировать набор данных этим способом, это никак не повлияет на их расположение. Задача этой оптимизации в том, чтобы равномерно сбалансировать файлы данных в соответствии с их размером на диске, но при этом количество кортежей на файл не обязательно должно учитываться. Однако оба этих показателя часто бывают взаимозависимыми.
- Результат Z-упорядочения является не идемпотентным, а инкрементным. Повторная операция Z-упорядочения не всегда будет требовать меньше времени. Однако если новые данные не добавлялись в упорядоченную таким образом секцию, повторная операция никак не отразится на размещении файлов. Задача этой оптимизации в том, чтобы равномерно сбалансировать файлы данных в соответствии с числом их кортежей, но при этом размер файлов на диске не обязательно должен учитываться. Оба этих показателя часто взаимосвязаны, но бывают обратные ситуации, что приводит к дисбалансу во времени выполнения оптимизации.
Примечание.
При использовании Databricks Runtime для управления размером выходного файла задайте конфигурацию spark.databricks.delta.optimize.maxFileSize
Spark. Значение по умолчанию — 1073741824
, которое задает размер 1 ГБ. При указании значения 104857600
задает размер файла 100 МБ.
Параметры
-
Определяет существующую таблицу Delta. Имя не должно содержать временную спецификацию.
WHERE
Оптимизирует подмножество строк, соответствующих заданному предикату секции. Поддерживаются только фильтры, включающие атрибуты ключа секции.
Это предложение нельзя использовать в таблицах, использующих кластеризацию жидкости.
ZORDER BY
Сортировка сведений о столбцах в одном наборе файлов. В Delta Lake такой подход используют алгоритмы пропуска данных, чтобы значительно уменьшить объем данных, которые необходимо считать. Вы можете указать несколько столбцов для
ZORDER BY
в виде списка с разделением запятыми. Однако эффективность локальности уменьшается с каждым дополнительным столбцом.Это предложение нельзя использовать в таблицах, использующих кластеризацию жидкости.
Примеры
> OPTIMIZE events;
> OPTIMIZE events WHERE date >= '2017-01-01';
> OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType);
Дополнительные сведения о команде OPTIMIZE
см. в разделе "Оптимизация макета файла данных".