Partager via


Utiliser le metastore Hive hérité avec le catalogue Unity

Cet article explique une approche permettant de continuer à utiliser le metastore Hive hérité par espace de travail lorsque votre espace de travail Azure Databricks est activé pour le catalogue Unity.

Si votre espace de travail était en service avant qu’il n’ait été activé pour le catalogue Unity, il dispose probablement d’un metastore Hive qui contient des données que vous souhaiterez peut-être continuer à utiliser. Cet article explique comment continuer à utiliser des tables inscrites dans un metastore Hive.

Important

Le metastore Hive par espace de travail est une fonctionnalité héritée et les instructions fournies dans cet article représentent les flux de travail hérités.

Les tables du metastore Hive ne bénéficient pas de l’ensemble complet de fonctionnalités de sécurité et de gouvernance fournies par le catalogue Unity, telles que l’audit intégré, la traçabilité et le contrôle d’accès. Databricks vous recommande de migrer ces tables et les charges de travail qui les référencent au catalogue Unity et de désactiver l’accès direct au metastore Hive.

Deux chemins de migration sont disponibles :

  • Mettez à niveau toutes les tables inscrites dans le metastore Hive vers Unity Catalog.

  • Fédérez votre metastore Hive au catalogue Unity à l’aide de la fédération du metastore Hive pour une approche plus progressive. La fédération du métastore Hive crée un catalogue externe dans Unity Catalog, qui reflète le métastore Hive.

Consultez Mettre à niveau des espaces de travail Azure Databricks vers le catalogue Unity.

Interroger le metastore Hive hérité dans le catalogue Unity

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"))

Langage de programmation 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"))

Langage de programmation Scala

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

Contrôle d’accès dans le catalogue Unity par rapport à l’ancien metastore Hive

Si vous avez configuré le contrôle d’accès aux tables hérité sur le metastore Hive, Databricks continue d’appliquer ces contrôles d’accès pour les données du hive_metastore catalogue pour les clusters s’exécutant en mode d’accès standard.

Le modèle d’accès au catalogue Unity diffère légèrement des contrôles d’accès hérités :

  • Metastore : Le catalogue Unity est un objet au niveau du compte et 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.
  • 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 Sources de groupe.
  • USE CATALOG et USE SCHEMA les autorisations 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 : indépendamment des privilèges d’un principal sur une table, le principal doit également avoir le USE CATALOG privilège sur son catalogue parent pour accéder au schéma et le USE SCHEMA privilège d’accéder aux objets au sein du 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 le catalogue Unity, le propriétaire d’une vue n’a pas besoin d’être propriétaire des tables et vues référencées de la vue. Disposer des privilèges SELECT suffit, ainsi que des privilèges USE SCHEMA sur le schéma parent des affichages 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 ANY FILE ou ANONYMOUS FUNCTION sécurisable qui pourrait permettre à un utilisateur non privilégié d’exécuter du code privilégié.
  • Aucune prise en charge pour DENY : le modèle de privilège du catalogue Unity est basé sur le principe du moindre privilège. Les privilèges qui ne sont pas accordés sont implicitement refusés.
  • 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 Unity Catalog et metastore Hive

En utilisant la notation de "namespace" à trois niveaux, vous pouvez joindre des données dans un metastore Unity Catalog avec des données dans le metastore Hive hérité.

Remarque

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))

Langage de programmation 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 au catalogue Unity au sein d’un espace de travail existant, il est judicieux d’utiliser hive_metastore comme catalogue par défaut pour éviter d’affecter le code existant qui fait référence au metastore Hive, sauf si vous avez entièrement migré hors du 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 Connexion à Azure Data Lake Storage et Blob Storage.