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


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

Это важно

Эта функция доступна в общедоступной предварительной версии и доступна только для участвующих клиентов в настоящее время. Чтобы принять участие в предварительной версии, заполните заявку, заполнив эту форму. Эта функция поддерживает только преобразование внешних таблиц, федерализованных с использованием HMS и Glue Federation.

На этой странице описывается, как преобразовать внешнюю таблицу в управляемую таблицу с помощью SET MANAGED.

SET MANAGED обзор

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

  • Сохранение истории таблиц.
  • Сохранение одинаковых конфигураций таблицы, включая то же имя, параметры, разрешения и представления.
  • Преимущества прогнозной оптимизации. При преобразовании таблицы в управляемую устанавливается предсказательная оптимизация INHERIT, что означает наследование параметра от уровня схемы или каталога. По умолчанию эта функция отключена. Вы можете включить прогнозную оптимизацию для преобразованной таблицы, выполнив команду ALTER TABLE <table_name> ENABLE PREDICTIVE OPTIMIZATION, которая задает ее ENABLED вместо INHERIT.

Предпосылки

  • Формат данных: формат данных внешней таблицы должен быть Delta Lake. Чтобы выполнить однократное преобразование Parquet, см. раздел "Преобразование в Delta Lake".
  • Тип таблицы: таблица HMS должна быть внешней таблицей HMS. Команда завершается ошибкой, если таблица является управляемой таблицей HMS.
  • Среда выполнения: Databricks Runtime 17.3 или более поздней версии
  • Разрешения: OWNER или MANAGE разрешения на таблицу и CREATE разрешения для EXTERNAL LOCATION

Синтаксис

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

ALTER TABLE source_table SET MANAGED {MOVE | COPY}

Параметры

  • исходная_таблица

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

  • MOVE

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

    • Доступ через внешний каталог или доступ на основе пути завершается сбоем после преобразования таблицы. Все операции чтения и записи в таблицу обязаны использовать пространство имен каталога Unity для доступа.

    • Все читатели и записывающие должны использовать доступ, основанный на именах. Рассмотрим пример.

      SELECT * FROM catalog_name.schema_name.table_name;
      
    • Доступ, основанный на пути, не поддерживается и приводит к ошибке после преобразования таблицы. Рассмотрим пример.

      SELECT * FROM delta.`protocol://path/to/table`;
      
    • Внешние клиенты (не Azure Databricks) должны поддерживать чтение из управляемых таблиц каталога Unity. См. режим совместимости.

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

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

    • Время простоя может возникать, когда читатели или писатели обращаются к таблице во время преобразования. Дополнительные сведения см. в статье "Преобразование внешней таблицы в управляемую таблицу каталога Unity".

    • Если команда прервана, таблица может остаться внешней таблицей, так как преобразование в управляемую таблицу было неполным. Чтобы завершить команду, запустите SET MANAGED еще раз во внешней таблице.

    • Значение прогнозной оптимизации установлено по умолчанию на INHERIT, если вы не настроили его вручную. Чтобы проверить, включена ли прогнозная оптимизация, проверьте, включена ли прогнозная оптимизация.

    • Откат. Чтобы откатить миграцию таблиц и восстановить доступ к исходной таблице во внешнем каталоге, выполните UNSET MANAGED команду. После выполнения команды таблица становится внешней таблицей. Чтобы вернуть таблицу обратно в статус внешней, удалите таблицу, и она будет восстановлена как внешняя в следующей синхронизации каталога.

      ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
      

      Предупреждение

      Перед удалением таблицы обязательно запустите UNSET MANAGED. Удаление таблицы без предварительного запуска UNSET MANAGED может оставить систему в плохом состоянии и привести к потере данных или непоследовательности.

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

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

      • Перезапустите все задания потоковой передачи (чтение или запись) с помощью внешней таблицы
      • Убедитесь, что ваши читатели и записывающие работают с управляемой таблицей.
  • COPY

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

    • Во время преобразования в управляемое управление данные из исходной таблицы копируются в управляемое расположение хранилища, определенное для внешней таблицы, создавая две отдельные копии: новую управляемую таблицу и исходную таблицу во внешнем каталоге.
    • В отличие от ситуации, когда при использовании MOVE операции чтения и записи завершаются ошибкой, при использовании COPY вы несете ответственность за правильное отключение операций чтения и записи в исходной таблице во внешнем каталоге и обеспечение того, чтобы рабочие нагрузки мигрировали в новый каталог.
    • Откат. Чтобы откатить миграцию таблиц, не нужно выполнять UNSET MANAGED команду, так как исходная таблица не была нарушена во внешнем каталоге. Удалите таблицу, и при следующей синхронизации каталога она будет вновь подключена как внешняя.

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

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

DESCRIBE EXTENDED catalog_name.schema_name.table_name

Если таблица была преобразована, элемент Type, расположенный под col_name, отображается как MANAGED под data_type.

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

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

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

  • Несколько облачных регионов: если расположение по умолчанию управляемого каталога Unity, метастора, каталога или схемы находится в другом облачном регионе по сравнению с местоположением хранилища преобразуемой внешней таблицы, вы можете понести дополнительные расходы на передачу данных между регионами. Поставщик облачных служб налагает эти расходы за пределы контроля Azure Databricks. Чтобы проверить расположения схемы, каталога и хранилища метаданных, используйте следующие команды:

    -- Check schema location
    DESCRIBE SCHEMA EXTENDED catalog_name.schema_name;
    
    -- Check catalog location
    DESCRIBE CATALOG EXTENDED catalog_name;
    
    -- Check metastore location
    DESCRIBE METASTORE;
    

Часто задаваемые вопросы

Можно ли создавать таблицы, а также преобразовывать таблицы в внешнем каталоге?

Да, можно создать внешние или управляемые таблицы в внешнем каталоге. Поведение зависит от конфигурации схемы:

  • Для схем Glue или eHMS или схем с управляемым расположением, заданным в каталоге Unity: при выполнении CREATE TABLE foreign_catalog.schema.tableэто создает управляемую или внешнюю таблицу каталога Unity. Таблица не отправляется или не синхронизируется с внешним каталогом.
  • Для схем из внутренних подключений метахранилища Hive: если попытаться создать таблицу в другой схеме, она все равно создаст таблицу в другой схеме, а также создаст таблицу в hive_metastore.
  • Для устаревшего хранилища метаданных Hive рабочей области: поскольку имеется возможность чтения и записи в рамках федерации, создание таблицы в чужом каталоге также создаёт таблицу во внутреннем хранилище метаданных Hive.

Что делать, если мои внешние таблицы поддерживаются DBFS?

При преобразовании таблицы с поддержкой DBFS мы сохраняем текущее сопоставление пути DBFS к облачному пути в качестве расположения облачного пути внешней таблицы.

Можно ли преобразовать на уровне схемы или каталога?

Вы можете выполнять итерацию по таблицам в схемах для преобразования по отдельности или использовать проект лабораторий discoverx для одновременного преобразования целых схем или каталогов:

df = (dx.from_tables("prod.*.*")
.with_sql("ALTER TABLE {full_table_name} SET MANAGED;")
.apply())