Поделиться через


Настройка размера файлов данных таблицы Delta

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

Подсказка

Рекомендации по оптимальному размеру файлов на основе сценария потребления (конечная точка аналитики SQL, Power BI Direct Lake, Spark) см. в разделе "Обслуживание и оптимизация таблиц между рабочими нагрузками".

В следующем разделе показано, как использовать различные функции настройки размера файла для достижения производительности для таблиц Delta.

Настраиваемые операции с форматом данных

Optimize

Команда OPTIMIZE перезаписывает небольшие файлы в виде больших файлов, чтобы улучшить макет данных в таблицах Delta. Дополнительные сведения о настройке размера файла см. в документации по команде OPTIMIZE .

Автоматическое сжатие

Автоматическое сжатие автоматически оценивает работоспособности секций после каждой операции записи. При обнаружении чрезмерной фрагментации файлов (слишком большого количества небольших файлов) в секции он запускает синхронную OPTIMIZE операцию сразу после фиксации записи. Этот подход, управляемый записью, к обслуживанию файлов обычно является оптимальным, так как сжатие выполняется только тогда, когда это программно определяется как полезное. Подробные параметры конфигурации и дополнительные сведения см. в документации по автоматическому сжатие .

Оптимизация записи

Оптимизация записи снижает затраты на небольшие файлы, выполняя предварительное сжатие (компактная упаковка), что приводит к уменьшению количества файлов и их увеличению. Этот подход перемещает данные в памяти в оптимальноразмерные контейнеры до того, как Spark записывает файлы Parquet, максимизируя потенциал для создания файлов соответствующего размера без необходимости в немедленной очистке после записи.

Оптимизацию записи следует использовать с осторожностью, так как вычислительная сложность перетасовки данных может добавить чрезмерное и ненужное время обработки в конкретных случаях записи. Оптимизация записи полезна, если операция записи в противном случае создаст небольшие файлы, которые будут кандидатами на сжатие позже.

Снимок экрана, на котором показано, как оптимизация записи приводит к меньшему размеру записываемых файлов.

Оптимизация записи обычно полезна для:

  • Секционированные таблицы
  • Таблицы с частыми небольшими вставками
  • Операции, которые, скорее всего, касаются многих файлов (MERGE, UPDATEи DELETE)

Для выборочного приложения в определенных таблицах отмените конфигурацию сеанса и включите свойство таблицы по отдельности. Отмена настройки конфигурации на уровне сеанса позволяет сеансам Spark передать каждой таблице решение о применении оптимизации записи.

  1. Сброс оптимизации записи

    spark.conf.unset("spark.databricks.delta.optimizeWrite.enabled")
    
  2. Включение на отдельной таблице

    ALTER TABLE dbo.table_name
    SET TBLPROPERTIES ('delta.autoOptimize.optimizeWrite' = 'true')
    

Чтобы включить запись во все секционированные таблицы в сеансе Spark, убедитесь, что конфигурация сеанса не настроена, а затем включите конфигурацию spark.microsoft.delta.optimizeWrite.partitioned.enabledсеанса:

SET spark.microsoft.delta.optimizeWrite.partitioned.enabled = TRUE

Размер целевого файла, сгенерированного с помощью оптимизации записи, можно настроить с помощью spark.databricks.delta.optimizeWrite.binSize конфигурации.

Замечание

Ознакомьтесь с профилями ресурсов, чтобы увидеть параметры записи, оптимизированные по умолчанию для каждого профиля ресурса.

Согласованное задание размера целевого файла

Чтобы избежать необходимости задавать конфигурацию сеанса для минимального и максимального размера целевого файла при выполнении оптимизации, автоматической компакции и оптимизированной записи, Microsoft Fabric предоставляет delta.targetFileSize свойство таблицы, обеспечивающее унификацию всех связанных конфигураций макета данных на уровне таблицы. Значение размера целевого файла вводится в виде строки байтов (например, 1073741824b, , 1048576k1024m, ). 1g При указании он имеет приоритет над всеми другими конфигурациями сеансов и адаптивным размером целевого файла.

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.targetFileSize' = '256m')

