Что такое векторы удаления?
Векторы удаления — это функция оптимизации хранилища, которая можно включить в таблицах Delta Lake. По умолчанию при удалении одной строки в файле данных необходимо перезаписать весь файл Parquet, содержащий запись. Если векторы удаления включены для таблицы, DELETE
, UPDATE
и MERGE
операции удаления используют векторы удаления, чтобы пометить существующие строки как удаленные или измененные без перезаписи файла Parquet. Последующие операции чтения в таблице обновляют текущее состояние таблицы, применяя удаления, указанные векторами удаления, к наиболее актуальной версии таблицы.
Databricks рекомендует использовать Databricks Runtime 14.3 LTS и более поздних версий для записи таблиц с векторами удаления для использования всех оптимизаций. Таблицы можно считывать с векторами удаления, включенными в Databricks Runtime 12.2 LTS и выше.
В Databricks Runtime 14.2 и более поздних версиях таблицы с векторами удаления поддерживают параллелизм на уровне строк. См. статью "Конфликты записи с параллелизмом на уровне строк".
Примечание.
Фотон использует векторы удаления для прогнозных обновлений ввода-вывода, ускорения DELETE
и MERGE
UPDATE
операций. Все клиенты, поддерживающие чтение векторов удаления, могут считывать обновления, создающие векторы удаления, независимо от того, были ли созданы эти обновления прогнозным вводом-выводом. См. статью "Использование прогнозного ввода-вывода" для ускорения обновлений.
Включение векторов удаления
Внимание
Параметр администратора рабочей области определяет, будут ли векторы удаления автоматически включены для новых таблиц Delta. См. векторы автоматического включения удаления.
Если используется параметр рабочей области для управления автоматическим включением векторов удаления, то в зависимости от параметра, выбранного для типов таблиц, векторы удаления включены по умолчанию при создании новой таблицы с помощью хранилища SQL или Databricks Runtime 14.1 или более поздней версии. Векторы удаления не включены по умолчанию при создании материализованных представлений или таблиц потоковой передачи и должны быть включены вручную при создании материализованного представления или таблицы потоковой передачи.
Чтобы вручную включить поддержку векторов удаления в таблице или представлении, используйте свойство таблицы delta.enableDeletionVectors
. Вы можете вручную включить векторы удаления в разностной таблице при создании или изменении таблицы. Вы можете вручную включить векторы удаления в материализованном представлении или таблице потоковой передачи только при создании материализованного представления или потоковой таблицы. Инструкцию ALTER
нельзя использовать для включения векторов удаления в материализованном представлении или потоковой таблице.
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
Предупреждение
При включении векторов удаления протокол таблицы обновляется. После обновления таблица не будет читаема клиентами Delta Lake, которые не поддерживают векторы удаления. См. статью Как Azure Databricks управляет совместимостью функций Delta Lake?.
В Databricks Runtime 14.1 и более поздних версиях можно удалить функцию таблицы векторов удаления, чтобы обеспечить совместимость с другими клиентами Delta. См. функции таблицы Drop Delta.
Применение изменений к файлам данных Parquet
Векторы удаления обозначают изменения строк как мягкие удаления, логически изменяющие существующие файлы данных Parquet в таблице Delta Lake. Эти изменения применяются физически, когда одно из следующих событий приводит к перезаписи файлов данных:
- Команда
OPTIMIZE
выполняется на таблице. - Автоматическое сжатие активирует перезапись файла данных с вектором удаления.
-
REORG TABLE ... APPLY (PURGE)
запускается в отношении таблицы.
События, связанные с сжатием файлов, не имеют строгих гарантий для разрешения изменений, записанных в векторах удаления, и некоторые изменения, записанные в векторах удаления, могут не применяться, если целевые файлы данных не будут кандидатами на сжатие файлов.
REORG TABLE ... APPLY (PURGE)
перезаписывает все файлы данных, содержащие записи с изменениями, записанными с помощью векторов удаления. См. REORG TABLE.
Примечание.
Измененные данные могут по-прежнему существовать в старых файлах. Вы можете запустить VACUUM для физического удаления старых файлов.
REORG TABLE ... APPLY (PURGE)
создает новую версию таблицы после его завершения. Это время завершения является меткой времени, которую необходимо учитывать при определении порога хранения для операции VACUUM
, чтобы полностью удалить удаленные файлы. См. Удаление неиспользуемых файлов данных с помощью вакуума.
Совместимость с клиентами Delta
Azure Databricks использует векторы удаления для прогнозирования операций ввода-вывода для обновлений вычислений с поддержкой Photon. См. статью "Использование прогнозного ввода-вывода" для ускорения обновлений.
Поддержка использования векторов удаления для операций чтения и записи зависит от клиента.
В следующей таблице указаны необходимые версии клиента для чтения и записи разностных таблиц с включенными векторами удаления и указывают, какие операции записи используют векторы удаления:
Клиент | Запись векторов удаления | Чтение векторов удаления |
---|---|---|
Databricks Runtime с photon | Поддерживает MERGE и UPDATE DELETE использует Databricks Runtime 12.2 LTS и более поздних версий. |
Требуется Databricks Runtime 12.2 LTS или более поздней версии. |
Среда выполнения Databricks без фотона | Поддерживает DELETE использование Databricks Runtime 12.2 LTS и более поздних версий. Поддерживает UPDATE использование Databricks Runtime 14.1 и более поздних версий. Поддерживает MERGE использование Databricks Runtime 14.3 LTS и более поздних версий. |
Требуется Databricks Runtime 12.2 LTS или более поздней версии. |
OSS Apache Spark с OSS Delta Lake | Поддерживает DELETE использование OSS Delta 2.4.0 и более поздних версий. Поддерживает UPDATE использование OSS Delta 3.0.0 и более поздних версий. |
Требуется OSS Delta 2.3.0 или более поздней версии. |
Получатели Delta Sharing | Запись данных не поддерживается в таблицах Delta Sharing | Databricks: требуется DBR 14.1 или более поздней версии. Apache Spark с открытым кодом: требуется delta-sharing-spark 3.1 или более поздней версии. |
Примечание.
Сведения о поддержке других клиентов Delta см. в документации по интеграции OSS Delta Lake.
Ограничения
- UniForm не поддерживает векторы удаления.
- Инструкцию
нельзя использовать для создания файла манифеста для таблицы с файлами, использующими векторы удаления. Чтобы создать манифест, сначала запустите REORG TABLE ... выражение APPLY (PURGE), а затем запустите выражение GENERATE
. При отправке инструкции необходимо убедиться, что при отправке инструкцииREORG
не выполняются параллельные операции записи. - Невозможно добавочно создавать файлы манифеста для таблицы с включенными векторами удаления (например, задав свойство таблицы
delta.compatibility.symlinkFormatManifest.enabled=true
). - Если включить векторы удаления в материализованном представлении или таблице потоковой передачи и впоследствии отключить векторы удаления, будущие записи в представление или таблицу не будут использоваться векторами удаления, но существующие векторы удаления не удаляются.
- Невозможно понизить протокол таблицы после включения векторов удаления в материализованном представлении или таблице стриминга. После включения функция таблицы для векторов удаления не может быть удалена, даже если впоследствии вы отключаете векторы удаления в представлении или таблице.
- Вы не можете запустить
REORG
на материализованных представлениях или таблицах потоковой передачи для фиксации изменений, записанных в векторах удаления, в файлы данных Parquet, поддерживающих эти объекты. Из-за этого ограничения не используйте векторы удаления для материализованных представлений или потоковых таблиц, если необходимо гарантировать полное удаление записей (например, для соответствия GDPR или CCPA).