Créer et utiliser des volumes

Cet article présente des volumes, qui sont des objets Unity Catalog qui permettent la gouvernance sur des jeux de données non tabulaires. Il décrit également comment créer, gérer et utiliser des volumes.

Pour plus d’informations sur le chargement et la gestion de fichiers dans des volumes, consultez Charger des fichiers dans un volume Unity Catalog et Opérations de gestion des fichiers pour des volumes Unity Catalog.

Remarque

Lorsque vous travaillez avec des volumes, vous devez utiliser un entrepôt SQL ou un cluster exécutant Databricks Runtime 13.3 LTS ou version ultérieure, sauf si vous utilisez des interfaces utilisateur Azure Databricks telles que Catalog Explorer.

Que sont les volumes Unity Catalog ?

Les volumes sont des objets Unity Catalog qui représentent un volume logique de stockage dans un emplacement de stockage d’objets cloud. Les volumes fournissent des fonctionnalités d’accès, de stockage, de gouvernance et d’organisation des fichiers. Alors que les tables fournissent une gouvernance sur les jeux de données tabulaires, les volumes ajoutent une gouvernance aux jeux de données non tabulaires. Vous pouvez utiliser des volumes pour stocker, organiser et accéder à des fichiers dans n’importe quel format, y compris des données structurées, semi-structurées et non structurées.

Important

Vous ne pouvez pas utiliser de volumes comme emplacement pour les tables. Les volumes sont destinés uniquement à l’accès aux données par chemin d’accès. Utilisez des tables pour stocker des données tabulaires avec Unity Catalog.

Qu’est-ce qu’un volume managé ?

Un volume managé est un volume de stockage régi par Unity Catalog créé dans l’emplacement de stockage par défaut du schéma conteneur. Les volumes managés permettent la création d’un stockage gouverné pour travailler avec des fichiers sans la surcharge des emplacements externes et des informations d’identification de stockage. Vous n’avez pas besoin de spécifier un emplacement lors de la création d’un volume managé, et tout l’accès aux fichiers pour les données des volumes managés passe par des chemins gérés par Unity Catalog. Consultez Quel chemin d’accès est utilisé pour accéder aux fichiers d’un volume ?.

Lorsque vous supprimez un volume managé, les fichiers stockés dans ce volume sont également supprimés de votre locataire cloud dans les 30 jours.

Qu’est-ce qu’un volume externe ?

Un volume externe est un volume de stockage régi par Unity Catalog inscrit dans un répertoire dans un emplacement externe à l’aide des informations d’identification de stockage régies par Unity Catalog. Les volumes externes vous permettent d’ajouter la gouvernance des données Unity Catalog aux répertoires de stockage d’objets cloud existants. Voici quelques cas d’usage pour les volumes externes :

  • Ajout de la gouvernance aux fichiers de données sans migration.
  • Gouvernance des fichiers produits par d’autres systèmes qui doivent être ingérés ou accessibles par Azure Databricks.
  • Gouvernance des données produites par Azure Databricks qui doivent être accessibles directement à partir du stockage d’objets cloud par d’autres systèmes.

Les volumes externes doivent être des répertoires situés dans des emplacements externes régis par les informations d’identification de stockage Unity Catalog. Unity Catalog ne gère pas le cycle de vie ou la disposition des fichiers dans les volumes externes. Quand vous supprimez un volume externe, Unity Catalog ne supprime pas les données sous-jacentes.

Remarque

Lorsque vous définissez un volume, l’accès à l’URI cloud aux données sous le chemin du volume est régi par les autorisations du volume.

Quel chemin d’accès est utilisé pour accéder aux fichiers d’un volume ?

Le chemin d’accès aux volumes est le même que vous utilisiez Apache Spark, SQL, Python ou d’autres langages et bibliothèques. Cela diffère des modèles d’accès hérités pour les fichiers dans un stockage d’objets lié à un espace de travail Azure Databricks.

Le chemin d’accès aux fichiers dans les volumes utilise le format suivant :

/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

Azure Databricks prend également en charge un schéma dbfs:/ facultatif lors de l’utilisation d’Apache Spark. Le chemin d’accès suivant fonctionne donc également :

dbfs:/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

La séquence /<catalog>/<schema>/<volume> dans le chemin d’accès correspond aux trois noms d’objets Unity Catalog associés au fichier. Ces éléments de chemin d’accès sont en lecture seule et ne peuvent pas être directement écrits par les utilisateurs, ce qui signifie qu’il n’est pas possible de créer ou de supprimer ces répertoires à l’aide d’opérations de système de fichiers. Ils sont automatiquement gérés et synchronisés avec les entités UC correspondantes.

Remarque

Vous pouvez également accéder aux données dans des volumes externes en utilisant des URI de stockage cloud.

Quels sont les privilèges pour les volumes ?

Les volumes utilisent le même modèle de privilèges de base que les tables, mais alors que les privilèges pour les tables se concentrent sur l’octroi de l’accès à l’interrogation et à la manipulation de lignes dans une table, les privilèges pour les volumes se concentrent sur l’utilisation des fichiers. Par conséquent, les volumes introduisent les privilèges suivants :

