Удалите функцию таблицы Delta Lake и понизьте версию протокола таблицы.

В Databricks Runtime 16.4 LTS и более поздних версиях DROP FEATURE удаляет функциональную возможность таблицы Delta Lake и понижает версию протокола таблицы до минимальной версии, поддерживающей оставшиеся функциональные возможности. Используйте это только для восстановления совместимости с более ранними версиями Databricks Runtime, OpenSharing или внешними клиентами Delta Lake.

Не все функции можно удалить. См. сведения о поддерживаемых функциях таблицы.

Note

Поддержка прежних версий DROP FEATURE доступна начиная с Databricks Runtime 14.3 LTS. Databricks рекомендует использовать Databricks Runtime 16.3 и более поздних версий для всех DROP FEATURE команд, которые заменяют устаревшее поведение. Для документирования устаревших функций см. раздел "Особенности таблицы Delta (устаревшая версия)".

Удаление функции Delta Lake

Important

Все DROP FEATURE операции конфликтуют со всеми параллельными операциями записи.

Потоковое чтение завершается сбоем при обнаружении коммита, который изменяет метаданные таблицы. Необходимо перезапустить затронутые потоки. Рекомендуемые методы см. в разделе "Производственные соображения для структурированной потоковой передачи".

Необходимо использовать Databricks Runtime версии 16.3 или выше и иметь привилегии MODIFY для целевой таблицы Delta Lake. Вы можете удалить только одну функцию таблицы с каждой DROP FEATURE командой.

Чтобы удалить функцию таблицы, используйте следующий синтаксис:

ALTER TABLE <table-name> DROP FEATURE <feature-name>

Дополнительные сведения см. в статье ALTER TABLE.

Behavior

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

  • Отключите свойства таблицы, использующие функцию таблицы.
  • Перезапишите базовые файлы данных по мере необходимости, чтобы удалить все следы функции таблиц в текущей версии таблицы.
  • Создайте набор защищенных контрольных точек, которые позволяют клиентам читателя правильно читать журнал таблиц.
  • Добавьте функцию checkpointProtection записи таблицы в протокол таблицы.
  • Понижение уровня протокола таблицы до самых низких версий средства чтения и записи, которые поддерживают все остальные функции таблицы. См. самый низкий возможный протокол.

Функция checkpointProtection таблицы

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

После отката таблица не требует от клиентов поддержки исключённой возможности. Защищенные контрольные точки и checkpointProtection функция выполняют следующие действия:

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

Хотя вы можете удалить только одну функцию таблицы с каждой DROP FEATURE командой, таблица может иметь несколько защищенных контрольных точек и удаленных функций в журнале таблиц.

Все версии среды выполнения Databricks поддерживают функцию checkpointProtection таблицы, что означает, что эта функция таблицы не блокирует операции чтения или записи в Azure Databricks.

checkpointProtection не блокирует доступ на чтение со стороны клиентов OSS Delta Lake. Чтобы полностью уменьшить уровень таблицы и удалить функцию checkpointProtection таблицы, необходимо использовать TRUNCATE HISTORY. Databricks рекомендует использовать этот шаблон только в том случае, если вам нужно записывать данные в таблицы с помощью внешних клиентов Delta, которые не поддерживают checkpointProtection. См. Полное понижение протоколов таблиц для устаревших клиентов.

Поддерживаемые функции таблицы

Вы можете удалить следующие функции таблицы Delta Lake:

Вы не можете удалить другие функции таблицы Delta Lake.

Important

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

Рассмотрим следующее:

  • Удаление сопоставления столбцов из таблицы не удаляет случайные префиксы, используемые в именах каталогов для секционированных таблиц. См. Делятся ли Delta Lake и Parquet стратегиями секционирования?.
  • Некоторые функции Delta Lake позволяют использовать несколько функций таблицы, которые зависят друг от друга, что может блокировать удаление зависимых функций. Вы не можете откатить функции, которые нельзя удалить.

Полностью понижение версий протоколов таблиц для устаревших клиентов

Если вы используете внешние клиенты Delta Lake для записи, не поддерживающие функцию таблицы checkpointProtection, необходимо использовать TRUNCATE HISTORY, чтобы полностью понизить версию протокола таблицы и удалить все следы удалённых функций таблицы. При выполнении TRUNCATE HISTORY удаляются все журналы таблиц старше 24 часов.

Databricks рекомендует проверить поведение по умолчанию для DROP FEATURE перед выполнением TRUNCATE HISTORY.

Для полного понижения версии требуется два шага с интервалом не менее 24 часов.

Шаг 1. Подготовка к удалению функции таблицы

Запустите команду ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY. Эта команда выполняет следующее:

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

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

Note

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

Шаг 2. Понижение уровня протокола и удаление функции таблицы

По крайней мере через 24 часа выполните ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY команду еще раз. Команда применяет следующее:

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

Important

При выполнении ALTER TABLE <table-name> DROP FEATURE <feature-name> TRUNCATE HISTORY удаляются все данные журнала транзакций старше 24 часов. После использования этой команды для понижения уровня протокола таблицы невозможно получить доступ к журналу таблиц или путешествию по времени.

См. сведения о совместимости функций Delta Lake и протоколах.