Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Прогнозная оптимизация автоматически выполняется OPTIMIZE в управляемых таблицах каталога Unity. Databricks рекомендует включить прогнозную оптимизацию для всех управляемых таблиц каталога Unity, чтобы упростить обслуживание данных и сократить затраты на хранение. См. статью Прогнозная оптимизация для управляемых таблиц в каталоге Unity.
Команда OPTIMIZE перезаписывает файлы данных для улучшения макета данных для таблиц. Для таблиц с включенной функцией кластеризации данных по типу «жидкость» OPTIMIZE переписывает файлы данных, группируя их по ключам кластеризации. Для таблиц с заданными разделами сжатие файлов и макет данных производятся в рамках разделов.
Таблицы без реализации кластеризации могут по желанию включать ZORDER BY оператор для улучшения кластеризации данных при перезаписи. Databricks рекомендует использовать жидкую кластеризацию вместо секций ZORDER или других подходов к структурированию данных.
Примечание.
ZORDER — это оптимизация Delta Lake. Вместо этого таблицы Apache Iceberg используют стратегии кластеризации и сортировки.
См. OPTIMIZE.
Важный
В Databricks Runtime 16.0 и последующих версиях вы можете использовать OPTIMIZE FULL для принудительного повторного кластеризации таблиц с включенной жидкостной кластеризацией. См. Принудительная рекластеризация для всех записей.
Примеры синтаксиса
Активируйте сжатие, выполнив OPTIMIZE команду:
SQL
OPTIMIZE table_name
Питон
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'
Питон
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-упаковки в том, чтобы равномерно сбалансировать файлы данных в соответствии с их размером на диске, но при этом количество кортежей на файл не обязательно должно учитываться. Однако оба этих показателя часто бывают взаимозависимыми.
- API Python и Scala для выполнения
OPTIMIZEопераций доступны в Databricks Runtime 11.3 LTS и более поздних версиях.
Модули чтения таблиц Delta используют изоляцию моментального снимка, то есть, они не прерываются, когда OPTIMIZE удаляет ненужные файлы из журнала транзакций.
OPTIMIZE не вносит изменения, связанные с данными, в таблицу, поэтому чтение до и после OPTIMIZE дает те же результаты. Выполнение OPTIMIZE в таблице, которая является источником потоковой передачи, не влияет на текущие или будущие потоки, которые обрабатывают эту таблицу как источник.
OPTIMIZE возвращает статистику файла (min, max, total и т. д.) для удаленных файлов и файлов, добавленных этой операцией. Функция Optimize Stats также содержит статистику по Z-упорядочению, число пакетов и оптимизированные разделы.
Вы также можете автоматически сжимать небольшие файлы с помощью автоматического сжатия. См. раздел "Автоматическое сжатие".
Как часто я должен запускать OPTIMIZE?
Включите прогнозную оптимизацию для управляемых таблиц каталога Unity, чтобы OPTIMIZE выполнялся автоматически, когда это экономически эффективно.
При выборе частоты запуска OPTIMIZE учитывается компромисс между производительностью и затратами. Для повышения производительности запросов конечных пользователей запустите OPTIMIZE чаще. Это приведет к более высокой стоимости из-за увеличения использования ресурсов. Чтобы оптимизировать затраты, запустите его реже.
Databricks рекомендует сначала запускать OPTIMIZE ежедневно, а затем настроить частоту, чтобы сбалансировать затраты и производительность.
Какой тип экземпляра лучше всего подходит для запуска OPTIMIZE (упаковка и Z-Ordering)?
Обе операции интенсивно нагружают ЦП и включают большие объемы декодирования и кодирования формата Parquet.
Databricks рекомендует типы оптимизированных для вычислений экземпляров.
OPTIMIZE также извлекает выгоду из подключенных SSD.