Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Команда OPTIMIZE перезаписывает файлы данных, чтобы улучшить макет данных для таблиц Delta Lake и Apache Iceberg. Для таблиц с включенной функцией кластеризации данных по типу «жидкость» OPTIMIZE переписывает файлы данных, группируя их по ключам кластеризации. Для таблиц с заданными разделами сжатие файлов и макет данных производятся в рамках разделов.
Прогнозная оптимизация автоматически выполняется OPTIMIZE в управляемых таблицах каталога Unity. Databricks рекомендует включить прогнозную оптимизацию для всех управляемых таблиц каталога Unity, чтобы упростить обслуживание данных и сократить затраты на хранение. См. прогнозную оптимизацию для управляемых каталогом Unity таблиц.
Таблицы Delta Lake без liquid-кластеризации могут при необходимости включать конструкцию ZORDER BY, чтобы улучшить кластеризацию данных при перезаписи. Таблицы Apache Iceberg используют стратегии кластеризации и сортировки вместо ZORDER. Databricks рекомендует использовать жидкую кластеризацию вместо секций ZORDER или других подходов к структурированию данных.
См. OPTIMIZE.
Important
В Databricks Runtime 16.0 и последующих версиях вы можете использовать OPTIMIZE FULL для принудительного повторного кластеризации таблиц с включенной жидкостной кластеризацией. См. статью "Принудительное перекластеривание".
Примеры синтаксиса
Активируйте сжатие, выполнив OPTIMIZE команду:
SQL
OPTIMIZE table_name
Python
API DeltaTable Python специально предназначен для Delta Lake.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Scala
API Scala DeltaTable специфичен для Delta Lake.
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Если у вас есть большой объем данных и требуется оптимизировать подмножество, укажите необязательный предикат секции с помощью WHERE:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Python
API DeltaTable Python специально предназначен для Delta Lake.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
API Scala DeltaTable специфичен для Delta Lake.
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Рассмотрим следующие сведения для упаковки корзины:
- Оптимизация упаковки данных в контейнеры является идемпотентной, что означает, что если её провести дважды на одном и том же наборе данных, второй запуск не окажет никакого влияния.
- Алгоритм bin-packing направлен на то, чтобы формировать равномерно сбалансированные файлы данных по их размеру в хранилище, но не обязательно по числу кортежей в каждом файле. Однако эти два меры часто коррелируются.
Читатели таблиц Delta Lake используют изоляцию снимков, что означает, что их работа не прерывается, когда OPTIMIZE удаляет лишние файлы из журнала транзакций. Поскольку OPTIMIZE не вносит никаких изменений в данные таблицы, чтение до и после OPTIMIZE дает одинаковый результат. Выполнение OPTIMIZE над таблицей, являющейся источником потоковой передачи, не влияет ни на какие текущие или будущие потоки, использующие эту таблицу в качестве источника.
OPTIMIZE возвращает статистику файла (min, max, total и т. д.) для удаленных файлов и файлов, добавленных этой операцией. Функция Optimize Stats также содержит статистику по Z-упорядочению, число пакетов и оптимизированные разделы.
Вы также можете автоматически сжимать небольшие файлы с помощью автоматического сжатия. См. раздел "Автоматическое сжатие".
Рекомендуемая частота выполнения OPTIMIZE
Включите прогнозную оптимизацию для управляемых таблиц каталога Unity, чтобы OPTIMIZE выполнялся автоматически, когда это экономически эффективно.
При выборе частоты выполнения OPTIMIZEсуществует компромисс между производительностью и затратами. Для повышения производительности запросов конечных пользователей запустите OPTIMIZE чаще. Это приведет к более высокой стоимости из-за увеличения использования ресурсов. Чтобы оптимизировать затраты, запустите его реже.
Databricks рекомендует сначала запускать OPTIMIZE ежедневно, а затем настроить частоту, чтобы сбалансировать затраты и производительность.
Рекомендуемые типы экземпляров для OPTIMIZE
Обе операции требуют значительных ресурсов ЦП и включают большие объемы декодирования и кодирования Parquet.
Databricks рекомендует типы оптимизированных для вычислений экземпляров.
OPTIMIZE также извлекает выгоду из подключенных SSD.