Адаптивный размер целевого файла

Microsoft Fabric предоставляет адаптивный размер целевого файла, чтобы устранить сложность, связанную с ручной настройкой целевого размера файлов всех таблиц в сеансе или отдельных таблицах с помощью delta.targetFileSize свойства таблицы. Адаптивный размер целевого файла использует эвристики разностных таблиц, например размер таблицы, чтобы оценить идеальный размер целевого файла и автоматически обновлять целевой объект по мере изменения условий, обеспечивая оптимальную производительность без ручного вмешательства или расходов на обслуживание.

Замечание

Хотя в настоящее время не включена по умолчанию, корпорация Майкрософт рекомендует включить конфигурацию сеанса адаптивного целевого размера файла .

Включите размер адаптивного целевого файла в таблицах, созданных или измененных в сеансе Spark, задав следующую конфигурацию сеанса Spark:

SET spark.microsoft.delta.targetFileSize.adaptive.enabled = TRUE

При включении размер адаптивного целевого файла вычисляется и устанавливается в следующих сценариях:

  • CREATE TABLE AS SELECT и CREATE OR REPLACE TABLE AS SELECT операции
  • Перезапись записей (например, DataFrame.write.mode("overwrite") или INSERT OVERWRITE)
  • Записывает в режиме ErrorIfExists, Append или Ignore при создании новой таблицы
  • В начале OPTIMIZE команды

После установки идеальный размер продолжает повторно оцениваться в начале каждой OPTIMIZE операции, чтобы гарантировать, что текущие эвристики отражают последнее распределение данных и рост таблиц. Этот адаптивный подход автоматически обновляет целевой размер файла с течением времени, удаляя необходимость ручной настройки при сохранении запросов и производительности записи по мере роста данных. Если требуется заблокировать определенный размер, например, в сценариях гипер-тюнинга или тестирования, можно переопределить адаптивную настройку, явно задав свойство таблицы, определяемое пользователем delta.targetFileSize.

Вычисленное значение размера файла для адаптивного целевого объекта можно проверить, выполнив DESCRIBE DETAIL или DESCRIBE EXTENDED на таблице. Адаптивный вычисляемый размер хранится в виде строки байтов в свойстве delta.targetFileSize.adaptiveтаблицы. Это значение используется в качестве конфигурации максимального или целевого размера для оптимизации, автоматического сжатия и оптимизации записи. Минимальное значение, используемое связанными конфигурациями, вычисляется как половина delta.targetFileSize.adaptive.

Размер адаптивного целевого файла можно дополнительно настроить с помощью следующих конфигураций сеанса Spark:

Недвижимость Description Значение по умолчанию Конфигурация сеанса
minFileSize Указывает минимальный размер файла (нижняя граница) в виде строки байтов, которую адаптивный целевой размер файла используется при вычислении. Должно быть от 128 МБ до 1 ГБ. 128 м spark.microsoft.delta.targetFileSize.adaptive.minFileSize
maxFileSize Указывает максимальный размер файла (верхняя граница) в виде строки байтов, которую адаптивный размер целевого файла используется при вычислении. Должно быть от 128 МБ до 1 ГБ. 1024m spark.microsoft.delta.targetFileSize.adaptive.maxFileSize
stopAtMaxSize Когда true прекращает дальнейшие вычисления размера после достижения вычисленного целевого размера maxFileSize, это снижает нагрузку на оценку на очень больших таблицах. true spark.microsoft.delta.targetFileSize.adaptive.stopAtMaxSize

Замечание

С stopAtMaxSize включенным (по умолчанию) адаптивный целевой размер остается фиксированным по максимальному значению после достижения, избегая дополнительных вычислений. Если ваши таблицы могут уменьшиться после увеличения, установите это свойство на false, чтобы разрешить пересчет ниже максимального порога.

