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


Поддержка архивации в Azure Databricks

Внимание

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

Поддержка архивации в Azure Databricks представляет коллекцию возможностей, которые позволяют использовать политики жизненного цикла на основе облака в облачном хранилище объектов, содержащее delta tables.

Внимание

Azure Databricks поддерживает архивацию только для Архива Azure. Ознакомьтесь с документацией Azure по оптимизации затрат с помощью управления жизненным циклом.

Почему следует включить поддержку архивации?

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

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

Все запросы, требующие данных в архивированных файлах, завершаются сбоем.

Внимание

Azure Databricks никогда не возвращает результаты для запросов, требующих архивных файлов для возврата правильного результата.

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

Включение поддержки архивации для table в Azure Databricks не создает или не изменяет политики жизненного цикла, определенные для облачного хранилища объектов. Для требуемых результатов политика жизненного цикла облака и delta.timeUntilArchived параметр должны быть равными.

Запросы, оптимизированные для архивных данных

Поддержка архивации в Azure Databricks оптимизирует следующие запросы к Delta tables:

Query Новое поведение
SELECT * FROM <table_name> LIMIT <limit> [WHERE <partition_predicate>] Автоматически игнорировать архивированные файлы и возвращать результаты из данных в неархивированном уровне хранилища.
Команды обслуживания Delta Lake: OPTIMIZE, ZORDER, ANALYZEPURGE Автоматически игнорировать архивированные файлы и выполнять обслуживание в остальной части table.
Инструкции DDL и DML, которые перезаписывают данные или удаляют данные, включая следующие: REPLACE TABLE, , INSERT OVERWRITETRUNCATE TABLEDROP TABLE Пометьте записи журнала транзакций для целевых архивированных файлов данных как удаленные.
FSCK REPAIR TABLE Игнорировать архивные файлы и проверять только файлы, которые не достигли политики жизненного цикла.

См . ограничения.

Ранние сообщения об ошибках и ошибках

Для запросов, которые должны сканировать архивированные файлы, чтобы generate правильные результаты, настройка поддержки архивации для Delta Lake гарантирует следующее:

  • Запросы завершаются рано, если они пытаются получить доступ к архивным файлам, уменьшая объем вычислительных ресурсов и позволяя пользователям быстро адаптировать и повторно выполнять запросы.
  • Сообщения об ошибках сообщают пользователям о сбое запроса из-за попытки запроса получить доступ к архивным файлам.

Пользователи могут generate создать отчет о файлах, которые необходимо восстановить, с помощью синтаксиса SHOW ARCHIVED FILES. См. статью "Показать архивированные файлы".

Внимание

Если get ошибку Not enough files to satisfy LIMIT, table не хватает строк данных в неархивированных файлах, чтобы удовлетворить количество записей, указанных LIMIT. Уменьшите LIMIT предложение, чтобы найти достаточно неархивированных строк, чтобы соответствовать указанному.LIMIT

Включение поддержки архивации

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

ALTER TABLE <table_name> SET TBLPROPERTIES(delta.timeUntilArchived = 'X days');

Включение поддержки архивации эффективно сообщает Azure Databricks игнорировать файлы, которые старше указанного периода. Если этот параметр включен без политик жизненного цикла havingset для облачного хранилища объектов, Azure Databricks по-прежнему игнорирует файлы на основе указанного порогового значения, но данные не архивируются.

Delta Lake не взаимодействует напрямую с политиками управления жизненным циклом, настроенными в облачной учетной записи. Если вы update политику в облачной учетной записи, необходимо update ее в Delta table. См . раздел "Изменение правила перехода управления жизненным циклом".

Внимание

Поддержка архивации полностью зависит от совместимых вычислительных сред Azure Databricks и работает только для Delta tables. Настройка поддержки архивации не изменяет поведение, совместимость или поддержку в клиентах OSS Delta Lake или Databricks Runtime 12.2 LTS и ниже.

Отображение архивированных файлов

Чтобы определить файлы, которые необходимо восстановить для выполнения данного запроса, используйте SHOW ARCHIVED FILESследующий пример:

SHOW ARCHIVED FILES FOR table_name [ WHERE predicate ];