Consultez Privilèges Unity Catalog et objets sécurisables.

Qui peut gérer les privilèges de volume ?

Vous devez disposer de privilèges de propriétaire sur un volume pour gérer les privilèges de volume ou supprimer des volumes. Chaque objet dans Unity Catalog ne peut avoir qu’un seul principal affecté en tant que propriétaire, et bien que la propriété ne soit pas en cascade (autrement dit, le propriétaire d’un catalogue ne devient pas automatiquement le propriétaire de tous les objets de ce catalogue), les privilèges associés à la propriété s’appliquent à tous les objets contenus dans un objet.

Cela signifie que pour les volumes Unity Catalog, les principaux suivants peuvent gérer les privilèges de volume :

  • Le propriétaire du catalogue parent.
  • Le propriétaire du schéma parent.
  • Le propriétaire du volume.

Bien que chaque objet ne puisse avoir qu’un seul propriétaire, Databricks recommande d’attribuer la propriété de la plupart des objets à un groupe plutôt qu’à un utilisateur individuel. La propriété initiale de tout objet est affectée à l’utilisateur qui crée cet objet. Consultez Gérer la propriété de l’objet Unity Catalog.

Créer un volume managé

Vous devez disposer des autorisations suivantes pour créer un volume managé :

Ressource Autorisations requises
schéma USE SCHEMA, CREATE VOLUME
Catalogue USE CATALOG

SQL

Pour créer un volume managé, utilisez la syntaxe suivante :

CREATE VOLUME <catalog>.<schema>.<volume-name>;

Explorateur de catalogues

Pour créer un volume managé dans l’Explorateur de catalogues :

  1. Dans votre espace de travail Azure Databricks, cliquez sur l’icône CatalogueCatalogue.
  2. Recherchez ou accédez au schéma auquel vous souhaitez ajouter le volume, puis sélectionnez-le.
  3. Cliquez sur le bouton Créer un volume. (Vous devez disposer de privilèges suffisants.)
  4. Entrez un nom pour le volume.
  5. Fournissez un commentaire (facultatif).
  6. Cliquez sur Créer.

Créer un volume externe

Vous devez disposer des autorisations suivantes pour créer un volume externe :

Ressource Autorisations requises
Emplacement externe CREATE EXTERNAL VOLUME
schéma USE SCHEMA, CREATE VOLUME
Catalogue USE CATALOG

SQL

Pour créer un volume externe, spécifiez un chemin d’accès dans un emplacement externe à l’aide de la syntaxe suivante :

CREATE EXTERNAL VOLUME <catalog>.<schema>.<external-volume-name>
LOCATION 'abfss://<container-name>@<storage-account>.dfs.core.windows.net/<path>/<directory>';

Explorateur de catalogues

Pour créer un volume externe dans l’Explorateur de catalogues :

  1. Dans votre espace de travail Azure Databricks, cliquez sur l’icône CatalogueCatalogue.
  2. Recherchez ou accédez au schéma auquel vous souhaitez ajouter le volume, puis sélectionnez-le.
  3. Cliquez sur le bouton Créer un volume. (Vous devez disposer de privilèges suffisants.)
  4. Entrez un nom pour le volume.
  5. Choisissez un emplacement externe dans lequel créer le volume.
  6. Modifiez le chemin d’accès pour refléter le sous-répertoire dans lequel vous souhaitez créer le volume.
  7. Fournissez un commentaire (facultatif).
  8. Cliquez sur Créer.

Supprimer un volume

Seuls les utilisateurs disposant de privilèges de propriétaire peuvent supprimer un volume. Consultez Qui peut gérer les privilèges de volume ?.

Utilisez la syntaxe suivante pour supprimer un volume :

DROP VOLUME IF EXISTS <volume-name>;

Lorsque vous supprimez un volume managé, Azure Databricks supprime les données sous-jacentes dans les 30 jours. Lorsque vous supprimez un volume externe, vous supprimez le volume d’Unity Catalog, mais les données sous-jacentes restent inchangées dans l’emplacement externe.

Lire des fichiers dans un volume

Vous devez disposer des autorisations suivantes pour afficher le contenu d’un volume ou accéder aux fichiers stockés sur des volumes :

Ressource Autorisations requises
Volume READ
schéma USE SCHEMA
Catalogue USE CATALOG

Vous interagissez avec le contenu des volumes à l’aide de chemins d’accès. Consultez Quel chemin d’accès est utilisé pour accéder aux fichiers d’un volume ?.

Créer, supprimer et effectuer d’autres opérations de gestion de fichiers sur un volume

Vous devez disposer des autorisations suivantes pour effectuer des opérations de gestion de fichiers sur des fichiers stockés sur des volumes :

Ressource Autorisations requises
Volume READ, WRITE
schéma USE SCHEMA
Catalogue USE CATALOG

Les outils suivants permettent d’effectuer des opérations de gestion de fichiers sur les volumes :

