Partager via


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 et USE 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’octroyer USAGE sur le catalogue racine accorde automatiquement USAGE sur toutes les bases de données, mais USAGE 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èges USE SCHEMA sur le schéma parents des vues et USE 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 ou ANONYMOUS FUNCTION : Dans Unity Catalog, il n’existe aucun concept d’un élément sécurisable ANY FILE ou ANONYMOUS 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.