Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Файлы таблицы Delta со временем фрагментируются. Фрагментация увеличивает затраты на операции файлов, снижает эффективность сжатия и может ограничивать параллелизм чтения. Сжатие перезаписывает множество небольших файлов в меньшее количество файлов оптимального размера, чтобы Spark мог читать и обрабатывать данные более эффективно.
Команда OPTIMIZE является основной операцией сжатия. Он группирует небольшие файлы в ячейки, посвященные идеальному размеру файла, а затем записывает их в хранилище.
См. раздел "Обслуживание и оптимизация таблиц между рабочими нагрузками" для получения рекомендаций по стратегиям сжатия для различных типов рабочих нагрузок, таких как SQL Analytics Endpoint, Power BI Direct Lake и Spark.
Методы сжатия
Microsoft Fabric предлагает несколько подходов к поддержанию оптимальных размеров файлов в таблицах Delta:
Команда OPTIMIZE
Эта OPTIMIZE команда является базовой операцией для сжатия таблиц Delta. Он переформатирует небольшие файлы в большие, чтобы улучшить структуру данных в таблицах Delta.
| Недвижимость | Description | Значение по умолчанию | Конфигурация сеанса |
|---|---|---|---|
| minFileSize | Файлы, которые меньше этого порогового значения, группируются и перезаписываются в виде больших файлов. | 1073741824 (1g) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Целевой размер файла, созданный командой OPTIMIZE . |
1073741824 (1g) | spark.databricks.delta.optimize.maxFileSize |
OPTIMIZE является идемпотентным, но чрезмерно большой minFileSize может увеличить амплификацию записи. Например, если minFileSize задано значение 1 ГБ, файл размером 900 МБ может быть перезаписан после небольшой дополнительной записи. Инструкции по автоматическому управлению размером файлов см. в статье адаптивный размер целевого файла.
OPTIMIZE с упорядочением по Z-Order
При использовании ZORDER BY предложения перезаписывают активные файлы, OPTIMIZE чтобы строки с аналогичными значениями размещались в одних и тех же файлах. Это улучшает пропуск файлов для выборочных фильтров. Используйте Z-Order, когда:
- Ваши запросы часто фильтруются по двум или нескольким столбцам одновременно (например, дата и идентификатор клиента), и
- Эти предикаты достаточно выборочные, так что пропуск на уровне файлов снижает количество сканируемых файлов.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)
OPTIMIZE с системой V-Order
Клаузула VORDER приводит к тому, что файлы, подлежащие сжатию, подвергаются оптимизации V-Order. Дополнительные сведения о V-Order см. в подробной документации.
OPTIMIZE dbo.table_name VORDER
OPTIMIZE с кластеризацией жидкостей
Кластеризация liquid указывается как параметр таблицы; Дополнительные сведения см. в разделе "Включение кластеризации жидкости ". При включенной кластеризации жидкости, OPTIMIZE выполняет физическую перезапись, применяя политику кластеризации.
Это важно
Данные кластеризуются только при OPTIMIZE запуске на таблицах с поддержкой кластеризации. Обычные операции записи не кластерят данные. При наличии стратегии уплотнения, такой как использование автоматического уплотнения или ручное планирование заданий оптимизации, важно обеспечить реализацию преимуществ кластеризованных данных (например, улучшенное пропускание Delta-файлов).
Быстрая оптимизация
Быстрая оптимизация интеллектуально анализирует файлы таблиц Delta и пропускает операции сжатия, которые, скорее всего, не повышают производительность.
Вместо слепого сжатия файлов всякий раз, когда имеются небольшие файлы, оптимизация производительности оценивает, соответствует ли каждый контейнер кандидатов (группа небольших файлов) настраиваемым рекомендуемым стандартам сжатия. Быстрая оптимизация выполняет уплотнение только в группе файлов, если их объединение, вероятно, достигнет минимального целевого размера, или если слишком много небольших файлов. В противном случае она пропускает группу или уменьшает количество сжатых файлов.
Быстрая оптимизация может быть точно настроена в соответствии с вашими ожиданиями относительно сжатия:
| Недвижимость | Description | Значение по умолчанию | Конфигурация сеанса |
|---|---|---|---|
| minNumFiles | Количество небольших файлов, которые должны существовать в контейнере для выполнения оптимизации, если контейнер не содержит достаточно данных, чтобы, по оценкам, создать уплотненный файл. | 50 | spark.microsoft.delta.optimize.fast.minNumFiles |
| ParquetCoefficient | Умножено на минимальный размер файла в условиях оптимизации, чтобы определить минимальный объем данных небольшого файла, который должен существовать в контейнере для включения в область применения сжатия. | 1.3 | spark.microsoft.delta.optimize.fast.parquetCoefficient |
Замечание
parquetCoefficient Это приводит к тому, что целевой размер ячейки превышает минимальный целевой размер файла в контексте оптимизации. Этот коэффициент учитывает реальность, что объединение нескольких небольших файлов «parquet» улучшает сжатие и, следовательно, данных получается меньше, чем сумма небольших файлов. Это значение можно увеличить, чтобы более консервативно подходить к частоте пропуска контейнеров при быстром оптимизировании, или уменьшить, чтобы разрешить более свободное пропускание контейнеров.
Принцип работы
"Fast Optimize" вводит дополнительные проверки перед сжатием контейнеров. Для каждой ячейки кандидата выполняется быстрая оптимизация:
- Предполагаемый объем необработанных данных в ячейке (сумма небольших размеров файлов)
- Как оценивается объединение небольших файлов для создания собрания файла с настроенным минимальным целевым размером
- Содержит ли контейнер по крайней мере минимально настроенное количество небольших файлов
Быстрая оптимизация оценивает каждую ячейку небольших файлов и сжимает только небольшие файлы, которые, скорее всего, достигают минимального целевого размера или превышают минимальное число файлов. Контейнеры, которые не соответствуют этим пороговым значениям, пропускаются или частично сжимаются. Пропускание неоптимальных групп уменьшает ненужные перезаписи, снижает амплификацию записи и делает задания по оптимизации более идемпотентными.
Замечание
Точную реализацию можно развивать с течением времени.
Быстрая оптимизация может уменьшить количество перезаписанных данных в течение жизненного цикла Delta-таблицы. Как показано на следующей схеме, быстрая оптимизация пропускает неоптимальные ячейки, что приводит к более быстрым и идемпотентным OPTIMIZE заданиям с меньшим увеличением объема записи.
Замечание
В целях иллюстрации предполагается, что размер файла, написанного из сжатия, — это сумма размера небольших файлов. Это также подразумевает наличие parquetCoefficient равного 1.
Ограничения
- Неприменимо к операциям кластеризации жидкости и Z-Order
- Быстрая оптимизация не изменяет поведение автоматического сжатия
Целевые объекты сжатия на уровне файлов
Чтобы избежать перезаписи данных, которые ранее считались компактными (достаточно большими) на основе изменения целевых значений минимального и максимального размера файлов, spark.microsoft.delta.optimize.fileLevelTarget.enabled можно включить, чтобы предотвратить повторную компиляцию уже сжатых файлов. При включении файлы не перекомпактируются, если они ранее достигли как минимум половины целевого размера файла на момент предыдущей компактизации. Поддержание целевых объектов на уровне файлов минимизирует усиление записи по мере изменения целевого размера уплотнения с течением времени (например, в результате оценки и установки более крупного целевого размера адаптивным образом). Если включено, тег OPTIMIZE_TARGET_SIZE добавляется в новые файлы при выполнении команды OPTIMIZE или для любой операции записи, если задано свойство таблиц delta.targetFileSize или delta.targetFileSize.adaptive.
Замечание
Хотя она не включена по умолчанию, корпорация Майкрософт рекомендует включить целевые объекты сжатия на уровне файлов , чтобы ограничить потенциальное увеличение объема записи.
Автоматическое сжатие
Автоматическое сжатие оценивает работоспособности секций после каждой операции записи. При обнаружении чрезмерной фрагментации файлов (слишком большого количества небольших файлов) в секции он запускает синхронную OPTIMIZE операцию сразу после фиксации записи. Подход, управляемый писателем, к обслуживанию файлов является оптимальным, так как сжатие выполняется только при программном определении целесообразности.
Включение на уровне сеанса
Установите spark.databricks.delta.autoCompact.enabled на уровне сеанса, чтобы включить автоматическое сжатие для новых таблиц, создаваемых в этом сеансе Spark.
Включение на уровне таблицы
Задайте свойство delta.autoOptimize.autoCompact таблицы, чтобы включить автоматическое сжатие для определенных таблиц:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Используйте параметр delta.autoOptimize.autoCompact DataFrameWriter, чтобы включить автоматическое сжатие при создании таблицы:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Включите одно и то же свойство таблицы в существующей таблице:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Настройка пороговых значений автоматического сжатия
Настройте автоматическое сжатие, задав следующие конфигурации сеанса Spark:
| Недвижимость | Description | Значение по умолчанию | Конфигурация сеанса |
|---|---|---|---|
| maxFileSize | Максимальный размер целевого файла в байтах для сжатых файлов. | 134217728b (128 МБ) | spark.databricks.delta.autoCompact.maxFileSize |
| minFileSize | Минимальный размер файла в байтах для файла, который следует считать компактным. Все, что находится ниже этого порога, рассматривается для уплотнения и учитывается в пределах порогового minNumFiles значения. |
По умолчанию значение не задано и вычисляется как 1/2 от maxFileSize, если вы явно не зададите значение. |
spark.databricks.delta.autoCompact.minFileSize |
| minNumFiles | Минимальное количество файлов, которое должно существовать ниже порогового значения, чтобы инициировать автоматическое minFileSize сжатие. |
50 | spark.databricks.delta.autoCompact.minNumFiles |
Выбор между автоматическим сжатием и оптимизацией по расписанию
Корпорация Майкрософт рекомендует автоматическое сжатие в качестве стратегии по умолчанию для большинства рабочих нагрузок приема. Она часто превосходит фиксированные расписания и помогает снизить операционные издержки на обслуживание OPTIMIZE заданий.
Если у вас строгие требования к задержке, то использование запланированных OPTIMIZE в отдельном пуле Spark может быть более подходящим вариантом, так как процесс автоматического уплотнения выполняется синхронно сразу после записи.
Используйте сжатие вместе с функциями предотвращения небольших файлов, такими как оптимизация записи. Инструкции см. в разделе "Оптимизация записи".
Обслуживание таблиц в системе Lakehouse
Вы можете выполнять нерегламентированные операции обслуживания, например OPTIMIZE из Lakehouse Explorer. Дополнительные сведения см. в разделе "Обслуживание таблиц Lakehouse".
Сводка рекомендаций
Используйте эти рекомендации, чтобы сбалансировать затраты на запись, производительность чтения и затраты на обслуживание для сжатия таблиц Delta.
- Enable Auto compaction для конвейеров приёма данных с частыми небольшими записями (потоковой или микро-пакетной обработкой), чтобы уменьшить количество ручных настроек.
- Используйте автоматическое сжатие выборочно для других шаблонов записи , когда цели уровня обслуживания могут допускать случайные пики задержки записи.
-
Запланируйте перепись всей таблицы
OPTIMIZEв период низкой активности, когда необходимо перезаписать множество разделов или применить Z-Order. -
Включите быструю оптимизацию, чтобы уменьшить усиление записи и сделать
OPTIMIZEболее идемпотентным. - Включите целевые объекты сжатия на уровне файлов , чтобы уменьшить ненужный перекомпактирование по мере увеличения размера целевых файлов с течением времени.
- Используйте оптимизацию записи в подходящих каналах приема данных, так как предварительная компакция при записи часто менее затратна, чем компакция после записи. Инструкции см. в разделе "Оптимизация записи".