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


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

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

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

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

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

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

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

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

Некоторые функции 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 table_name   -- vacuum files not required by versions older than the default retention period

VACUUM table_name RETAIN 100 HOURS  -- vacuum files not required by versions more than 100 hours old

VACUUM table_name 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 сохраняет все файлы данных, необходимые для запроса этой версии таблицы и всех новых версий таблиц. Этот параметр взаимодействует с другими свойствами таблицы. Сведения о настройке хранения данных для запросов на поездки по времени.

Полный и облегченный режимы

Внимание

Эта функция доступна в общедоступной предварительной версии в Databricks Runtime 16.1 и выше.

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

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

Примечание.

Выполнение VACUUM в режиме LITE не удаляет файлы, на которые нет ссылки в журнале транзакций. Например, файлы, созданные прерванной транзакцией.

Используйте следующий синтаксис для VACUUM в режиме LITE:

VACUUM table_name LITE

LITE режим имеет следующее требование:

  • Необходимо выполнить по крайней мере одну успешную операцию VACUUM в пределах заданного порога хранения журнала транзакций (по умолчанию — 30 дней).

Если это требование не выполняется, при попытке запустить VACUUM в режиме LITE отображается следующее сообщение об ошибке. Чтобы продолжить, необходимо запустить VACUUM в режиме FULL.

VACUUM <tableName> LITE cannot delete all eligible files as some files are not referenced by the Delta log. Please run VACUUM FULL.

режим FULL используется по умолчанию для вакуума. Вы можете явно запустить полный режим с помощью следующей команды:

VACUUM table_name FULL

См. VACUUM.

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

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

К операциям, которые создают обратимое удаление в 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 значение spark.databricks.delta.retentionDurationCheck.enabled в false.

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

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