Удаление векторов в таблицах Delta ускорение операций в Databricks
Оптимизация операций в Databricks ускорение удаления векторов в таблицах Delta
Традиционно, Delta Lake поддерживает только парадигму Copy-On-Write, при которой базовые файлы данных изменяются каждый раз, когда файл был записан. Пример: Когда одна строка в файле удаляется, весь файл parquet должен быть перезаписан. Учитывая, что ваши данные разбросаны по нескольким файлам, и данные часто обновляются, такая парадигма не будет эффективной. Для таких требований, Databricks недавно выпустил новую функцию под названием Deletion Vectors. В этой статье мы узнаем больше о Deletion Vectors, их использовании и о том, как их включить.
Deletion Vectors – это функция оптимизации хранения, которая может быть включена для таблиц Delta Lake. При включении deletion vectors в таблице вводится новая парадигма под названием «Merge on Read» в таблицы Delta Lake. Операции удаления и обновления используют deletion vectors для отметки существующих строк как удаленных или измененных, без перезаписи файла parquet. Последующие чтения таблицы разрешают текущее состояние таблицы, применяя удаления, отмеченные deletion vectors, к самой свежей версии таблицы.
Включение Deletion Vectors
Рекомендуется использовать версию Databricks runtime 14.1 или выше, чтобы писать таблицы с использованием deletion vectors и использовать все оптимизации. Даже если версия Databricks runtime 12.1 поддерживает чтение из таблиц с использованием deletion vectors, рекомендуется использовать версию 14.1+, так как она поддерживает запись и оптимизации. Более того, для включения многопоточности на уровне строк, мы можем начать использовать версию 14.2+.
- Бесконечные возможности прогнозирования в науке о данных
- Разработайте своего первого AI-агента глубокое Q-обучение
- Удивительное поведение данных в более высоких измерениях
Deletion vectors могут быть включены с помощью следующих команд:
CREATE TABLE <имя_таблицы> [опции] TBLPROPERTIES ('delta.enableDeletionVectors' = true);ALTER TABLE <имя_таблицы> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
Как происходит удаление в таблицах Delta с использованием deletion vectors?
Всякий раз, когда мы удаляем или обновляем запись в таблицах Delta, записи помечаются отдельно от самих файлов данных, эту операцию называют «soft deletion». Позиция удаленных строк кодируется в сильно сжатом формате битовой карты, RoaringBitmap, которая может быть отдельно сжата в файлы данных позже.
Эти изменения применяются физически, когда файлы данных перезаписываются, вызванные одним из следующих событий:
- Когда мы применяем команду OPTIMIZE к таблице.
- Автоматическая компактация вызывает перезапись файла данных с deletion vector.
- Выполняется команда
REORG TABLE ... APPLY (PURGE)
для таблицы.
События, связанные с компактацией файлов, не гарантируют строгое разрешение изменений, записанных в deletion vectors, и некоторые изменения, записанные в deletion vectors, могут не применяться, если целевые файлы данных иначе не должны быть кандидатами для компактации. Команда REORG TABLE ... APPLY (PURGE)
переписывает все файлы данных, содержащие записи с изменениями, записанными с использованием deletion vectors.
REORG TABLE —
Реорганизация таблицы Delta Lake путем перезаписи файлов для удаления данных, помеченных для удаления.
REORG TABLE имя_таблицы [WHERE предикат] APPLY (PURGE)
Пример:
REORG TABLE events APPLY (PURGE);REORG TABLE events WHERE date >= '2022-01-01' APPLY (PURGE);
Примечание:
- REORG TABLE перезаписывает только файлы, содержащие данные, помеченные для удаления.
- REORG TABLE идемпотентен, то есть если он запущен дважды для одного и того же набора данных, второй запуск не имеет эффекта.
- После выполнения REORG TABLE, данные, помеченные для удаления, могут все еще существовать в старых файлах. Мы можем запустить VACUUM для физического удаления старых файлов.
Примечание: Databricks использует deletion vectors для ускорения предсказательного ввода-вывода при обновлениях на компьютерах, работающих на основе фотонов. Смотрите официальную документацию – Использование предсказательного ввода-вывода для ускорения обновлений, чтобы узнать больше о предсказательном вводе-выводе.
Когда следует использовать векторы удаления?
С оптимизацией удаления векторов при выполнении операций удаления на таблицах, их можно рассматривать как очевидный выбор, но при использовании векторов удаления следует учитывать некоторые компромиссы –
- Частота записи и SLA задержки: Используйте векторы удаления при высокой частоте записи или при необходимости низкой задержки записи, особенно для небольших изменений данных, которые вызывают большую амплификацию записи в традиционном режиме копирования при записи. В случае низкой частоты записи с гибкими требованиями к задержке, векторы удаления могут быть не такими выгодными.
- Частота чтения и SLA задержки: Будьте осторожны с векторами удаления при ситуациях с высокой частотой чтения, поскольку накопленная стоимость дополнительного времени выполнения для обработки дополнительных файлов векторов удаления может накапливаться.
- Распределение данных и изменение распределения: Векторы удаления превосходят в ситуациях, когда изменения данных распределены по множеству файлов, делая амплификацию записи, которая связана с традиционным методом копирования при записи, чрезвычайно дорогой. Уделите особое внимание совпадающим предикатам для изменения данных. Библиотека Levi предоставляет вспомогательные методы для удобного доступа к статистике базовых файлов.
Ограничения:
Databricks рекомендует не включать векторы удаления для таблиц, используемых в потоковом режиме с помощью Databricks SQL или Delta Live Tables.
В Databricks Runtime 12.1 и выше существуют следующие ограничения:
- Delta Sharing не поддерживается для таблиц с включенными векторами удаления.
- Вы не можете создать файл манифеста для таблицы с присутствующими векторами удаления. Запустите
REORG TABLE ... APPLY (PURGE)
и убедитесь, что нет одновременно выполняющихся операций записи, чтобы сгенерировать манифест. - Вы не можете постепенно создавать файлы манифеста для таблицы с включенными векторами удаления.
Заключение:
Для меня это больше урок, когда я просматриваю все это, и то, что я делаю здесь, это не написание чего-либо, а просто ссылка на страницы Databricks и Delta. Они потрясающие. Спасибо, что делитесь ими для справки –
- https://delta.io/blog/2023-07-05-deletion-vectors/
- https://docs.databricks.com/en/delta/deletion-vectors.html
Счастливого обучения… Muttineni Sai Rohith Подпись…