Поделиться через


Удаление неиспользуемых файлов данных с помощью VACUUM

Прогнозная оптимизация автоматически выполняется VACUUM в управляемых таблицах каталога Unity. Databricks рекомендует включить прогнозную оптимизацию для всех управляемых таблиц каталога Unity, чтобы упростить обслуживание данных и сократить затраты на хранение. См . статью "Прогнозная оптимизация" для Delta Lake.

Вы можете удалить файлы данных, на которые больше не ссылается разностная таблица, старше порогового значения хранения, выполнив VACUUM команду в таблице. Регулярное выполнение VACUUM важно для затрат и соответствия требованиям из-за следующих соображений:

  • Удаление неиспользуемых файлов данных снижает затраты на облачное хранилище.
  • Файлы данных, удаленные с помощью VACUUM записей, которые были изменены или удалены. Окончательное удаление этих файлов из облачного хранилища гарантирует, что эти записи больше не доступны.

Предостережения для вакуума

Порог хранения по умолчанию для файлов данных после выполнения VACUUM составляет 7 дней. Чтобы изменить это поведение, ознакомьтесь с разделом "Настройка хранения данных для запросов на поездки во времени".

VACUUM может оставить пустые каталоги после удаления всех файлов из них. Последующие VACUUM операции удаляют эти пустые каталоги.

Databricks рекомендует использовать прогнозную оптимизацию для автоматического запуска VACUUM для таблиц Delta. См . статью "Прогнозная оптимизация" для Delta Lake.

Некоторые функции Delta Lake используют файлы метаданных для маркировки данных как удаленных, а не перезаписи файлов данных. Эти удаления можно использовать для REORG TABLE ... APPLY (PURGE) фиксации этих удалений и перезаписи файлов данных. Чтобы принудительно перезаписать данные, см. статью "Очистка только метаданных".

Внимание

  • В Databricks Runtime 13.3 LTS и более поздних VACUUM версиях семантика для мелких клонов с управляемыми таблицами каталога Unity отличаются от других таблиц Delta. См. раздел " Вакуум" и "Каталог Unity" с мелкими клонами.
  • VACUUM Удаляет все файлы из каталогов, не управляемых Delta Lake, игнорируя каталоги, начиная с _ или .. Если вы храните дополнительные метаданные, такие как контрольные точки структурированной потоковой передачи в каталоге разностных таблиц, используйте имя каталога, например _checkpoints.
  • Возможность запроса версий таблиц старше срока хранения теряется после выполнения VACUUM.
  • Файлы журналов удаляются автоматически и асинхронно после операций контрольных точек и не управляются VACUUM. Хотя срок хранения файлов журнала по умолчанию составляет 30 дней, при выполнении VACUUM в таблице удаляются файлы данных, необходимые для перемещения по времени.

Примечание.

Если кэширование диска включено, кластер может содержать данные из файлов Parquet, которые были удалены с помощью VACUUM. Таким образом, можно запрашивать данные из предыдущих версий таблиц, файлы которых были удалены. Перезапуск кластера приведет к удалению кэшированных данных. См. раздел Настройка кэша диска.

Пример синтаксиса для вакуума

VACUUM eventsTable   -- vacuum files not required by versions older than the default retention period

VACUUM '/data/events' -- vacuum files in path-based table

VACUUM delta.`/data/events/`

VACUUM delta.`/data/events/` RETAIN 100 HOURS  -- vacuum files not required by versions more than 100 hours old

VACUUM eventsTable DRY RUN    -- do dry run to get the list of files to be deleted

Сведения о синтаксисе Spark SQL см. в разделе VACUUM.

Сведения о синтаксисе Scala, Java и Python см. в документации по API Delta Lake.

Примечание.

Используйте ключевое RETAIN слово, чтобы указать пороговое значение, используемое для определения необходимости удаления файла данных. Эта VACUUM команда использует это пороговое значение для того, чтобы вернуться к указанному времени и определить самую последнюю версию таблицы в данный момент. Delta сохраняет все файлы данных, необходимые для запроса этой версии таблицы и всех новых версий таблиц. Этот параметр взаимодействует с другими свойствами таблицы. Сведения о настройке хранения данных для запросов на поездки по времени.

Удаление метаданных только для принудительной перезаписи данных

Команда REORG TABLE предоставляет APPLY (PURGE) синтаксис для перезаписи данных для применения обратимых удалений. Обратимые удаления не перезаписывают данные или удаляют файлы данных, а используют файлы метаданных, чтобы указать, что некоторые значения данных изменились. См. таблицу REORG.

