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

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

SET MANAGED Обзор

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

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

Prerequisites

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

    SELECT * FROM catalog_name.schema_name.table_name;
    

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

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

  • Чтобы преобразовать таблицы каталога Unity с поддержкой операций чтения Iceberg (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 таблиц. См. таблицы Microsoft Access с клиентами Delta.

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

Important

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

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

Important

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

Обозреватель каталогов

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

  1. Перейдите в таблицу или схему, которую вы хотите преобразовать в обозревателе каталогов.

  2. В разделе "Сведения об этой таблице " (страница сведений о таблице) или "Сведения об этой схеме " (страница сведений о схеме) нажмите кнопку "Обзор оптимизаций".

  3. В диалоговом окне "Почему миграция в управляемые таблицы каталога Unity" нажмите кнопку "Продолжить".

    Диалоговое окно

  4. Выберите внешние таблицы, которые требуется преобразовать. Если вы открыли диалоговое окно на странице информации о таблице, ваша таблица уже выбрана. Используйте панель поиска для поиска дополнительных таблиц. Управляемые таблицы недоступны для выбора.

    Экран выбора таблицы с предварительно выбранной внешней таблицей и недоступной управляемой таблицей

  5. Нажмите Создать блокнот преобразования.

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

    Диалоговое окно создания блокнота преобразования с полем имени и кнопкой

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

  8. Запустите ячейку SET УПРАВЛЯЕМЫХ Запросов.

После запуска ячейки тип таблицы отображается как MANAGED вместо EXTERNAL в обозревателе каталогов. Обновите страницу, если состояние не обновляется немедленно.

SQL

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

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

    ALTER TABLE catalog.schema.my_external_table SET MANAGED;
    

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

  • Для внешних таблиц каталога Unity с помощью Apache 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 дней, даже при включенной прогнозной оптимизации, например, если управляемая таблица не часто используется или очень мала. В этих случаях запустите вручную VACUUM через 14 дней, чтобы удалить предыдущие данные.

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

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

Обозреватель каталогов

Обновите страницу. На вкладке "Сведения" в разделе "О этой таблице" тип таблицы отображается как Managed.

SQL

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

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Type Таблица отображается как MANAGED.

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

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

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

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

Запись в таблицу после преобразования с помощью 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.

Сбой проверки файла

Команда SET MANAGED проверяет, что все файлы в самом последнем снимке таблицы скопированы в новое управляемое место хранения таблицы. Если отсутствуют файлы, команда завершается ошибкой DELTA_ALTER_TABLE_SET_MANAGED_FAILED.FILE_VALIDATION_FAILED .

Для разрешения этой проблемы:

  1. Проверьте журналы драйверов Spark, чтобы определить, какие файлы не удалось перенести.
  2. Убедитесь, что эти файлы существуют в исходном расположении внешней таблицы и доступны.
  3. Повторите ALTER TABLE ... SET MANAGED команду.

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

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

Important

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

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

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

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

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

ALTER TABLE catalog.schema.my_managed_table UNSET 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-ядерное / Очень большое SQL хранилище ~6 мин или меньше ~1–2 мин или меньше
1 TБ 64-ядро / хранилище 2X-Large SQL ~30 мин ~1-2 мин
10 ТБ 256-ядерное / 4X-Large SQL-склад ~1,5 ч ~1-5 мин

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

Note

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

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

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

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

  • Ограничения Delta Sharing: Команда SET MANAGED не полностью совместима с Delta Sharing. Open Delta Sharing работает должным образом, однако передача данных между экземплярами 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;