Оптимизация макета файла данных
Прогнозная оптимизация автоматически выполняется OPTIMIZE
в управляемых таблицах каталога Unity. Databricks рекомендует включить прогнозную оптимизацию для всех управляемых таблиц каталога Unity, чтобы упростить обслуживание данных и сократить затраты на хранение. См . статью "Прогнозная оптимизация" для Delta Lake.
Команда OPTIMIZE
перезаписывает файлы данных для улучшения макета данных для таблиц Delta. Для таблиц с включенным OPTIMIZE
кластеризированием жидкости перезаписывает файлы данных в группирование данных по ключам кластеризации жидкости. Для таблиц с определенными секциями, сжатие файлов и макет данных выполняются в разделах.
Таблицы без отказоустойчивой кластеризации могут дополнительно включать ZORDER BY
предложение для улучшения кластеризации данных при перезаписи. Databricks рекомендует использовать кластеризацию жидкости вместо секций или других подходов ZORDER
к макету данных.
См. раздел "ОПТИМИЗАЦИЯ".
Примеры синтаксиса
Сжатие запускается с помощью команды OPTIMIZE
:
SQL
OPTIMIZE delta.`/data/events`
Python
from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()
или, кроме того, можно также:
SQL
OPTIMIZE events
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()
Если имеется большой объем данных и требуется только оптимизировать подмножество данных, можно указать необязательный предикат секционирования, используя WHERE
:
SQL
OPTIMIZE events WHERE date >= '2022-11-18'
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
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.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по