Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Рекомендации по настройке вручную в этой статье не применяются к управляемым таблицам каталога Unity, которые используют автоматическую настройку размера файла. Для новых таблиц используйте управляемые таблицы каталога Unity с параметрами по умолчанию.
В Databricks Runtime 13.3 и более поздних версиях Databricks рекомендует использовать кластеризацию для макета таблицы. См. раздел "Использование кластеризации жидкости" для таблиц.
Databricks рекомендует использовать прогнозную оптимизацию для автоматического запуска OPTIMIZE и VACUUM для таблиц. См. прогнозную оптимизацию для управляемых каталогом Unity таблиц.
В Databricks Runtime 10.4 LTS и более поздних версиях автоматическое сжатие и оптимизированная запись всегда включены для операций MERGE, UPDATE, и DELETE. Вы не можете отключить эту функцию.
Существуют параметры ручной или автоматической настройки целевого размера файла для операций записи и операций OPTIMIZE. Azure Databricks автоматически настраивает многие из этих параметров и включает функции, которые автоматически повышают производительность таблицы, стремясь к правильным файлам размера.
Для управляемых таблиц каталога Unity Databricks настраивает большинство этих конфигураций автоматически, если вы используете хранилище SQL или Databricks Runtime 11.3 LTS или более поздней версии.
Если вы обновляете рабочую нагрузку с Databricks Runtime 10.4 LTS или более ранней версии, см. Обновление до фонового автоматического сжатия.
Когда следует запустить OPTIMIZE
Автоматическое сжатие и оптимизированные записи уменьшают проблемы, связанные с небольшими файлами, но не являются полной заменой для OPTIMIZE. Особенно для таблиц размером более 1 ТБ, Databricks рекомендует запускать OPTIMIZE в расписании для дальнейшего консолидации файлов. Databricks рекомендует кластеризацию жидкости для повышения уровня пропуска данных. Если кластеризация жидкости включена, OPTIMIZE автоматически реорганизует данные ключами кластеризации. См. раздел "Использование кластеризации жидкости" для таблиц.
Для управляемых таблиц каталога Unity прогнозная оптимизация автоматически выполняется OPTIMIZE в таблицах с включенной прогнозной оптимизацией.
Что такое автоматическая оптимизация в Azure Databricks?
Термин автоматическая оптимизация иногда используется для описания функциональности, контролируемой параметрами autoOptimize.autoCompact и autoOptimize.optimizeWrite. Этот термин был заменён в пользу отдельного описания настроек. См. статью "Автоматическое сжатие и оптимизированная запись".
Автоматическое сжатие
Автоматическое сжатие объединяет небольшие файлы в разделах таблиц, чтобы уменьшить проблемы с небольшими файлами. Он выполняется синхронно в кластере, который выполняет запись, после успешной записи и только сжимает файлы, которые ранее не были сжаты.
Автоматическая сжатие и прогнозная оптимизация — это независимые функции, которые можно использовать отдельно или совместно. Автоматическое сжатие выполняется на кластере во время записи, в то время как предсказательная оптимизация асинхронно осуществляет техническое обслуживание с помощью бессерверных вычислений.
Используйте следующие параметры для настройки автоматического сжатия:
| Setting | Дельта | Iceberg | Description |
|---|---|---|---|
| Включение автоматического сжатия (свойство таблицы) | autoOptimize.autoCompact |
autoOptimize.autoCompact |
Включает автоматическое сжатие на уровне таблицы. |
| Включение автоматического сжатия (сеанс Spark) | spark.databricks.delta.autoCompact.enabled |
spark.databricks.iceberg.autoCompact.enabled |
Включает автоматическое сжатие на уровне сеанса. |
| Максимальный размер выходного файла | spark.databricks.delta.autoCompact.maxFileSize |
spark.databricks.iceberg.autoCompact.maxFileSize |
Управляет размером целевого выходного файла. |
| Минимальные файлы для активации сжатия | spark.databricks.delta.autoCompact.minNumFiles |
spark.databricks.iceberg.autoCompact.minNumFiles |
Задает минимальное количество небольших файлов, необходимых в секции или таблице для активации автоматического сжатия. |
Эти параметры принимают следующие опции:
| Параметры | Поведение |
|---|---|
auto (рекомендуется) |
Настраивает целевой размер файла при соблюдении других функций автоматической настройки. Требуется Databricks Runtime 10.4 LTS или более поздней версии. |
legacy |
Псевдоним для true. Требуется Databricks Runtime 10.4 LTS или более поздней версии. |
true |
Используйте 128 МБ в качестве целевого размера файла. Отсутствует динамическое изменение размера. |
false |
Отключает автоматическое сжатие. Можно задать на уровне сеанса переопределение автоматического сжатия для всех таблиц, измененных в рабочей нагрузке. |
Примечание.
Azure Databricks рекомендует использовать автоматическую настройку для управления размером выходного файла на основе размера таблицы. См. раздел "Размер файла Autotune" на основе размера таблицы.
Оптимизированные записи
Оптимизированные операции записи уменьшают размер файла, поскольку данные записываются и улучшают последующие операции чтения в таблице.
Оптимизированные записи наиболее эффективны для секционированных таблиц, так как они снижают количество небольших файлов, записанных в каждую секцию. Запись меньше больших файлов эффективнее, чем запись нескольких небольших файлов, но вы по-прежнему можете увидеть увеличение задержки записи, так как данные перемешиваются перед записью.
На следующем рисунке показано, как работает оптимизированная запись:
Примечание.
Возможно, у вас есть код, который запускается coalesce(n) или repartition(n) незадолго до записи данных для управления количеством записанных файлов. Оптимизированные операции записи устраняют необходимость использования этого шаблона.
Оптимизированные записи включены по умолчанию для следующих операций в Databricks Runtime 9.1 LTS и выше:
MERGE-
UPDATEс вложенными запросами -
DELETEс вложенными запросами
Оптимизированные операции записи также включены для CTAS инструкций и INSERT операций при использовании хранилищ SQL. В Databricks Runtime 13.3 LTS и более поздних версиях все таблицы, зарегистрированные в Unity Catalog, имеют включенную оптимизацию записи для CTAS инструкций и INSERT операций для секционированных таблиц.
Оптимизированные записи можно включить на уровне таблицы или сеанса с помощью следующих параметров:
- Свойство таблицы:
autoOptimize.optimizeWrite - Параметр SparkSession:
spark.databricks.delta.optimizeWrite.enabled(Delta) илиspark.databricks.iceberg.optimizeWrite.enabled(Iceberg)
Эти параметры принимают следующие опции:
| Параметры | Поведение |
|---|---|
true |
Используйте 128 МБ в качестве целевого размера файла. |
false |
Отключает оптимизированные записи. Можно задать на уровне сеанса переопределение автоматического сжатия для всех таблиц, измененных в рабочей нагрузке. |
Установка целевого размера файла
Если вы хотите настроить размер файлов в таблице, задайте для свойстваtargetFileSize таблицы нужный размер. При установке все операции оптимизации макета данных пытаются создать файлы указанного размера, включая оптимизацию, кластеризацию жидкости, автоматическое сжатие и оптимизированную запись.
Примечание.
При использовании управляемых таблиц Unity Catalog и хранилищ SQL или Databricks Runtime 11.3 LTS и более поздних версий только команды OPTIMIZE учитывают параметр targetFileSize.
| Недвижимость | Description |
|---|---|
delta.targetFileSize «Delta»iceberg.targetFileSize (Айсберг) |
Тип: размер в байтах или более поздних единицах. Описание: размер целевого файла. Например: 104857600(bytes) или 100mb.Значение по умолчанию: None |
Для существующих таблиц можно задать и отменить свойства с помощью команды SQL ALTER TABLESET свойства TBL. Эти свойства также можно настроить автоматически при создании таблиц с помощью конфигураций сеанса Spark. Дополнительные сведения см. в справочнике по свойствам таблицы .
Автоматически наладить размер файла на основе размера таблицы
Чтобы свести к минимуму необходимость ручной настройки, Azure Databricks автоматически настраивает размер файлов таблиц на основе размера таблицы. Azure Databricks использует меньшие размеры файлов для небольших таблиц и больших размеров файлов для больших таблиц, чтобы количество файлов в таблице не росло слишком большим. Azure Databricks не выполняет автоматическую настройку таблиц, настроенных с определенным целевым размером.
Размер целевого файла основан на текущем размере таблицы. Для таблиц меньше 2,56 ТБ размер автоматически настраиваемого целевого файла составляет 256 МБ. Для таблиц с размером от 2,56 ТБ до 10 ТБ целевой размер будет линейно увеличиваться с 256 МБ до 1 ГБ. Для таблиц размером более 10 ТБ целевой размер файла составляет 1 ГБ.
Примечание.
При росте размера целевого файла для таблицы существующие файлы не оптимизированы повторно в более крупные файлы с помощью команды OPTIMIZE. Поэтому большая таблица может иметь некоторые файлы, которые меньше целевого размера. Если требуется оптимизировать небольшие файлы в более крупные, можно настроить фиксированный целевой размер файла для таблицы с помощью свойства targetFileSize таблицы.
При добавочном написании таблицы целевые размеры и количество файлов будут близки к следующим числам на основе размера таблицы. Количество файлов в этой таблице — только пример. Фактические результаты будут отличаться в зависимости от множества факторов.
| Размер таблицы | Размер целевого файла | Приблизительное количество файлов в таблице |
|---|---|---|
| 10 ГБ | 256 МБ | 40 |
| 1 TБ | 256 МБ | 4096 |
| 2,56 ТБ | 256 МБ | 10240 |
| 3 ТБ | 307 МБ | 12108 |
| 5 ТБ | 512 МБ | 17339 |
| 7 ТБ | 716 МБ | 20784 |
| 10 ТБ | 1 ГБ | 24437 |
| 20 TБ | 1 ГБ | 34437 |
| 50 ТБ | 1 ГБ | 64437 |
| 100 ТБ | 1 ГБ | 114437 |
Ограничение строк, записанных в файле данных
Иногда таблицы с узкими данными могут столкнуться с ошибкой, когда количество строк в заданном файле данных превышает ограничения поддержки формата Parquet. Чтобы избежать этой ошибки, можно использовать конфигурацию сеанса SQL, чтобы указать максимальное количество записей spark.sql.files.maxRecordsPerFile для записи в один файл таблицы. Указание значения нуля или отрицательного значения не представляет предела.
В Databricks Runtime 11.3 LTS и более поздних версиях можно использовать также параметр maxRecordsPerFile DataFrameWriter при использовании API DataFrame для записи в таблицу. Если указан параметр maxRecordsPerFile, значение конфигурации spark.sql.files.maxRecordsPerFile для сеанса SQL игнорируется.
Примечание.
Databricks не рекомендует использовать этот параметр, если не требуется избежать указанной выше ошибки. Этот параметр может по-прежнему потребоваться для некоторых управляемых таблиц каталога Unity с очень узкими данными.
Обновление до автоматического сжатия фона
Фоновое автоматическое сжатие доступно для управляемых таблиц Unity Catalog в Databricks Runtime 11.3 LTS и более поздних версиях. Фоновое автоматическое сжатие не требует прогнозной оптимизации. При миграции устаревшей рабочей нагрузки или таблицы сделайте следующее:
- Удалите конфигурацию
spark.databricks.delta.autoCompact.enabledSpark (Delta) илиspark.databricks.iceberg.autoCompact.enabled(Iceberg) из параметров конфигурации кластера или блокнота. - Для каждой таблицы выполните команду
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)(Delta) илиALTER TABLE <table_name> UNSET TBLPROPERTIES (iceberg.autoOptimize.autoCompact)(Iceberg), чтобы удалить все устаревшие параметры автоматического сжатия.
После удаления этих устаревших конфигураций вы увидите, что автоматическое фоновое сжатие будет включаться автоматически для всех таблиц, управляемых каталогом Unity.