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


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

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

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

Запрос хранилища метаданных 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 и механизмами управления доступом к таблицам в устаревшем хранилище метаданных Hive для каждой рабочей области.

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

  • Группы учетных записей: политики управления доступом в каталоге Unity применяются к группам учетных записей, а политики управления доступом для хранилища метаданных Hive применяются к локальным группам рабочей области. См . разницу между группами учетных записей и локальными группами рабочей области.
  • 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 Catalog.

Соединения между каталогом 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.

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

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

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

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

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

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

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

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

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

Обновление устаревших таблиц до каталога Unity

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