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.maxFileSize
Spark. Значение по умолчанию — 1073741824
, которое задает размер 1 ГБ. При указании значения 104857600
задает размер файла 100 МБ.
Параметры
-
Определяет существующую таблицу 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
см. в разделе "Оптимизация макета файла данных".