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


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

  • table_name

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