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


Преобразование внешней таблицы в управляемую таблицу каталога Unity

На этой странице описывается использование ALTER TABLE ... SET MANAGED команды для преобразования внешней таблицы в управляемую таблицу каталога Unity в Azure Databricks.

SET MANAGED обзор

Используйте функцию SET MANAGED для преобразования внешней таблицы в управляемую таблицу каталога Unity в Azure Databricks. Хотя вы также можете использовать CREATE TABLE AS SELECT(CTAS) для преобразования, Databricks рекомендует использовать SET MANAGED из-за следующих преимуществ:

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

Prerequisites

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

  • Все читатели и все, кто пишет во внешние таблицы, должны использовать доступ по именам. Рассмотрим пример.

    SELECT * FROM catalog_name.schema_name.table_name;
    

    Доступ по пути не поддерживается и может привести к ошибке после преобразования таблицы.

  • Для использования SET MANAGED или использования бессерверных вычислений необходимо использовать Databricks Runtime 17.0 или более поздней версии или UNSET MANAGEDбессерверные вычисления.

  • Чтобы преобразовать таблицы каталога Unity с поддержкой Айсберга (UniForm), необходимо использовать Databricks Runtime версии 17.2 или более поздней, либо бессерверные вычисления, чтобы использовать TRUNCATE UNIFORM HISTORY.

  • Средства чтения и записи Azure Databricks должны использовать Databricks Runtime 15.4 LTS или более поздней версии. Если ваши читатели или писатели используют 14.3 LTS или ниже, см. Альтернативный вариант для читателей и писателей в Databricks Runtime 14.3 LTS или ниже.

  • Команда SET MANAGED завершается ошибкой DELTA_TRUNCATED_TRANSACTION_LOG , если в таблице есть minReaderVersion=2, minWriterVersion=7и tableFeatures={..., columnMapping}. Вы можете проверить, есть ли в таблице эти свойства.DESCRIBE DETAIL

  • Внешние клиенты (не Databricks) должны поддерживать чтение из управляемых каталогом Unity таблиц. См. раздел "Чтение таблиц с клиентами Delta".

    • Используйте панель мониторинга Access Insights, чтобы определить, являются ли читатели и писатели, которые обращаются к вашим таблицам, пользователями Databricks Runtime или внешними пользователями, не использующими Databricks.

Important

Чтобы избежать конфликтов, отмените все существующие OPTIMIZE задания команд (жидкостная кластеризация, сжатие, ZORDER работа с таблицей) и не планируйте никаких заданий при преобразовании внешних таблиц в управляемые таблицы.

Преобразование из внешней в управляемую таблицу

Important

Команда SET MANAGED доступна в Databricks Runtime 17.0 или выше и бессерверных вычислениях.

Команда TRUNCATE UNIFORM HISTORY доступна в Databricks Runtime 17.2 или более поздней версии и бессерверных вычислений.

Выполните одну из следующих команд, чтобы преобразовать внешнюю таблицу каталога Unity в управляемую таблицу каталога Unity. Чтобы проверить, включены ли операции чтения Apache Iceberg (UniForm) в вашей таблице, см. Проверка включения операций чтения Iceberg (UniForm).

  • Для внешних таблиц каталога Unity без включенной функции считывания Apache Iceberg (UniForm):

    ALTER TABLE catalog.schema.my_external_table SET MANAGED;
    

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

  • Для внешних таблиц каталога Unity, в которых уже включено чтение с помощью технологии Iceberg (UniForm):

    ALTER TABLE catalog.schema.my_external_table SET MANAGED TRUNCATE UNIFORM HISTORY;
    

    Включите TRUNCATE UNIFORM HISTORY для обеспечения оптимальной производительности и совместимости таблиц. TRUNCATE UNIFORM HISTORY усекает только историю UniForm Iceberg и не удаляет историю Delta. Эта команда приводит к кратковременному простою операций чтения и записи для Iceberg после усечения.

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

Warning

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

