Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Формат таблиц Lakehouse и Delta Lake является центральным для Microsoft Fabric. Оптимизация Delta-таблиц является ключевым фактором для повышения производительности и экономичности аналитических рабочих нагрузок.
В этой статье объясняется, когда стоит использовать V-Order, и показаны основные шаблоны настройки и обслуживания для таблиц Delta.
Используйте эту статью, чтобы:
- Поймите, какие изменения в V-Order происходят и в каких случаях это полезно.
- Узнайте, как Z-Order и V-Order дополняют друг друга.
- Выберите правильный уровень управления: сеанс, свойство таблицы или операцию записи.
- Применение шаблонов обслуживания таблиц Delta в правильном контексте среды выполнения Spark.
Рекомендации по применению V-Order в зависимости от сценариев потребления см. в разделе «Обслуживание и оптимизация таблиц при перекрёстных рабочих нагрузках».
Что такое V-Order?
V-Order — это оптимизация времени записи для файлов Parquet, которая может повысить производительность запросов в дальнейшем в ядрах Fabric.
На первый взгляд:
- Где это помогает в большинстве случаев: Шаблоны с большим объемом чтения, такие как панель мониторинга, интерактивная аналитика и повторяющиеся проверки.
- Как это помогает: Реорганизует макет Parquet (например, распределение строк, кодировку и сжатие) для повышения эффективности чтения.
- Типичный компромисс: Операции записи могут занять больше времени (часто около 15% в среднем), в то время как операции чтения могут значительно сократиться по времени в зависимости от рабочей нагрузки.
- Совместимость движка: Файлы остаются совместимыми со стандартом Parquet с открытым исходным кодом, а функции Delta, такие как Z-Order, остаются совместимыми.
- Область применения: V-Order имеет уровень файла. Операции Delta, такие как сжатие, вакуум и перемещение во времени, могут использоваться с ним.
Управление записью V-Order
V-Order используется для оптимизации макета файла Parquet для повышения производительности запросов, особенно в случаях с интенсивным чтением. В Microsoft Fabric V-Order по умолчанию отключен для всех вновь созданных рабочих областей для оптимизации производительности при нагрузках на разработку данных с интенсивной записью.
Поведение V-Order в Apache Spark управляется с помощью следующих конфигураций:
| Настройка | Значение по умолчанию | Описание |
|---|---|---|
spark.sql.parquet.vorder.default |
false |
Контролирует запись V-Order на уровне сеанса. Установите значение false по умолчанию в новых рабочих областях Fabric. |
TBLPROPERTIES("delta.parquet.vorder.enabled") |
Сбросить | Управляет поведением V-Order по умолчанию на уровне таблицы. |
Параметр записи кадра данных: parquet.vorder.enabled |
Сбросить | Используется для управления V-Order на уровне операции записи. |
Используйте следующие команды, чтобы включить или переопределить операции записи V-Order по мере необходимости для вашего сценария.
По умолчанию V-Order отключен в новых рабочих пространствах Fabric (spark.sql.parquet.vorder.default=false), чтобы улучшить производительность записи в конвейерах приема и преобразования данных.
Для рабочих нагрузок с большим объемом чтения, таких как интерактивные запросы или панель мониторинга, включите V-Order, установив для spark.sql.parquet.vorder.defaultпараметра true значение . Вы также можете переключиться на профили readHeavyforSpark или ReadHeavy ресурсов, которые автоматически включают V-Order для улучшения производительности при чтении.
В среде выполнения Fabric 1.3 и более поздних версий spark.sql.parquet.vorder.enable параметр удаляется. Так как V-Order может применяться автоматически во время оптимизации Delta с OPTIMIZE, вам не нужен этот старый параметр. При миграции из более ранних версий среды выполнения удалите этот параметр из кода.
Проверка конфигурации V-Order в сеансе Apache Spark
Перед изменением используйте эти команды, чтобы подтвердить текущее значение сеанса.
%%sql
SET spark.sql.parquet.vorder.default
Отключение записи V-Order в сеансе Apache Spark
Используйте эти команды, если ваша рабочая нагрузка связана с высокой нагрузкой на запись, и требуется ускорить загрузку или преобразование данных.
%%sql
SET spark.sql.parquet.vorder.default=FALSE
Включение записи V-Order в сеансе Apache Spark
Если включить V-Order на уровне сеанса, все записи Parquet в этом сеансе используют V-Order, включая таблицы Parquet, не являющиеся Delta, и таблицы Delta, даже если parquet.vorder.enabled явно установлено в false.
%%sql
SET spark.sql.parquet.vorder.default=TRUE
Управление V-Order с помощью свойств таблицы Delta
В этом разделе используется Spark SQL только из-за того, что свойства таблицы определяются с помощью DDL и ALTER TABLE инструкций SQL.
Используйте свойства таблицы, если требуется значение по умолчанию уровня таблицы, которое применяется в сеансах.
Включите свойство таблицы V-Order во время создания таблицы:
%%sql
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
Если для свойства таблицы задано значение true, INSERT, UPDATE и MERGE, примените V-Order при записи. Параметры уровня сеанса и уровня записи по-прежнему имеют приоритет, поэтому записи по-прежнему могут использовать V-Order, даже если TBLPROPERTIES установлено в false.
Включите или отключите V-Order, изменив свойство таблицы:
%%sql
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "false");
ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.enabled");
После включения или отключения V-Order с помощью свойств таблицы затрагиваются только будущие записи в таблицу. Файлы Parquet сохраняют порядок расположения данных, который использовался при их создании. Чтобы изменить текущую физическую структуру для применения или удаления V-Order, см. как управлять V-Order при оптимизации таблицы.
Управление V-порядком непосредственно при операциях записи
В этом разделе используется PySpark для демонстрации API записи DataFrame. Тот же шаблон доступен в DataFrame API для Scala с эквивалентными опциями.
Используйте параметры записи, если требуется управление каждой операцией, вместо настройки по умолчанию на уровне сеанса или таблицы.
Все команды записи Apache Spark наследуют параметр сеанса, если он явно не переопределён. В следующих примерах запись производится с использованием V-Order, при этом наследуются параметры конфигурации сеанса.
df_source.write\
.format("delta")\
.mode("append")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.location("Files/people")\
.execute()
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-01-31'")\
.saveAsTable("myschema.mytable")
V-Order применяется только к файлам, затронутым предикатом.
В сеансе, где spark.sql.parquet.vorder.default не установлен или установлен как false, следующие команды записываются посредством V-Order:
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-01-31'")\
.option("parquet.vorder.enabled","true")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.option("parquet.vorder.enabled","true")\
.location("Files/people")\
.execute()
Что такое Optimize Write?
Аналитические рабочие нагрузки Spark обычно выполняются лучше, если размер файлов является более согласованным, а количество файлов меньше. Конвейеры передачи данных часто производят множество небольших файлов, что приводит к общей проблеме с небольшими файлами.
Оптимизация записи — это функция Delta Lake в Fabric и Synapse, которая уменьшает количество файлов и увеличивает отдельный размер файла во время записи в Apache Spark. Размер целевого файла можно изменить для каждой рабочей нагрузки с помощью конфигураций.
Эта функция включена по умолчанию в Microsoft Fabric Runtime для Apache Spark. Дополнительные сведения о сценариях оптимизации использования записи см. в статье Необходимость оптимизации записи в Apache Spark.
Оптимизация слияния
Delta Lake MERGE обновляет целевую таблицу из исходной таблицы, представления или кадра данных. В Delta Lake с открытым исходным кодом MERGE может тратиться лишняя работа на перетасовку неизменённых строк. Среда выполнения Fabric включает оптимизацию "Low Shuffle Merge", чтобы уменьшить накладные расходы.
Реализация управляется spark.microsoft.delta.merge.lowShuffle.enabled и включена по умолчанию во время выполнения. Он не требует изменений кода и остается совместимым с Delta Lake с открытым кодом. Дополнительные сведения см. в разделе Оптимизация слияния Low Shuffle в таблицах Delta.
Обслуживание таблиц Delta
По мере развития таблиц Delta производительность и эффективность хранения могут снизиться по нескольким причинам:
- Добавление новых данных в таблицу может исказить данные.
- Скорости приема данных в пакетном и потоковом режимах могут привести к образованию множества небольших файлов.
- Операции обновления и удаления увеличивают нагрузку на чтение, поскольку файлы Parquet неизменяемы, и Delta создает новые файлы для внесения изменений.
- Старые файлы данных и журналов могут накапливаться в хранилище.
Чтобы обеспечить работоспособность таблиц, регулярно используйте операции сжатия и очистки:
- OPTIMIZE выполняет уплотнение пакетов путем консолидации изменений в более крупные файлы Parquet.
- VACUUM удаляет файлы с потерянными ссылками из хранилища.
Подсказка
Используйте обслуживание таблиц Delta в Lakehouse для рабочего процесса обслуживания на основе портала, следуйте рекомендациям по мониторингу и рекомендациям по эксплуатации, ориентированным на хранение.
OPTIMIZE и VACUUM являются командами Spark SQL. Запустите их в:
- Ноутбуки Fabric со средой выполнения Spark.
- Определения заданий Spark.
- Управление Lakehouse в Обозревателе. См. сведения о обслуживании таблиц Delta Lake.
Эти команды не поддерживаются в конечной точке SQL Analytics или Warehouse SQL query editor, которая поддерживает только T-SQL. Для рабочих процессов конечной точки SQL используйте обслуживание таблиц Delta Lake или выполните команды в записной книжке Fabric.
Сначала создайте физическую структуру таблицы, основываясь на частоте загрузки и шаблонах чтения. Во многих рабочих нагрузках проектирование таблиц влияет больше, чем только команды оптимизации.
Управление порядком V-Order при оптимизации таблицы
Используйте эти команды, чтобы объединение и перезапись по порядку V происходили в рамках одной операции.
Z-Order и V-Order оптимизируют различные аспекты производительности чтения:
-
Z-Order (SQL
ZORDERключевое слово) группирует связанные значения для повышения эффективности пропуска данных при использовании выборочных фильтров. -
V-Order (ключевое слово
VORDERSQL) оптимизирует макет файла Parquet для повышения эффективности чтения в движках Fabric.
Если ваши запросы часто фильтруются с определёнными столбцами, Z-Order может помочь. Если ваша рабочая нагрузка в основном связана с операциями чтения, V-Order может помочь. Во многих случаях можно объединить оба.
Используйте это краткое руководство по принятию решений:
- Используйте
VORDERкогда вам нужно широкое улучшение производительности чтения в различных движках. - Для
ZORDER BY (...)используйте вместе сVORDER, когда запросы многократно фильтруют по известным столбцам и вы также хотите воспользоваться преимуществами макета V-Order.
Следующая команда формирует bin-compact и перезаписывает все затронутые файлы с помощью V-Order, независимо от TBLPROPERTIES параметров сеанса.
%%sql
OPTIMIZE <table|fileOrFolderPath> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER BY (col_name1, col_name2, ...)] VORDER;
Когда ZORDER и VORDER используются вместе в SQL, Apache Spark применяет сжатие ячеек, а затем Z-Order, а затем V-Order.
Следующие команды bin-compact перезаписывают все затронутые файлы с использованием TBLPROPERTIES. Если TBLPROPERTIES задано значение для включения V-Order, все затронутые файлы записываются с помощью V-Order. Если TBLPROPERTIES задано значение unset или задано false, поведение наследует параметр сеанса. Чтобы удалить V-Order из перезаписей таблиц, задайте для конфигурации сеанса значение false.
При выполнении этих команд в записных книжках Fabric включите пробел между %%sql и OPTIMIZE.
Правильный синтаксис:
%%sql
OPTIMIZE table_name;
Неправильный синтаксис: %%sqlOPTIMIZE table_name;
%%sql
OPTIMIZE <table|fileOrFolderPath>;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];
Используйте VACUUM для очистки данных и хранения.
Распространенный VACUUM сценарий — очистка на основе политики хранения. Используйте его, когда старые, нессылаемые файлы накапливались, и вы хотите освободить хранилище после обновлений, удаления или повторяющихся циклов загрузки.
Запускайте VACUUM только с окном хранения, которое соответствует вашим ожиданиям относительно возможности временного перемещения данных и их восстановления. Шаблон по умолчанию сохраняет семь дней истории.
В записных книжках Spark компактный VACUUM шаблон выглядит следующим образом:
%%sql
VACUUM schema_name.table_name;
VACUUM schema_name.table_name RETAIN 168 HOURS;
Поведение хранения данных и рекомендации по безопасности см. в команде VACUUM. Сведения о выполнении программного обслуживания на таблице Delta см. в разделе Запуск обслуживания таблицы.