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


SYNC

Область применения:проверка помечены да только каталог Unity среды выполненияпроверка помечены даDatabricks SQL проверка помечены да Databricks

SYNC Используйте команду для обновления внешних таблиц в хранилище метаданных Hive до внешних таблиц в каталоге Unity. Вы также можете использовать SYNC для обновления управляемых таблиц Hive, хранящихся за пределами хранилища рабочей области Databricks (иногда называемого корнем DBFS) до внешних таблиц в каталоге Unity. Его нельзя использовать для обновления управляемых таблиц Hive, хранящихся в хранилище рабочей области. Чтобы обновить эти таблицы, используйте CREATE TABLE CLONE.

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

Команда SYNC может выполняться на уровне схемы с помощью SYNC SCHEMA синтаксиса или отдельной таблицы с помощью синтаксиса SYNC TABLE .

Команда выполняет операцию записи (ALTER TABLE) в каждую исходную таблицу, в которой она обновляется, чтобы добавить некоторые дополнительные свойства таблицы для ее хранения. В случае с разностной таблицей для выполнения операции записи кластер или хранилище SQL, которая выполняет команду, должна иметь доступ на запись к расположению таблицы.

В Databricks Runtime 12.2 LTS или более поздней версии это поведение можно отключить, задав конфигурацию spark.databricks.sync.command.disableSourceTableWrites Spark для true выполнения SYNC команды. Если задано значение true, SYNC не добавляет новые свойства таблицы и поэтому может не определить, была ли таблица обновлена до каталога Unity. В этом случае она использует исключительно имя таблицы, чтобы определить, была ли таблица обновлена до каталога Unity. Если исходная таблица была переименована с момента последней команды SYNC, пользователь должен вручную переименовать целевую таблицу перед повторной выполнением команды SYNC при trueнастройке.

Внимание

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

Синтаксис

SYNC { SCHEMA target_schema [AS EXTERNAL] FROM source_schema |
       TABLE target_table [AS EXTERNAL] FROM source_table }
  [SET OWNER principal]
  [DRY RUN]

Параметры

  • SCHEMA

    SYNC все таблицы в схеме.

    • target_schema

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

    • source_schema

      Существующая схема в каталоге hive_metastore , принадлежавшая пользователю.

  • TABLE

    SYNC отдельная таблица.

    • target_table

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

    • source_table

      Существующая таблица, в hive_metastore которой принадлежит пользователь.

  • principal

    При необходимости задайте для владельца обновленных таблиц в каталоге principalUnity значение . Владелец по умолчанию — текущий пользователь.

  • AS EXTERNAL

    SYNC Управляемая таблица Hive или схема, хранящуюся вне хранилища рабочих областей Databricks (иногда называемая корневым каталогом DBFS) во внешние таблицы в каталоге Unity. Нельзя использовать AS EXTERNAL для обновления управляемых таблиц Hive, хранящихся в хранилище рабочей области.

  • DRY RUN

    При указании проверка, можно ли source_table обновить таблицы или таблицы source_schema без фактического создания или обновления целевых таблиц. Команда возвращается DRY_RUN_SUCCESS , если таблицу можно обновить.

  • AS EXTERNAL Начиная с Databricks Runtime 13.2 и выше, это необязательное предложение можно добавить, чтобы указать, что управляемые таблицы в хранилище метаданных hive обновляются как внешние таблицы в каталоге Unity. При использовании SYNC SCHEMAс ним применяется ко всем таблицам, включая управляемые таблицы в source_schema.

Возвраты

Отчет со следующими столбцами:

  • source_schema STRING

    Имя исходной схемы. Схема заключается в том NULL , что источник является неподдерживаемым временным представлением.

  • source_name STRING NOT NULL

    Имя исходной таблицы.

  • source_type STRING NOT NULL

    Тип таблицы: MANAGED или EXTERNAL

  • target_catalog STRING NOT NULL

    Целевой каталог в каталоге Unity, где синхронизируется таблица.

  • target_schema STRING NOT NULL

    Целевая схема в каталоге Unity, в которой синхронизирована таблица.

  • target_name STRING NOT NULL

    Имя таблицы в каталоге Unity, с которой синхронизируется исходная таблица. Это имя соответствует имени исходной таблицы.

  • status_code STRING NOT NULL

    Код состояния для результата SYNC команды исходной таблицы.

  • description STRING

    Описательное сообщение о состоянии команды синхронизации для исходной таблицы.

Стандартные коды состояния, возвращаемые SYNC

