OPTIMIZE
Область применения: Databricks SQL Databricks Runtime
Вы можете оптимизировать порядок размещения данных Delta Lake. При необходимости optimize использовать подмножество данных или расположить данные по column. Если вы не указываете collocation, а table не определен с кластеризированием жидкости, выполняется оптимизация упаковки bin.
Синтаксис
OPTIMIZE table_name [FULL] [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Примечание.
- Результат оптимизации для упаковки данных в контейнеры идемпотентен. Это значит, что если повторно оптимизировать набор данных этим способом, это никак не повлияет на их расположение. Задача этой оптимизации в том, чтобы равномерно сбалансировать файлы данных в соответствии с их размером на диске, но при этом количество кортежей на файл не обязательно должно учитываться. Однако оба этих показателя часто бывают взаимозависимыми.
- Результат Z-упорядочения является не идемпотентным, а инкрементным. Повторная операция Z-упорядочения не всегда будет требовать меньше времени. Тем не менее, если новые данные не были добавлены в partition, который был просто Z-Ordering этого partition не будет иметь никакого эффекта. Задача этой оптимизации в том, чтобы равномерно сбалансировать файлы данных в соответствии с числом их кортежей, но при этом размер файлов на диске не обязательно должен учитываться. Эти две меры чаще всего коррелируют, но могут возникнуть ситуации, когда это не так, что приводит к отклонению во временах выполнения задачи optimize.
Примечание.
При использовании Databricks Runtime для управления размером выходного файла set конфигурации Sparkspark.databricks.delta.optimize.maxFileSize
. Значение по умолчанию — 1073741824
, которое задает размер 1 ГБ. При указании значения 104857600
задает размер файла 100 МБ.
Parameters
-
Определяет существующую Delta table. Имя не должно включать темпоральную спецификацию или спецификацию параметров.
FULL
Область применения: Databricks Runtime 16.0 и выше
Optimize все table включая данные, которые ранее были кластеризованы. Данное условие можно указать только для tables, использующих жидкостную кластеризацию.
WHERE
Optimize подмножество строк, соответствующих заданному partition предикату. Поддерживаются только фильтры, включающие ключевые атрибуты partition.
Это положение нельзя использовать для tables, которые используют кластеризацию жидкости .
ZORDER BY
Разместите column информацию в одном и том же set файлов. В Delta Lake такой подход используют алгоритмы пропуска данных, чтобы значительно уменьшить объем данных, которые необходимо считать. Можно указать несколько columns для
ZORDER BY
в виде разделенных запятыми list. Однако эффективность данной местности уменьшается при каждом дополнительном column.Это предложение нельзя использовать для tables, которые используют кластеризации жидкости.
Примеры
> 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
см. в Optimize макете файла данных.