Настройка Delta Lake для управления размером файла данных

Delta Lake предоставляет параметры для ручного или автоматического настройки целевого размера файла для операций записи и операций OPTIMIZE . Azure Databricks автоматически настраивает многие из этих параметров и включает функции, которые автоматически повышают производительность таблицы, стремясь к правильным файлам размера.

Примечание.

В Databricks Runtime 13.3 и более поздних версиях Databricks рекомендует использовать кластеризация для макета таблицы Delta. См. статью Использование "жидкой" кластеризации для таблиц Delta.

Databricks рекомендует использовать прогнозную оптимизацию для автоматического запуска OPTIMIZE и VACUUM для таблиц Delta. См . статью "Прогнозная оптимизация" для Delta Lake.

В Databricks Runtime 10.4 LTS и более поздних версиях автоматическая сжатие и оптимизированная запись всегда включены для MERGEопераций и UPDATEDELETE операций. Вы не можете отключить эту функцию.

Если иное не указано, все рекомендации в этой статье не применяются к управляемым таблицам каталога Unity, работающим с последними средами выполнения.

Для управляемых таблиц каталога Unity Databricks настраивает большинство этих конфигураций автоматически, если вы используете хранилище SQL или Databricks Runtime 11.3 LTS или более поздней версии.

Если вы обновляете рабочую нагрузку из Databricks Runtime 10.4 LTS или ниже, см . раздел "Обновление до фонового автоматического сжатия".

Когда следует запустить OPTIMIZE

Автоматическое сжатие и оптимизированная запись уменьшает небольшие проблемы с файлами, но не является полной заменой OPTIMIZE. Особенно для таблиц размером более 1 ТБ, Databricks рекомендует выполняться OPTIMIZE по расписанию для дальнейшего консолидации файлов. Azure Databricks не выполняется ZORDER автоматически в таблицах, поэтому для включения расширенного пропуска данных необходимо выполнить его OPTIMIZEZORDER . См . сведения о пропусках данных для 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или UPDATEOPTIMIZE параллельно, автоматическое сжатие может привести к сбою других заданий с конфликтом транзакций. Это не проблема в 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.tuneFileSizesForRewritestrue таблицы для всех таблиц, предназначенных для многих 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.