Эта операция возвращает URI для архивированных файлов в виде кадра данных Spark. Restore необходимые архивные файлы, приведенные в документированных инструкциях поставщика хранилища объектов. Сведения о том, как Azure Databricks проверяет восстановленные данные, см. в разделе "Как azure Databricks пример для восстановленных данных?".

Примечание.

Во время этой операции Delta Lake имеет доступ только к статистике данных, содержащейся в журнале транзакций. По умолчанию эти статистические данные собираются на первых 32 columns в table:

  • Минимальная values
  • Максимальное values
  • Число значений NULL
  • Общее количество записей

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

Update или удалить архивированные данные

Операция завершается ошибкой MERGEпри выполнении операции или UPDATEDELETEоперации, которая влияет на данные в архивных файлах. Для выполнения этих операций необходимо restore данные в уровень хранилища, поддерживающий быстрое извлечение. Используйте SHOW ARCHIVED FILES для определения файлов, которые необходимо restore.

Как пример Azure Databricks для восстановленных данных?

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

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

Ограничения

Применяются следующие ограничения:

  • Поддержка политик управления жизненным циклом не зависит от времени создания файла. Сюда входят политики на основе времени доступа и политики на основе тегов.
  • Нельзя использовать DROP COLUMN в table с архивными файлами.
  • REORG TABLE APPLY PURGE выполняет лучшие попытки, но работает только с файлами векторов удаления и ссылающимися на них файлами данных, которые не архивируются. PURGE не удается удалить архивные векторные файлы удаления.
  • Расширение правила перехода жизненного цикла приводит к неожиданному поведению. См . раздел "Расширение правила перехода жизненного цикла".

Изменение правила перехода управления жизненным циклом

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

Если интервал времени до начала архивации сокращен (меньше времени прошло с момента создания файла), поддержка архивирования для Delta table продолжает функционировать нормально после обновления параметра table.

Расширение правила перехода управления жизненным циклом

Если интервал времени перед расширением архивирования (чтобы добавить больше времени перед активацией архивации), обновление свойства delta.timeUntilArchived до нового значения может привести к ошибкам. Облачные providers не restore файлы из архивного хранилища при изменении политик хранения данных. Это означает, что файлы, которые ранее имеют право на архивацию, но теперь не считаются допустимыми для архивации, по-прежнему архивируются.

Внимание

Чтобы избежать ошибок, никогда не set свойству delta.timeUntilArchived значение больше фактического возраста последних архивированных данных.

Рассмотрим сценарий, в котором интервал времени для архивации изменяется с 60 дней до 90 дней:

  1. Все записи в диапазоне от 60 до 90 дней архивируются при изменении политики.
  2. В течение 30 дней новые файлы не архивируются (старые неархивированные файлы 60 дней старше, когда политика расширена).
  3. Через 30 дней политика жизненного цикла правильно описывает все архивные данные.

Параметр delta.timeUntilArchived отслеживает интервал времени создания файла set, записанный журналом транзакций Delta. У него нет явных знаний о базовой политике. В период задержки между старым пороговым значением архивации и новым пороговым значением архивации можно использовать один из следующих подходов, чтобы избежать запроса архивированных файлов:

  1. Параметр можно оставить delta.timeUntilArchived старым пороговым значением до тех пор, пока не пройдет достаточно времени для архивирования всех файлов.
    • После приведенного выше примера каждый день в течение первых 30 дней стоимость данных будет считаться архивирована Azure Databricks, но по-прежнему должна быть архивирована поставщиком облачных служб. Это не приводит к ошибке, но игнорирует некоторые файлы данных, которые могут быть запрошены.
    • Через 30 дней update перейдет с delta.timeUntilArchived на 90 days.
  2. Вы можете изменять параметр update на delta.timeUntilArchived каждый день, чтобы отразить текущий интервал в течение периода задержки.
    • Хотя облачная политика составляет от set до 90 дней, фактический возраст архивированных данных изменяется в режиме реального времени. Например, через 7 дней параметр delta.timeUntilArchived точно 67 days отражает возраст всех архивированных файлов данных.
    • Этот подход необходим только в том случае, если необходимо получить доступ ко всем данным на горячих уровнях.

Примечание.

Обновление значения delta.timeUntilArchived не изменяет, какие данные архивируются. Он изменяет только данные Azure Databricks, как если бы он был архивирован.