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 МБ.
Параметры
-
Определяет существующую таблицу 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
см. в разделе Оптимизация макета файла данных.