Оптимизация макета файла данных
Прогнозная оптимизация автоматически выполняется OPTIMIZE
в управляемых таблицах каталога Unity. Databricks рекомендует включить прогнозную оптимизацию для всех управляемых таблиц каталога Unity, чтобы упростить обслуживание данных и сократить затраты на хранение. См . статью прогнозной оптимизации для управляемых таблиц каталога Unity.
Команда OPTIMIZE
перезаписывает файлы данных для улучшения макета данных для таблиц Delta. Для таблиц с включенным OPTIMIZE
кластеризированием жидкости перезаписывает файлы данных в группирование данных по ключам кластеризации жидкости. Для таблиц с определенными секциями, сжатие файлов и макет данных выполняются в разделах.
Таблицы без отказоустойчивой кластеризации могут дополнительно включать ZORDER BY
предложение для улучшения кластеризации данных при перезаписи. Databricks рекомендует использовать кластеризацию жидкости вместо секций или других подходов ZORDER
к макету данных.
См. раздел "ОПТИМИЗАЦИЯ".
Важный
В Databricks Runtime 16.0 и последующих версиях вы можете использовать OPTIMIZE FULL
для принудительного повторного кластеризации таблиц с включенной жидкостной кластеризацией. См. Принудительная рекластеризация для всех записей.
Примеры синтаксиса
Сжатие запускается с помощью команды OPTIMIZE
:
SQL
OPTIMIZE table_name
Python
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'
Python
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 и т. д.) для удаленных файлов и файлов, добавленных этой операцией. Оптимизация статистики также содержит статистику по Z-упорядочению, число пакетов и оптимизированные секции.
Вы также можете автоматически сжимать небольшие файлы с помощью автоматического сжатия. См. раздел "Автоматическое сжатие" для Delta Lake в Azure Databricks.
Как часто я должен работать OPTIMIZE
?
Включите прогнозную оптимизацию для управляемых таблиц каталога Unity, OPTIMIZE
чтобы обеспечить автоматическое выполнение при экономичности.
При выборе частоты запуска OPTIMIZE
учитывается компромисс между производительностью и затратами. Для повышения производительности запросов конечных пользователей запустите OPTIMIZE
чаще. Это приведет к более высокой стоимости из-за увеличения использования ресурсов. Чтобы оптимизировать затраты, запустите его реже.
Databricks рекомендует начать работу OPTIMIZE
ежедневно, а затем настроить частоту, чтобы сбалансировать затраты и компромиссы производительности.
Какой тип лучшего экземпляра для запуска OPTIMIZE
(bin-упаковка и Z-Ordering) включено?
Обе операции предполагают интенсивное использование ресурсов ЦП, выполняющие большие объемы кодирования и декодирования Parquet.
Databricks рекомендует типы оптимизированных для вычислений экземпляров.
OPTIMIZE
также поддерживает подключаемые диски SSD.