Utilisation de Unity Catalog et du metastore Hive hérité
Cet article explique comment utiliser le metastore Hive par espace de travail lorsque Unity Catalog est activé dans votre espace de travail Azure Databricks.
Si votre espace de travail était en service avant d’être activé pour Unity Catalog, il a probablement un metastore Hive qui contient des données que vous souhaitez continuer à utiliser. Databricks vous recommande de migrer les tables gérées par le metastore Hive vers le metastore Unity Catalog, mais si vous choisissez de ne pas le faire, cet article explique comment utiliser les données gérées par les deux metastores.
Interroger le metastore Hive dans Unity Catalog
Le metastore Unity Catalog est additif, ce qui signifie qu’il peut être utilisé avec le metastore Hive par espace de travail dans Azure Databricks. Le metastore Hive s’affiche sous la forme d’un catalogue de niveau supérieur appelé hive_metastore
dans l’espace de noms à trois niveaux.
Par exemple, vous pouvez faire référence à une table nommée sales_raw
dans le schéma sales
dans le metastore Hive hérité à l’aide de la notation suivante :
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"))
Vous pouvez également spécifier le catalogue et le schéma à l’aide d’une instruction 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"))
Contrôle d’accès dans Unity Catalog et le metastore Hive
Si vous avez configuré le contrôle d’accès aux tables sur le metastore Hive, Databricks continue à appliquer ces contrôles d’accès aux données du catalogue hive_metastore
pour les clusters qui s’exécutent en mode d’accès partagé. Le modèle d’accès au catalogue Unity diffère légèrement des contrôles d’accès hérités, par exemple l’absence d’instructions DENY
. Le metastore Hive est un objet au niveau de l’espace de travail. Les autorisations définies dans le catalogue hive_metastore
font toujours référence aux utilisateurs et groupes locaux de l’espace de travail. Voir Différences par rapport au contrôle d’accès aux tables.
Différences par rapport au contrôle d’accès aux tables
Unity Catalog présente les différences clés suivantes par rapport à l’utilisation des contrôles d’accès aux tables dans le metastore Hive hérité dans chaque espace de travail.
Le modèle de contrôle d’accès dans Unity Catalog présente les différences suivantes par rapport au contrôle d’accès aux tables :
- Groupes de compte : les stratégies de contrôle d’accès dans Unity Catalog sont appliquées aux groupes de compte, tandis que les stratégies de contrôle d’accès pour le metastore Hive sont appliquées aux groupes au niveau de l’espace de travail. Consultez Différence entre les groupes de comptes et les groupes locaux d’espace de travail.
- Les autorisations
USE CATALOG
etUSE SCHEMA
sont requises sur le catalogue et le schéma pour toutes les opérations sur les objets à l’intérieur du catalogue ou du schéma : Quels que soient les privilèges d’un principal sur une table, le principal doit également disposer du privilègeUSE CATALOG
sur son catalogue parent pour accéder au schéma et du privilègeUSE SCHEMA
d’accès aux objets dans le schéma. En revanche, avec les contrôles d’accès aux tables au niveau de l’espace de travail, le fait d’octroyerUSAGE
sur le catalogue racine accorde automatiquementUSAGE
sur toutes les bases de données, maisUSAGE
sur le catalogue racine n’est pas obligatoire. - Vues : dans Unity Catalog, le propriétaire d’une vue n’a pas besoin d’être propriétaire des vues et des tables référencées de la vue. Disposer des privilèges
SELECT
suffit, ainsi que des privilègesUSE SCHEMA
sur le schéma parents des vues etUSE CATALOG
sur le catalogue parent. Avec les contrôles d’accès aux tables au niveau de l’espace de travail, le propriétaire d’une vue doit être propriétaire de toutes les tables et vues référencées. - Aucune prise en charge de
ANY FILE
ouANONYMOUS FUNCTION
: Dans Unity Catalog, il n’existe aucun concept d’un élément sécurisableANY FILE
ouANONYMOUS FUNCTION
qui peut permettre à un utilisateur non privilégié d’exécuter du code privilégié. - Aucune autorisation
READ_METADATA
: Unity Catalog gère l’accès aux métadonnées de manière différente. Consultez Privilèges Unity Catalog et objets sécurisables.
Jointures entre les objets de metastore Unity Catalog et Hive
En utilisant la notation d’espace de noms à trois niveaux, vous pouvez joindre des données dans un metastore Unity Catalog avec des données dans le metastore Hive hérité.
Notes
Une jointure avec des données dans le metastore Hive hérité ne fonctionne que sur l’espace de travail où résident ces données. Si vous essayez d’exécuter une telle jointure dans un autre espace de travail, une erreur se produit. Azure Databricks vous recommande de mettre à niveau les tables et les vues héritées vers Unity Catalog.
L’exemple suivant joint les résultats de la table sales_current
dans le metastore Hive hérité avec la table sales_historical
dans le metastore Unity Catalog lorsque les champs order_id
sont égaux.
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")
))
Catalogue par défaut
Un catalogue par défaut est configuré dans chaque espace de travail dans lequel Unity Catalog est activé.
Si vous omettez le nom du catalogue de premier niveau lorsque vous effectuez des opérations de données, le catalogue par défaut est utilisé.
Le catalogue par défaut initialement configuré dans votre espace de travail dépend de la façon dont Unity Catalog été activé dans votre espace de travail :
- Si Unity Catalog a été activé dans votre espace de travail de façon automatique, le catalogue d’espace de travail a été défini comme catalogue par défaut. Consultez l’article Activation automatique de Unity Catalog.
- Si Unity Catalog a été activé dans votre espace de travail de façon manuelle, le catalogue
hive_metastore
a été défini comme catalogue par défaut.
Si vous passez du metastore Hive à Unity Catalog au sein d’un espace de travail existant, il est généralement judicieux d’utiliser hive_metastore
comme catalogue par défaut pour éviter d’impacter le code existant qui fait référence au metastore Hive.
Pour savoir comment obtenir le catalogue par défaut et passer de l’un à l’autre, consultez Gérer le catalogue par défaut
Autorisations d’accès aux données étendues au cluster
Lors de l’utilisation du metastore Hive avec Unity Catalog, le profil d’instance du cluster est utilisé pour accéder aux données du metastore Hive, mais pas aux données inscrites dans Unity Catalog.
Si les utilisateurs accèdent à des chemins qui se trouvent en dehors de Unity Catalog (comme un chemin non inscrit en tant que tableau ou emplacement externe), alors les autorisations d’accès au cluster sont utilisées.
Consultez Se connecter à Azure Data Lake Storage Gen2 et Stockage Blob.
Mettre à niveau les tables héritées vers Unity Catalog
Les tables du metastore Hive ne bénéficient pas de l’ensemble complet des fonctionnalités de sécurité et de gouvernance introduites par Unity Catalog, telles que l’audit intégré et le contrôle d’accès. Databricks vous recommande de mettre à niveau vos tables héritées en les ajoutant à Unity Catalog.