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


Работа с каталогом Unity и устаревшим хранилищем метаданных Hive

В этой статье объясняется один из подходов к продолжению использования хранилища метаданных Hive для конкретной рабочей области, когда в рабочей области Azure Databricks включен каталог Unity.

Если рабочая область использовалась до включения для использования с Unity Catalog, похоже, она имеет встроенное хранилище метаданных Hive, содержащее данные, которые вы хотите продолжать использовать. Databricks рекомендует использовать федерацию хранилища метаданных Hive для создания федеративного каталога в каталоге Unity, который отражает хранилище метаданных Hive и в конечном итоге переносит все устаревшие рабочие нагрузки для использования этого федеративного каталога. Однако если вы еще не начали процесс федерации хранилища метаданных Hive, в этой статье вы можете узнать, как работать с данными, зарегистрированными в вашем старом хранилище метаданных Hive, вместе с данными, зарегистрированными в Unity Catalog.

Запрос хранилища метаданных Hive в каталоге Unity

Хранилище метаданных каталога Unity является аддитивным, то есть его можно использовать с хранилищем метаданных Hive для каждой рабочей области в Azure Databricks. Хранилище метаданных Hive отображается как каталог верхнего уровня, называемый hive_metastore в пространстве имен трех уровней.

Например, можно ссылаться на таблицу с именем sales_raw в схеме sales в устаревшем хранилище метаданных Hive с помощью следующей нотации:

SQL

SELECT * from hive_metastore.sales.sales_raw;

Python

display(spark.table("hive_metastore.sales.sales_raw"))

R

library(SparkR)

display(tableToDF("hive_metastore.sales.sales_raw"))

Scala

display(spark.table("hive_metastore.sales.sales_raw"))

Вы также можете указать каталог и схему с помощью инструкции USE:

SQL

USE hive_metastore.sales;
SELECT * from sales_raw;

Python

spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))

R

library(SparkR)

sql("USE hive_metastore.sales")
display(tableToDF("sales_raw"))

Scala

spark.sql("USE hive_metastore.sales")
display(spark.table("sales_raw"))

Управление доступом в каталоге Unity и хранилище метаданных Hive

Если вы настроили управления доступом к таблицам в хранилище метаданных Hive, Databricks продолжает применять эти элементы управления доступом для данных в каталоге hive_metastore для кластеров, работающих в режиме общего доступа. Модель доступа каталога Unity немного отличается от устаревших элементов управления доступом, в частности, отсутствием инструкций DENY. Хранилище метаданных Hive — это объект уровня рабочей области. Разрешения, определенные в каталоге hive_metastore, всегда ссылаются на локальных пользователей и группы в рабочей области. См. сравнение модели привилегий Unity Catalog с устаревшей системой управления доступом к таблицам.

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

Модель управления доступом в каталоге Unity отличается следующими способами от управления доступом к таблицам в устаревшем хранилище метаданных Hive:

  • Группы учетных записей: Политики управления доступом в Unity Catalog применяются к группам учетных записей, а политики управления доступом для хранилища метаданных Hive применяются к местным группам рабочего пространства. См., Типы групп в Azure Databricks.
  • USE CATALOG и USE SCHEMA разрешения требуются в каталоге и схеме для всех операций с объектами внутри каталога или схемы. Независимо от привилегий субъекта в таблице, субъект также должен иметь права USE CATALOG в родительском каталоге для доступа к схеме и привилегии USE SCHEMA для доступа к объектам в схеме. С помощью элементов управления доступом на уровне рабочей области, с другой стороны, предоставление USAGE в корневом каталоге автоматически предоставляет USAGE для всех баз данных, но USAGE в корневом каталоге не требуется.
  • представления. В каталоге Unity владелец представления не обязан быть владельцем ссылочных таблиц и представлений. Иметь права SELECT, а также USE SCHEMA на родительскую схему представлений и USE CATALOG на родительский каталог, достаточно. При использовании контролей доступа на уровне рабочей области владелец представления должен быть владельцем всех упомянутых таблиц и представлений.
  • Нет поддержки ANY FILE или ANONYMOUS FUNCTION: в каталоге Unity отсутствует понятие защищаемого объекта ANY FILE или ANONYMOUS FUNCTION, которое могло бы позволить непривилегированному пользователю запускать привилегированный код.
  • Нет READ_METADATA привилегий: каталог Unity управляет доступом к метаданным другим способом. См. привилегии каталога Unity и защищаемые объекты.

Присоединение между каталогом Unity и объектами хранилища метаданных Hive

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

Примечание.

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

Следующий пример объединяет результаты из таблицы sales_current в устаревшем хранилище метаданных Hive с таблицей sales_historical в хранилище метаданных каталога Unity, когда поля order_id равны.

SQL

SELECT * FROM hive_metastore.sales.sales_current
JOIN main.shared_sales.sales_historical
ON hive_metastore.sales.sales_current.order_id = main.shared_sales.sales_historical.order_id;

Python

dfCurrent = spark.table("hive_metastore.sales.sales_current")
dfHistorical = spark.table("main.shared_sales.sales_historical")

display(dfCurrent.join(
  other = dfHistorical,
  on = dfCurrent.order_id == dfHistorical.order_id
))

R

library(SparkR)

dfCurrent = tableToDF("hive_metastore.sales.sales_current")
dfHistorical = tableToDF("main.shared_sales.sales_historical")

display(join(
  x = dfCurrent,
  y = dfHistorical,
  joinExpr = dfCurrent$order_id == dfHistorical$order_id))

Scala

val dfCurrent = spark.table("hive_metastore.sales.sales_current")
val dfHistorical = spark.table("main.shared_sales.sales_historical")

display(dfCurrent.join(
  right = dfHistorical,
  joinExprs = dfCurrent("order_id") === dfHistorical("order_id")
))

Каталог по умолчанию

Каталог по умолчанию настроен для каждой рабочей области, включенной в Unity Catalog.

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

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

  • Если рабочая область была включена для каталога Unity автоматически, каталог рабочей области был задан в качестве каталога по умолчанию. См. автоматическое включение каталога Unity.
  • Если рабочая область была включена для каталога Unity вручную, каталог hive_metastore был задан в качестве каталога по умолчанию.

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

Сведения о том, как получить и переключить каталог по умолчанию, см. в статье Управление каталогом по умолчанию

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

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

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

См. статью "Подключение к Azure Data Lake Storage 2-го поколения и хранилищу BLOB-объектов".

Миграция устаревших таблиц в каталог Unity

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