Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Прогнозная оптимизация автоматически выполняется OPTIMIZE
в управляемых таблицах каталога Unity. Databricks рекомендует включить прогнозную оптимизацию для всех управляемых таблиц каталога Unity, чтобы упростить обслуживание данных и сократить затраты на хранение. См. статью Прогнозная оптимизация для управляемых таблиц в каталоге Unity.
Команда OPTIMIZE
перезаписывает файлы данных для улучшения макета данных для таблиц Delta. Для таблиц с включенной функцией кластеризации данных по типу «жидкость» OPTIMIZE
переписывает файлы данных, группируя их по ключам кластеризации. Для таблиц с заданными разделами сжатие файлов и макет данных производятся в рамках разделов.
Таблицы без реализации кластеризации могут по желанию включать ZORDER BY
оператор для улучшения кластеризации данных при перезаписи. Databricks рекомендует использовать жидкую кластеризацию вместо секций ZORDER
или других подходов к структурированию данных.
См. OPTIMIZE.
Важный
В Databricks Runtime 16.0 и последующих версиях вы можете использовать OPTIMIZE FULL
для принудительного повторного кластеризации таблиц с включенной жидкостной кластеризацией. См. Принудительная рекластеризация для всех записей.
Примеры синтаксиса
Сжатие запускается с помощью команды OPTIMIZE
:
SQL
OPTIMIZE table_name
Питон
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
язык программирования Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Если имеется большой объем данных и требуется только оптимизировать подмножество данных, можно указать необязательный предикат секционирования, используя WHERE
:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Питон
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
язык программирования Scala
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-упорядочению, число пакетов и оптимизированные разделы.
Вы также можете автоматически сжимать небольшие файлы с помощью автоматического сжатия. См. раздел "Автоматическое сжатие" для Delta Lake в Azure Databricks.
Как часто я должен запускать OPTIMIZE
?
Включите прогнозную оптимизацию для управляемых таблиц каталога Unity, чтобы OPTIMIZE
выполнялся автоматически, когда это экономически эффективно.
При выборе частоты запуска OPTIMIZE
учитывается компромисс между производительностью и затратами. Для повышения производительности запросов конечных пользователей запустите OPTIMIZE
чаще. Это приведет к более высокой стоимости из-за увеличения использования ресурсов. Чтобы оптимизировать затраты, запустите его реже.
Databricks рекомендует сначала запускать OPTIMIZE
ежедневно, а затем настроить частоту, чтобы сбалансировать затраты и производительность.
Какой тип экземпляра лучше всего подходит для запуска OPTIMIZE
(упаковка и Z-Ordering)?
Обе операции интенсивно нагружают ЦП и включают большие объемы декодирования и кодирования формата Parquet.
Databricks рекомендует типы оптимизированных для вычислений экземпляров.
OPTIMIZE
также извлекает выгоду из подключенных SSD.