OPTIMIZE

Область применения:отмечено 'Да' Databricks SQL отмечено 'Да' Databricks Runtime

На этой странице описывается команда, которая оптимизирует OPTIMIZE макет данных Delta Lake. Вы можете оптимизировать подмножество данных или распределить данные по столбцам. Если вы не указываете collocation и таблица не использует ликвидную кластеризацию, Delta Lake выполняет оптимизацию упаковки корзин.

Синтаксис

OPTIMIZE table_name [FULL] [WHERE predicate]
  [ZORDER BY (col_name1 [, ...] ) ]

Примечание.

Оптимизация упаковки корзины является идемпотентной: если он выполняется дважды в одном наборе данных, второй запуск не влияет. Он создает равномерно сбалансированные файлы данных относительно их размера на диске, но не обязательно количество кортежей на файл. Эти два показателя чаще всего коррелируются.

Z-Ordering не является идемпотентным, но работает постепенно. Время, затраченное на Z-Порядок, не гарантируется уменьшение числа нескольких запусков. Тем не менее, если новые данные не были добавлены в раздел, который был только Z-Order, при выполнении Z-Ordering снова в этой секции не действует. Z-Ordering создает равномерно сбалансированные файлы данных относительно количества кортежей, но не обязательно размер данных на диске. Эти два меры чаще всего коррелируются, но время оптимизации может возникать при различении.

Примечание.

При использовании Databricks Runtime для управления размером выходного файла задайте конфигурациюspark.databricks.delta.optimize.maxFileSize Spark. Значение по умолчанию — 1073741824 1 ГБ. Указание 104857600 размера файла — 100 МБ.

Параметры

  • table_name

    Определяет существующую таблицу Delta. Имя не должно включать темпоральную спецификацию или спецификацию параметров.

  • FULL

    Область применения: установите флажок да Databricks Runtime 16.0 и выше

    Перезаписывает все файлы данных в таблице. Используется для OPTIMIZE table_name FULL :

    • Оптимизируйте всю таблицу, включая данные, которые ранее были кластеризованы (для таблиц с использованием отказоустойчивой кластеризации).
    • Измените кодек сжатия таблицы с помощью свойства delta.parquet.compression.codec, чтобы повторно сжать существующие файлы данных.

    Чтобы повторно сжать существующие данные после изменения кодека сжатия, выполните следующую команду OPTIMIZE table_name FULL:

    -- Change compression codec
    ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD');
    
    -- Recompress all existing data files
    OPTIMIZE table_name FULL;
    

    Чтобы оптимизировать подмножество файлов в таблице с включенным кластеризациям жидкости, объедините FULL с предикатом WHERE (Databricks Runtime 18.1 и более поздних версий). Поддерживаются только простые предикаты диапазона в одном столбце кластеризации. Файл включается, если любая часть его диапазона перекрывается с предикатом. Например, включает файл с диапазономOPTIMIZE events FULL WHERE date > 15, (col_min = 10, col_max = 20) так как диапазон файла перекрывается с предикатом.

  • WHERE

    Оптимизирует подмножество строк, соответствующих предикату секции или кластеризации. Поддерживаются только фильтры для атрибутов секционирования или кластеризации.

    Для таблиц, использующих кластеризацию жидкости, используйте OPTIMIZE table_name FULL WHERE predicate вместо этого (Databricks Runtime 18.1 и более поздних версий).

  • ZORDER BY

    Примечание.

    Databricks рекомендует кластеризацию жидкости для всех новых таблиц вместо Упорядочения Z. См. раздел "Использование кластеризации жидкости" для таблиц.

    Сортировка сведений о столбцах в одном наборе файлов. Алгоритмы пропускания данных Delta Lake используют совместное расположение для уменьшения объема данных, которые необходимо считывать. Можно указать несколько столбцов в виде разделенного запятыми списка, но эффективность совместного места уменьшается с каждым дополнительным столбцом.

    Это предложение нельзя использовать в таблицах, использующих кластеризацию жидкости.

Примеры

> OPTIMIZE events;

> OPTIMIZE events FULL;

> -- Partitioned table
> OPTIMIZE events WHERE date >= '2017-01-01';

> -- Table with liquid clustering enabled (DBR 18.1 and above)
> OPTIMIZE events FULL WHERE date >= '2025-01-01';

> OPTIMIZE events
    WHERE date >= current_timestamp() - INTERVAL 1 day
    ZORDER BY (eventType);

Дополнительные сведения см. в разделе "Оптимизация макета файла данных".