Удаление векторов в таблицах 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+.

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 для ускорения предсказательного ввода-вывода при обновлениях на компьютерах, работающих на основе фотонов. Смотрите официальную документацию – Использование предсказательного ввода-вывода для ускорения обновлений, чтобы узнать больше о предсказательном вводе-выводе.

Когда следует использовать векторы удаления?

С оптимизацией удаления векторов при выполнении операций удаления на таблицах, их можно рассматривать как очевидный выбор, но при использовании векторов удаления следует учитывать некоторые компромиссы –

  1. Частота записи и SLA задержки: Используйте векторы удаления при высокой частоте записи или при необходимости низкой задержки записи, особенно для небольших изменений данных, которые вызывают большую амплификацию записи в традиционном режиме копирования при записи. В случае низкой частоты записи с гибкими требованиями к задержке, векторы удаления могут быть не такими выгодными.
  2. Частота чтения и SLA задержки: Будьте осторожны с векторами удаления при ситуациях с высокой частотой чтения, поскольку накопленная стоимость дополнительного времени выполнения для обработки дополнительных файлов векторов удаления может накапливаться.
  3. Распределение данных и изменение распределения: Векторы удаления превосходят в ситуациях, когда изменения данных распределены по множеству файлов, делая амплификацию записи, которая связана с традиционным методом копирования при записи, чрезвычайно дорогой. Уделите особое внимание совпадающим предикатам для изменения данных. Библиотека Levi предоставляет вспомогательные методы для удобного доступа к статистике базовых файлов.

Ограничения:

Databricks рекомендует не включать векторы удаления для таблиц, используемых в потоковом режиме с помощью Databricks SQL или Delta Live Tables.

В Databricks Runtime 12.1 и выше существуют следующие ограничения:

  • Delta Sharing не поддерживается для таблиц с включенными векторами удаления.
  • Вы не можете создать файл манифеста для таблицы с присутствующими векторами удаления. Запустите REORG TABLE ... APPLY (PURGE) и убедитесь, что нет одновременно выполняющихся операций записи, чтобы сгенерировать манифест.
  • Вы не можете постепенно создавать файлы манифеста для таблицы с включенными векторами удаления.

Заключение:

Для меня это больше урок, когда я просматриваю все это, и то, что я делаю здесь, это не написание чего-либо, а просто ссылка на страницы Databricks и Delta. Они потрясающие. Спасибо, что делитесь ими для справки –

Счастливого обучения… Muttineni Sai Rohith Подпись…