Pour plus de détails sur l’interaction programmatique avec les fichiers sur les volumes, consultez Utiliser des fichiers dans les volumes catalogue Unity.

Exemple de notebook : créer et utiliser des volumes

Le notebook suivant illustre la syntaxe SQL de base pour créer et interagir avec des volumes Unity Catalog.

Tutoriel : Notebook de volumes Unity Catalog

Obtenir le notebook

Chemins d’accès réservés pour les volumes

Les volumes introduisent les chemins d’accès réservés suivants utilisés pour accéder aux volumes :

  • dbfs:/Volumes
  • /Volumes

Remarque

Les chemins d’accès sont également réservés en raison de fautes de frappe potentielles pour ces chemins d’accès à partir des API Apache Spark et dbutils, y compris /volumes, /Volume, /volume, qu’ils soient précédés ou non de dbfs:/. Le chemin d’accès /dbfs/Volumes est également réservé, mais ne peut pas être utilisé pour accéder aux volumes.

Les volumes sont uniquement pris en charge dans Databricks Runtime 13.3 LTS et versions ultérieures. Dans Databricks Runtime 12.2 LTS et versions antérieures, les opérations sur les chemins d’accès /Volumes peuvent réussir, mais elles pourraient écrire des données sur des disques de stockage éphémères attachés à des clusters de calcul plutôt que de conserver les données dans les volumes Unity Catalog comme prévu.

Important

Si vous avez des données préexistantes stockées dans un chemin réservé à la racine DBFS, vous pouvez créer un ticket de support pour obtenir un accès temporaire à ces données et les déplacer vers un autre emplacement.

Limites

Vous devez utiliser le calcul compatible avec Unity Catalog pour interagir avec les volumes Unity Catalog. Les volumes ne prennent pas en charge toutes les charges de travail.

Remarque

Les volumes ne prennent pas en charge les commandes dbutils.fs distribuées aux exécuteurs.

Les restrictions suivantes s’appliquent :

Dans Databricks Runtime 14.3 LTS et versions ultérieures :

  • Sur les clusters à utilisateur unique, vous ne pouvez pas accéder aux volumes à partir de threads et de sous-processus dans Scala.

Databricks Runtime 14.2 et versions antérieures :

  • Sur les ordinateurs configurés en mode d’accès partagé, vous ne pouvez pas utiliser les UDF pour accéder aux volumes.
    • Python et Scala ont tous deux accès à FUSE à partir du pilote, mais pas à partir des exécuteurs.
    • Le code Scala qui effectue des opérations d’E/S peut être exécuté sur le pilote, mais pas sur les exécuteurs.
  • Sur les ordinateurs configurés avec un mode d’accès utilisateur unique, il n’y a pas de prise en charge de FUSE en Scala, du code IO Scala accédant aux données à l’aide de chemins d’accès aux volumes, ou des UDF Scala. Les UDF Python sont pris en charge en mode d’accès par un seul utilisateur.

Sur toutes les versions de Databricks Runtime prises en charge :

  • Les fonctions définies par l’utilisateur Unity Catalog ne prennent pas en charge l’accès aux chemins d’accès aux fichiers de volume.

  • Vous ne pouvez pas accéder aux volumes à partir de RDD.

  • Vous ne pouvez pas utiliser spark-submit avec des fichiers JAR stockés dans un volume.

  • Vous ne pouvez pas définir de dépendances à d’autres bibliothèques sollicitées via des chemins d’accès de volume à l’intérieur d’un fichier Wheel ou JAR.

  • Vous ne pouvez pas répertorier des objets Unity Catalog à l’aide du modèle /Volumes/<catalog-name> ou /Volumes/<catalog-name>/<schema-name>. Vous devez utiliser un chemin d’accès complet qui inclut un nom de volume.

  • Le point de terminaison DBFS pour l’API REST ne prend pas en charge les chemins d’accès aux volumes.

  • Les volumes sont exclus des résultats de recherche globale dans l’espace de travail Azure Databricks.

  • Vous ne pouvez pas spécifier de volumes comme destination pour la remise des journaux de cluster.

  • %sh mv n’est pas pris en charge pour le déplacement de fichiers entre des volumes. Utilisez plutôt dbutils.fs.mv ou %sh cp.

  • Vous ne pouvez pas créer un système de fichiers Hadoop personnalisé avec des volumes, ce qui signifie que les éléments suivants ne sont pas pris en charge :

    import org.apache.hadoop.fs.Path
    val path =  new Path("dbfs:/Volumes/main/default/test-volume/file.txt")
    val fs = path.getFileSystem(sc.hadoopConfiguration)
    fs.listStatus(path)
    
  • Les volumes ne sont pas disponibles dans les régions Azure Government ou les espaces de travail avec la conformité FedRAMP.

  • Vous devez utiliser le format de chemin d’accès avec un schéma dbfs:/ dans le panneau de configuration de la bibliothèque Azure Data Factory. Par exemple : dbfs:/Volumes/<catalog-name>/<schema-name>/<volume-name>/file.