После преобразования таблицы необходимо:

  • Перезапустите все задания потоковой передачи (чтение или запись) с помощью внешней таблицы. Это гарантирует, что задание избегает чтения или записи в старое расположение. Чтобы перезапустить, остановите текущее задание и запустите новое задание с той же конфигурацией.
  • Убедитесь, что читатели и записывающие работают с управляемой таблицей. Все читатели и писатели должны использовать доступ, основанный на именах, для автоматической работы с недавно преобразованной управляемой таблицей. Доступ на основе пути не поддерживается и может привести к ошибкам или повреждению данных.

Прогнозная оптимизация включена автоматически, за исключением случаев, если вы отключили ее вручную. Проверьте, включена ли прогнозная оптимизация.

При включенной прогнозной оптимизации Azure Databricks автоматически удаляет данные во внешнем расположении каталога Unity через 14 дней. Если прогнозная оптимизация отключена, можно выполнить VACUUM (требуется Databricks Runtime 17.0 или выше или бессерверные вычисления) в только что преобразованной управляемой таблице после 14 дней.

VACUUM my_converted_table

Note

В некоторых случаях данные во внешнем расположении каталога Unity могут не удаляться через 14 дней, даже при включенной прогнозной оптимизации. Например, если управляемая таблица каталога Unity часто не используется или очень мала, автоматическое удаление может не произойти. В этих случаях после 14 дней вручную запустите VACUUM (требуется среда выполнения Databricks 17.0 или более поздней или бессерверная) в только что преобразованной управляемой таблице для удаления старых данных.

Azure Databricks удаляет только данные во внешнем расположении. Журнал транзакций Delta и ссылка на таблицу в каталоге Unity хранятся.

Проверка преобразования

Вы можете убедиться, что внешняя таблица была преобразована в управляемую таблицу:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Проверьте выходные данные этой команды, чтобы убедиться, что таблица преобразована. Таблица Type должна отображаться как MANAGED.

Если вы просматриваете сведения о таблице в обозревателе каталогов, обновите страницу. На вкладке "Сведения" в разделе "О этой таблице" тип таблицы должен отображаться как MANAGED.

Альтернативный вариант для пользователей и авторов на Databricks Runtime 14.3 LTS или более ранних версиях

Databricks рекомендует обновить всех читателей и записывающие устройства до версии Databricks Runtime 15.4 LTS или более поздней, чтобы воспользоваться преимуществами команды SET MANAGED, включая возможность сохранения истории таблиц.

Вы по-прежнему можете использовать команду SET MANAGED, если у вас есть средства чтения или записи с Databricks Runtime 14.3 или ниже. Однако после преобразования в управляемую таблицу нельзя перемещать время в исторические фиксации по метке времени. Это можно сделать только по версии. Если вы вернетесь к внешней таблице в течение 14-дневного окна, возможность возвращения к историческим фиксациям, сделанным до преобразования, будет повторно включена.

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

Запись в таблицу после преобразования с помощью Databricks Runtime 15.4 LTS или более ранних версий требует удаления функции inCommitTimestamp:

ALTER TABLE <table_name> DROP FEATURE inCommitTimestamp;

Устранение неполадок преобразования

В этом разделе описываются распространенные проблемы при преобразовании внешних таблиц в управляемые таблицы каталога Unity и их устранение.

Согласованность версий среды выполнения Databricks

Избегайте выполнения или повторных попыток преобразования одной таблицы с использованием разных версий среды выполнения Databricks. Метаданные можно сериализовать по-разному в разных версиях, что приводит к сбою VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED . Если преобразование завершается ошибкой, всегда повторите попытку с использованием той же версии Databricks Runtime.

Завершение работы кластера во время преобразования

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

Поврежденная внешняя таблица

Если внешняя таблица уже повреждена (например, недопустимое состояние таблицы), преобразование может завершиться ошибкой, например DELTA_TRUNCATED_TRANSACTION_LOG, DELTA_TXN_LOG_FAILED_INTEGRITYили DELTA_STATE_RECOVER_ERRORS. Перед попыткой преобразования убедитесь, что вы можете выполнять основные операции во внешней таблице, например DESCRIBE DETAIL.