К операциям, которые создают обратимое удаление в Delta Lake, относятся следующие:

  • Удаление столбцов с включенным сопоставлением столбцов.
  • Удаление строк с включенными векторами удаления.
  • Любые изменения данных в кластерах с поддержкой Фотона при включении векторов удаления.

При включенном обратимом удалении старые данные могут оставаться физически в текущих файлах таблицы даже после удаления или обновления данных. Чтобы удалить эти данные физически из таблицы, выполните следующие действия.

  1. Запустите REORG TABLE ... APPLY (PURGE). После этого старые данные больше не присутствуют в текущих файлах таблицы, но они по-прежнему присутствуют в старых файлах, которые используются для перемещения по времени.
  2. Запустите VACUUM , чтобы удалить эти старые файлы.

REORG TABLE создает новую версию таблицы по завершении операции. Все версии таблицы в журнале до этой транзакции относятся к старым файлам данных. Концептуально это похоже на OPTIMIZE команду, в которой файлы данных перезаписываются, даже если данные в текущей версии таблицы остаются согласованными.

Внимание

Файлы данных удаляются только в том случае, если срок действия файлов истек в соответствии с периодом VACUUM хранения. Это означает, что VACUUM необходимо выполнить задержку после REORG истечения срока действия старых файлов. Срок хранения VACUUM может быть сокращен, чтобы сократить необходимое время ожидания, за счет уменьшения максимальной истории, которая сохраняется.

Какой размер кластера требуется вакуум?

Чтобы выбрать правильный размер VACUUMкластера, он помогает понять, что операция выполняется на двух этапах:

  1. Задание начинается с использования всех доступных узлов исполнителя для перечисления файлов в исходном каталоге параллельно. Этот список сравнивается со всеми файлами, на которые в настоящее время ссылается журнал транзакций Delta, чтобы определить, какие файлы нужно удалить. Водитель находится в бездействии в это время.
  2. Затем драйвер выдает команды удаления для каждого файла, который будет удален. Удаление файлов — это операция только драйвера, что означает, что все операции выполняются в одном узле, а рабочие узлы сидят бездействия.

Для оптимизации затрат и производительности Databricks рекомендует следующие задачи, особенно для длительных заданий вакуума:

  • Запустите вакуум в кластере с автоматическим масштабированием для 1–4 рабочих ролей, где у каждой рабочей роли есть 8 ядер.
  • Выберите драйвер в диапазоне от 8 до 32 ядер. Увеличьте размер драйвера, чтобы избежать ошибок без памяти (OOM).

Если VACUUM операции регулярно удаляют более 10 тысяч файлов или занимают более 30 минут времени обработки, возможно, потребуется увеличить размер драйвера или количество рабочих ролей.

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

Как часто следует запускать вакуум?

Databricks рекомендует регулярно работать VACUUM во всех таблицах, чтобы снизить затраты на хранилище облачных данных. Порог хранения по умолчанию для вакуума составляет 7 дней. Установка более высокого порогового значения дает доступ к большему журналу для таблицы, но увеличивает количество файлов данных, хранящихся и, в результате, увеличивает затраты на хранение от поставщика облачных служб.

Почему вы не можете очистить таблицу Delta с низким пороговым значением хранения?

Предупреждение

Рекомендуется установить интервал хранения не менее 7 дней, так как старые моментальные снимки и незафиксированные файлы могут по-прежнему использоваться параллельными операциями чтения или записи в таблице. Если VACUUM очистит активные файлы, параллельные модули чтения могут завершаться сбоем или, что еще хуже, таблицы могут быть повреждены, если VACUUM удаляет файлы, которые еще не были зафиксированы. Необходимо выбрать интервал, который больше, чем самая длинная параллельная транзакция, и самый длинный период, в течение которого любой поток может отставать от последнего обновления таблицы.

Delta Lake имеет проверку безопасности, чтобы предотвратить запуск опасной команды VACUUM. Если вы уверены, что для этой таблицы не выполняются никакие операции, превышающие указанный интервал хранения, можно отключить эту проверку безопасности, задав для свойства spark.databricks.delta.retentionDurationCheck.enabled конфигурации Spark значение false.

Данные аудита

Фиксации VACUUM в журнале транзакций Delta содержат данные аудита. События аудита можно запрашивать с помощью DESCRIBE HISTORY.