На графике ниже показана связь между размером таблицы и оптимальным размером файла «parquet». Для таблиц ниже 10 ГБ среда выполнения Fabric Spark оценивает целевой размер файла размером 128 МБ. По мере увеличения размера таблицы целевой размер файла масштабируется линейно, достигая до 1 ГБ для таблиц, превышающих 10 ТБ.

Диаграмма, иллюстрирующая связь между размером таблицы и оптимальным размером файла parquet.

Начиная с малого объема в 128 МБ и затем увеличивая размер файлов Parquet по мере роста таблицы, можно добиться каскадных преимуществ.

  • Улучшено пропускание файлов Delta: Правильный размер файла поддерживает оптимальную кластеризацию данных и пропуск, позволяя протоколу пропуска файлов Delta обходить больше неуместных файлов во время выполнения запроса. Небольшая таблица с файлами размером 128 МБ вместо 1 ГБ позволяет увеличить возможность пропуска файлов в 8 раз.

  • Сокращение затрат на обновление: MERGE и UPDATE операции перезаписывают только затронутые файлы. Файлы соответствующего размера минимизируют количество затрагиваемых файлов при каждой операции, снижая объем перезаписываемых данных. Если векторы удаления включены, правильный размер файлов становится критически важным: гробовые камни на уровне строк в слишком крупных файлах приводят к значительным затратам на очистку данных во время операций сжатия или очистки.

  • Оптимизированный параллелизм: файлы с оптимальным размером позволяют Spark достичь идеального параллелизма задач. Слишком много небольших файлов перегружают планировщик; слишком мало больших файлов недоиспользуют пул Spark. Оптимальный размер максимизирует пропускную способность как чтения, так и записи.

Адаптивный размер целевого файла может повысить производительность сжатия на 30–60% и ускорить выполнение запросов и запись при выборе более оптимального размера файла, чем по умолчанию. Если адаптивная оценка дает тот же размер, что и конфигурация сеанса Spark по умолчанию, ожидаемые улучшения производительности отсутствуют.

Это важно

Старайтесь избежать амплификации записи. Амплификация записи происходит, когда уже сжатые файлы перезаписываются при увеличении адаптивного целевого размера файла по мере роста таблицы. Чтобы избежать амплификации записи, включите сжатие на уровне файлов. Эта функция предотвращает повторное ненужное сжатие файлов, которые уже были сжаты согласно предыдущим адаптивным целевым размерам. Дополнительные сведения см. в документации по целевым объектам сжатия на уровне файлов.

Сводка рекомендаций

  • Включите автоматическое сжатие для конвейеров приема данных с частыми небольшими записями (потоковая передача или микропакеты), чтобы избежать ручного планирования и обеспечить автоматическое сжатие файлов.
    • Для других шаблонов записи может быть полезно включить это как средство предосторожности от накапливания небольших файлов, но взвесьте, утоляют ли ваши цели уровня обслуживания данных дополнительные временные затраты на обработку.
  • Включите адаптивный размер целевого файла , чтобы удалить догадку вокруг оптимальных размеров целевых файлов.
  • Используйте оптимизацию записи в управляемых путях загрузки данных (пакетные задания, которые могут допускать перетасовку, секционирование сценариев или частые небольшие записи), чтобы снизить затраты на создание небольших файлов и сопутствующих затрат на обслуживание. Сжатие предварительной записи (оптимизация записи), как правило, будет менее затратным, чем сжатие после записи (оптимизация).
  • Запланируйте операции с полной таблицей OPTIMIZE во время тихих окон , когда необходимо перезаписать множество секций или запустить Z-Order.
  • Включите быструю оптимизацию, чтобы минимизировать амплификацию записи и повысить идемпотентность OPTIMIZE (см. быструю оптимизацию).
  • Используйте delta.targetFileSize или предпочтительно адаптивный размер целевого файла для поддержания согласованности значений целевого размера файлов в функциях макета данных и сеансах Spark.
  • Включите целевые объекты сжатия на уровне файлов , чтобы предотвратить увеличение объема записей по мере увеличения размера таблиц и использования более крупных целевых размеров файлов.