Откат к внешней таблице

Important

Команда UNSET MANAGED доступна в Databricks Runtime 17.0 или выше и бессерверных вычислениях.

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

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

Через семь дней после отката данных Azure Databricks автоматически удаляет данные в управляемом месте хранения.

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

ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED

Если команда отката прервана, ее можно повторно запустить, чтобы повторить попытку, аналогичную команде SET MANAGED.

Проверка отката

Вы можете проверить, что ваше преобразование было отменено:

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Проверьте выходные данные этой команды, чтобы убедиться, что таблица была откатена. Таблица Type должна отображаться как EXTERNAL.

Если вы просматриваете сведения о таблице в обозревателе каталогов, обновите страницу. На вкладке "Сведения" в разделе "О этой таблице" тип таблицы должен отображаться как EXTERNAL.

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

Время простоя и время копирования данных

Команда SET MANAGED сводит к минимуму или устраняет время простоя по сравнению с альтернативными методами, такими как использование DEEP CLONE. Процесс преобразования использует двухфакторный подход для минимизации простоя:

  1. Начальная копия данных (без простоя): на этом первом шаге данные таблицы и журнал транзакций Delta копируются из внешнего расположения в управляемое расположение. Читатели и записи продолжают работать в обычном режиме с внешним расположением, не влияя на текущие операции.
  2. Переключение на управляемое расположение (краткое время простоя): во время этого второго шага фиксации, сделанные во внешнее расположение во время первого шага, перемещаются в управляемое расположение. Кроме того, метаданные таблицы обновляются, чтобы зарегистрировать новое управляемое расположение таблицы. На этом шаге все операции записи на внешние носители временно блокируются (не ставятся в очередь и не повторяются), что приводит к простой во время записи. Пользователи на Databricks Runtime 16.1 или более поздней версии не испытывают простоя, но пользователи на Databricks Runtime 15.4 могут столкнуться с простоем.

Предполагаемое время простоя:

Размер таблицы Рекомендуемый размер кластера Время копирования данных Время простоя чтения и записи
100 ГБ или меньше 32-ядерный / DBSQL малый ~6min или меньше ~1-2min или меньше
1 TБ 64-ядро / среда DBSQL ~30 мин ~1-2min
10 ТБ 256-ядерный / DBSQL x-large ~1,5 ч ~1-5min

По оценкам, предполагается, что пропускная способность составляет 0,5–2 ГБ/ядро ЦП/минуту.

Note

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

Известные ограничения

Преобразование внешних в управляемые таблицы имеет следующие ограничения:

  • Клиенты потоковой передачи: после преобразования необходимо перезапустить все задания потоковой передачи.

  • Ограничения журнала таблиц после отката: для средств чтения и записи в Databricks Runtime 15.4 LTS или более поздней версии журнал таблиц для фиксаций, выполненных после преобразования, но до отката будет перемещаться по версии, но не по метке времени.

  • Ограничения Delta Sharing: Команда SET MANAGED не полностью совместима с Delta Sharing. Хотя открытый доступ Delta Sharing работает как положено, обмен данных между Databricks и Databricks не обновляет автоматически управляемое расположение таблицы получателей. Получатель продолжает читать из старого расположения, пока таблица не будет повторно получена. Чтобы повторно предоставить общий доступ к таблице, выполните следующие действия.

    ALTER SHARE <share_name> REMOVE TABLE <table_name>;
    ALTER SHARE <share_name> ADD TABLE <table_name> AS <table_share_name> WITH HISTORY;
    
  • Несколько облачных регионов: если управляемое расположение каталога Unity по умолчанию в хранилище метаданных, каталоге или схеме находится в другом облачном регионе, отличном от места хранения преобразованной внешней таблицы, вы можете занести дополнительные затраты на передачу данных между регионами. Поставщик облачных служб накладывает эти расходы за пределы контроля Databricks.

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

    DESC SCHEMA EXTENDED <catalog_name>.<schema_name>;
    
    DESC CATALOG EXTENDED <catalog_name>;
    
    SELECT * FROM system.information_schema.metastores;