Настройка Delta Lake для управления размером файла данных
Примечание.
Рекомендации, приведенные в этой статье, не применяются к управляемым таблицам каталога Unity. Databricks рекомендует использовать управляемые таблицы каталога Unity с параметрами по умолчанию для всех новых таблиц Delta.
В Databricks Runtime 13.3 и более поздних версиях Databricks рекомендует использовать кластеризацию для макета таблицы Delta. См. статью Использование "жидкой" кластеризации для таблиц Delta.
Databricks рекомендует использовать прогнозную оптимизацию для автоматического запуска OPTIMIZE
и VACUUM
для таблиц Delta. См . статью прогнозной оптимизации для управляемых таблиц каталога Unity.
В Databricks Runtime 10.4 LTS и более поздних версиях автоматическая сжатие и оптимизированная запись всегда включены для MERGE
операций и UPDATE
DELETE
операций. Вы не можете отключить эту функцию.
Delta Lake предоставляет параметры для ручного или автоматического настройки целевого размера файла для операций записи и операций OPTIMIZE
. Azure Databricks автоматически настраивает многие из этих параметров и включает функции, которые автоматически повышают производительность таблицы, стремясь к правильным файлам размера.
Для управляемых таблиц каталога Unity Databricks настраивает большинство этих конфигураций автоматически, если вы используете хранилище SQL или Databricks Runtime 11.3 LTS или более поздней версии.
Если вы обновляете рабочую нагрузку из Databricks Runtime 10.4 LTS или ниже, см . раздел "Обновление до фонового автоматического сжатия".
Когда следует запустить OPTIMIZE
Автоматическое сжатие и оптимизированная запись уменьшает небольшие проблемы с файлами, но не является полной заменой OPTIMIZE
. Особенно для таблиц размером более 1 ТБ, Databricks рекомендует выполняться OPTIMIZE
по расписанию для дальнейшего консолидации файлов. Azure Databricks не выполняется ZORDER
автоматически в таблицах, поэтому для включения расширенного пропуска данных необходимо выполнить его OPTIMIZE
ZORDER
. См . сведения о пропусках данных для Delta Lake.
Что такое автоматическая оптимизация в Azure Databricks?
Термин автоматической оптимизации иногда используется для описания функциональных возможностей, контролируемых параметрами delta.autoOptimize.autoCompact
и delta.autoOptimize.optimizeWrite
. Этот термин был снят в отставку в пользу описания каждого параметра по отдельности. См . статью "Автоматическое сжатие" для Delta Lake в Azure Databricks и оптимизированные записи для Delta Lake в Azure Databricks.
Автоматическое сжатие для Delta Lake в Azure Databricks
Автоматическое сжатие объединяет небольшие файлы в секциях таблиц Delta, чтобы автоматически уменьшить проблемы с небольшими файлами. Автоматическое сжатие происходит после успешной записи в таблицу и работает синхронно в кластере, который выполнил запись. Автоматическое сжатие только сжимает файлы, которые ранее не были сжаты.
Размер выходного файла можно контролировать, задав конфигурацию spark.databricks.delta.autoCompact.maxFileSize
Spark. Databricks рекомендует использовать автоматическую настройку на основе рабочей нагрузки или размера таблицы. См . раздел "Размер файла Autotune" на основе рабочей нагрузки и размера файла Autotune на основе размера таблицы.
Автоматическое сжатие активируется только для секций или таблиц, имеющих по крайней мере определенное количество небольших файлов. При необходимости можно изменить минимальное количество файлов, необходимых для активации автоматического сжатия, задав параметр spark.databricks.delta.autoCompact.minNumFiles
.
Автоматическое сжатие можно включить на уровне таблицы или сеанса с помощью следующих параметров:
- Свойство таблицы:
delta.autoOptimize.autoCompact
- Параметр SparkSession:
spark.databricks.delta.autoCompact.enabled
Эти параметры принимают следующие параметры:
Параметры | Поведение |
---|---|
auto (рекомендуется) |
Настраивает целевой размер файла при соблюдении других функций автоматической настройки. Требуется Databricks Runtime 10.4 LTS или более поздней версии. |
legacy |
Псевдоним для true . Требуется Databricks Runtime 10.4 LTS или более поздней версии. |
true |
Используйте 128 МБ в качестве целевого размера файла. Динамический размер не существует. |
false |
Отключает автоматическое сжатие. Можно задать на уровне сеанса для переопределения автоматического сжатия для всех таблиц Delta, измененных в рабочей нагрузке. |
Внимание
В Databricks Runtime 9.1 LTS, когда другие записи выполняют такие операции, как DELETE
, MERGE
или UPDATE
OPTIMIZE
параллельно, автоматическое сжатие может привести к сбою других заданий с конфликтом транзакций. Это не проблема в Databricks Runtime 10.4 LTS и выше.
Оптимизированные записи для Delta Lake в Azure Databricks
Оптимизированные операции записи повышают размер файла, так как данные записываются и получают преимущества для последующих операций чтения в таблице.
Оптимизированные записи наиболее эффективны для секционированных таблиц, так как они снижают количество небольших файлов, записанных в каждую секцию. Запись меньше больших файлов эффективнее, чем запись нескольких небольших файлов, но вы по-прежнему можете увидеть увеличение задержки записи, так как данные перемешиваются перед записью.
На следующем рисунке показано, как работает оптимизированная запись:
Примечание.
Возможно, у вас есть код, который запускается coalesce(n)
или repartition(n)
незадолго до записи данных для управления количеством записанных файлов. Оптимизированные операции записи устраняют необходимость использования этого шаблона.
Оптимизированные записи включены по умолчанию для следующих операций в Databricks Runtime 9.1 LTS и выше:
MERGE
UPDATE
с вложенными запросамиDELETE
с вложенными запросами
Оптимизированные операции записи также включены для CTAS
инструкций и INSERT
операций при использовании хранилищ SQL. В Databricks Runtime 13.3 LTS и выше все таблицы Delta, зарегистрированные в каталоге Unity, оптимизированы для CTAS
инструкций и INSERT
операций для секционированных таблиц.
Оптимизированные записи можно включить на уровне таблицы или сеанса с помощью следующих параметров:
- Параметр таблицы:
delta.autoOptimize.optimizeWrite
- Параметр SparkSession:
spark.databricks.delta.optimizeWrite.enabled
Эти параметры принимают следующие параметры:
Параметры | Поведение |
---|---|
true |
Используйте 128 МБ в качестве целевого размера файла. |
false |
Отключает оптимизированные записи. Можно задать на уровне сеанса для переопределения автоматического сжатия для всех таблиц Delta, измененных в рабочей нагрузке. |
Установка целевого размера файла
Если вы хотите настроить размер файлов в таблице Delta, задайте для свойства delta.targetFileSize
таблицы нужный размер. Если это свойство задано, все операции оптимизации макета данных будут являться негарантированной попыткой создать файлы указанного размера. Ниже приведены примеры оптимизации или Z-порядка, автоматического сжатия и оптимизированных операций записи.
Примечание.
При использовании управляемых таблиц каталога Unity и хранилищ SQL или Databricks Runtime 11.3 LTS и более поздних OPTIMIZE
версий команды соблюдают targetFileSize
только команды.
Свойство таблицы |
---|
delta.targetFileSize Тип: размер в байтах или более высоких единицах. Размер целевого файла. Например: 104857600 (bytes) или 100mb .Значение по умолчанию: нет |
Для существующих таблиц можно настроить или отменить настройку свойств с помощью команды SQL ALTER TABLE SET TBL PROPERTIES. Эти свойства также можно задать автоматически при создании новых таблиц с помощью конфигураций сеансов Spark. Дополнительные сведения см. в справочнике по свойствам таблицы Delta.
Размер файла Autotune на основе рабочей нагрузки
Databricks рекомендует задать свойство delta.tuneFileSizesForRewrites
true
таблицы для всех таблиц, предназначенных для многих MERGE
или DML-операций, независимо от среды выполнения Databricks, каталога Unity или других оптимизаций. Если задано значение true
, целевой размер файла для таблицы имеет гораздо меньшее пороговое значение, что ускоряет операции с интенсивным записью.
Если не задано явным образом, Azure Databricks автоматически обнаруживает, что 9 из последних 10 предыдущих операций в таблице Delta были MERGE
операциями и присваивает этому свойству таблицу значение true
. Чтобы избежать этого поведения, необходимо явно задать это свойство false
.
Свойство таблицы |
---|
delta.tuneFileSizesForRewrites Тип: Boolean Следует ли настраивать размеры файлов для оптимизации макета данных. Значение по умолчанию: нет |
Для существующих таблиц можно настроить или отменить настройку свойств с помощью команды SQL ALTER TABLE SET TBL PROPERTIES. Эти свойства также можно задать автоматически при создании новых таблиц с помощью конфигураций сеансов Spark. Дополнительные сведения см. в справочнике по свойствам таблицы Delta.
Размер файла Autotune на основе размера таблицы
Чтобы избежать необходимости ручной настройки, Azure Databricks может автоматически настроить размер файла таблиц Delta с учетом размера таблицы. Azure Databricks будет использовать файлы меньшего размера для небольших таблиц и файлы большего размера для больших таблиц, чтобы количество файлов в таблице не возрастало чрезмерно. Azure Databricks не выполняет автонастройку таблиц, настроенных с использованием определенного целевого размера или с учетом рабочей нагрузки с регулярными операциями перезаписи.
Размер целевого файла зависит от текущего размера таблицы Delta. Для таблиц размером менее 2,56 ТБ размер автонастраиваемого целевого файла составляет 256 МБ. Для таблиц размером от 2,56 до 10 ТБ размер целевого файла увеличивается линейно с 256 МБ до 1 ГБ. Для таблиц, размер которых превышает 10 ТБ, размер целевого файла равен 1 ГБ.
Примечание.
При увеличении размера целевого файла для таблицы существующие файлы не будут повторно оптимизироваться в больших файлах с помощью команды OPTIMIZE
. Таким образом, большая таблица может содержать некоторые файлы, размер которых меньше целевого. Если необходимо также оптимизировать файлы меньшего размера в файлы большего объема, можно настроить фиксированный размер целевого файла для таблицы с помощью свойства таблицы delta.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
для записи в один файл для таблицы Delta Lake. Указание нулевого или отрицательного значения означает отсутствие ограничения.
В Databricks Runtime 11.3 LTS и более поздних версиях можно также использовать параметр maxRecordsPerFile
DataFrameWriter при использовании API кадра данных для записи в таблицу Delta Lake. Если указан параметр maxRecordsPerFile
, значение конфигурации spark.sql.files.maxRecordsPerFile
для сеанса SQL игнорируется.
Примечание.
Databricks не рекомендует использовать этот параметр, если не требуется избежать указанной выше ошибки. Этот параметр может по-прежнему потребоваться для некоторых управляемых таблиц каталога Unity с очень узкими данными.
Обновление до автоматического сжатия фона
Фоновое автоматическое сжатие доступно для управляемых таблиц каталога Unity в Databricks Runtime 11.3 LTS и более поздних версиях. При миграции устаревшей рабочей нагрузки или таблицы сделайте следующее:
- Удалите конфигурацию
spark.databricks.delta.autoCompact.enabled
Spark из параметров конфигурации кластера или записной книжки. - Для каждой таблицы выполните команду
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)
, чтобы удалить все устаревшие параметры автоматического сжатия.
После удаления этих устаревших конфигураций вы увидите, что фоновая автоматическая сжатие активируется автоматически для всех управляемых таблиц каталога Unity.