Команда SYNC предоставляет уникальное status_code поле в выходных данных для каждой таблицы, которая будет обновлена до каталога Unity, представляющего состояние обновления. Ниже приведены некоторые распространенные коды состояния, а также рекомендации по их устранению:

  • DRY_RUN_SUCCESS: успешное выполнение сухого выполнения.

    Таблицу можно обновить до каталога Unity с помощью SYNC команды.

  • DBFS_ROOT_LOCATION: таблица, расположенная в корне файловой системы Databricks.

    Таблица находится в корневом расположении файловой системы Databricks. Это не поддерживается в каталоге Unity. Скопируйте данные таблицы в расположение каталога Unity с помощью команды CREATE TABLE с параметром.DEEP CLONE

  • EXTERNAL_TABLE_IN_MANAGED_LOCATION: внешний путь к таблице не может находиться в управляемом хранилище.

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

  • HIVE_SERDE: таблица не подходит для обновления из хранилища метаданных Hive в каталог Unity. Причина: таблица Hive SerDe.

    Таблицы Hive SerDe не поддерживаются каталогом Unity. Измените таблицы в разностном SYNC формате и выполните команду для обновления.

  • INVALID_DATASOURCE_FORMAT: формат источника данных не указан или не поддерживается.

    Используйте один из поддерживаемых форматов источника данных: Delta, Parquet, CSV, JSON, ORC, TEXT

  • LOCATION_OVERLAP: входной путь перекрывается другими внешними таблицами.

    Расположение таблицы перекрывается другими внешними таблицами. Используйте другое расположение для таблицы или удалите перекрывающиеся внешние таблицы.

  • MULTIPLE_EXT_LOCATIONS: входной путь содержит другие внешние расположения.

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

  • MULTIPLE_TARGET_TABLE: другая синхронизированная таблица уже существует. Допускается только одна целевая таблица на исходную таблицу.

    Исходная таблица уже синхронизирована с другой целевой таблицей, которая ранее не разрешена. Чтобы принудительно SYNC выполнить переход к другой таблице, удалите свойство upgraded_to таблицы из исходной таблицы или удалите ранее синхронизированную таблицу из каталога Unity, если она больше не нужна.

  • NOT_EXTERNAL: таблица не подходит для обновления из хранилища метаданных Hive в каталог Unity. Причина. Не внешняя таблица.

    SYNC команда поддерживает только перенос внешних таблиц в каталог Unity. Для управляемых таблиц создайте управляемую таблицу в каталоге Unity с помощью команды CREATE TABLE с параметром.DEEP CLONE Кроме того, используйте AS EXTERNAL предложение с SYNC командой для создания внешней таблицы в каталоге Unity.

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

    Выбранный каталог — это каталог разностного общего доступа, который доступен только для чтения. Таблицы в каталоге только для чтения нельзя обновить с помощью SYNC команды.

  • SUCCESS: таблица успешно синхронизирована.

  • TABLE_ALREADY_EXISTS: целевая таблица уже существует.

    Таблица с тем же именем, что и выбранная таблица, уже существует в каталоге Unity. Переименуйте или удалите существующую таблицу в каталоге SYNC Unity и выполните команду повторно.

  • TEMP_TABLE_NOT_SUPPORTED: временные таблицы или представления не поддерживаются.

    Временные таблицы или представления нельзя обновить до каталога Unity. Чтобы использовать временные таблицы или представления, повторно создайте их в каталоге Unity с помощью команды SHOW CREATE TABLE в каталоге Unity.

  • TIMEOUT: время ожидания задачи синхронизации.

    Задача команды синхронизации заняла более 300 секунд. Увеличение spark.databricks.sync.command.task.timeout до более высокого значения в секундах. Значение по умолчанию — 300. Если ошибка сохраняется, обратитесь в службу поддержки.

  • VIEWS_NOT_SUPPORTED: представления не поддерживаются.

    Повторно создайте представления вручную с помощью команды SHOW CREATE TABLE в каталоге Unity.

Примеры

-- Sync an existing hive metastore table hive_metastore.default.my_tbl to a Unity Catalog
-- table named main.default.my_tbl.
> SYNC TABLE main.default.my_tbl FROM hive_metastore.default.my_tbl;
  source_schema source_name source_type target_catalog target_schema target_name status_code description
  ------------- ----------- ----------- -------------- ------------- ----------- ----------- ---------------------------------
  default       my_tbl      external    main           default       my_tbl      SUCCESS     Table main.default.my_tbl synced.

 -- Sync an existing managed hive metastore table hive_metastore.default.my_tbl to an external table named main.default.my_tbl in Unity Catalog.
 > SYNC TABLE main.default.my_tbl AS EXTERNAL FROM hive_metastore.default.my_tbl;
  source_schema source_name source_type target_catalog target_schema target_name status_code description
  ------------- ----------- ----------- -------------- ------------- ----------- ----------- ---------------------------------
  default       my_tbl      managed    main           default       my_tbl      SUCCESS     Table main.default.my_tbl synced.

-- SYNC a table in DRY RUN mode to evaluate the upgradability of the hive metastore table.
> SYNC TABLE main.default.my_tbl FROM hive_metastore.default.my_tbl DRY RUN;
  source_schema source_name source_type target_catalog target_schema target_name status_code     description
  ------------- ----------- ----------- -------------- ------------- ----------- --------------- ---------------------------------
  default       my_tbl      external    main           default       my_tbl      DRY_RUN_SUCCESS

-- SYNC all the eligible tables in schema hive_metastore.mydb to a Unity Catalog schema main.my_db_uc.
-- The upgraded tables in main.my_db_uc will be owned by alf@melmak.et
> SYNC SCHEMA main.my_db_uc FROM hive_metastore.my_db SET OWNER `alf@melmak.et`;
  source_schema source_name source_type target_catalog target_schema target_name status_code description
  ------------- ----------- ----------- -------------- ------------- ----------- ----------- ---------------------------------
  ...

-- DRY RUN mode of SYNC SCHEMA to evaluate all the tables in a schema
-- hive_metastore.mydb for upgrading to Unity Catalog.
> SYNC SCHEMA main.my_db_uc FROM hive_metastore.my_db DRY RUN;
  source_schema source_name source_type target_catalog target_schema target_name status_code     description
  ------------- ----------- ----------- -------------- ------------- ----------- -----------     ---------------------------------
  ...

-- Sync all tables including managed tables in a schema hive_metastore.mydb
-- as external tables in Unity Catalog.
> SYNC SCHEMA main.my_db_uc AS EXTERNAL FROM hive_metastore.my_db;
  source_schema source_name source_type target_catalog target_schema target_name status_code     description
  ------------- ----------- ----------- -------------- ------------- ----------- -----------     ---------------------------------
  ...