Работа с каталогом 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.