Erstellen von und Arbeiten mit Volumes

In diesem Artikel werden Volumes vorgestellt, bei denen es sich um Unity Catalogobjekte handelt, die Governance über nicht tabellarische Datasets ermöglichen. Außerdem wird das Erstellen, Verwalten und Arbeiten mit Volumes beschrieben.

Ausführliche Informationen zum Hochladen und Verwalten von Dateien in Volumes finden Sie unter Hochladen von Dateien in ein Unity-Katalogvolume und Dateiverwaltungsvorgänge für Unity-Katalogvolumes.

Hinweis

Wenn Sie mit Volumes arbeiten, müssen Sie ein SQL-Warehouse oder einen Cluster unter Databricks Runtime 13.3 LTS oder höher verwenden, es sei denn, Sie verwenden Azure Databricks-Benutzeroberflächen wie den Katalog-Explorer.

Was sind Unity Catalog-Volumes?

Volumes sind Unity Catalog-Objekte, die ein logisches Speichervolume an einem Speicherort für Cloudobjekte darstellen. Volumes bieten Funktionen zum Zugreifen auf Dateien sowie zum Speichern, Verwalten und Organisieren von Dateien. Tabellen bieten zwar Governance über tabellarische Datasets, Volumes unterstützen jedoch zusätzlich Governance für nicht tabellarische Datasets. Sie können Volumes verwenden, um Dateien in einem beliebigen Format zu speichern und darauf zuzugreifen, einschließlich strukturierter, semistrukturierter und unstrukturierter Daten.

Wichtig

Sie können Volumes nicht als Speicherort für Tabellen verwenden. Volumes sind nur für den pfadbasierten Datenzugriff vorgesehen. Verwenden Sie Tabellen zum Speichern tabellarischer Daten mit Unity-Katalog.

Was ist ein verwaltetes Volume?

Ein verwaltetes Volume ist ein von Unity Catalog verwaltetes Speichervolume, das am Standardspeicherort des enthaltenden Schemas erstellt wird. Verwaltete Volumes ermöglichen die Erstellung von verwaltetem Speicher für die Arbeit mit Dateien ohne den Mehraufwand durch externe Speicherorte und Speicheranmeldeinformationen. Sie müssen beim Erstellen eines verwalteten Volumes keinen Speicherort angeben, und der gesamte Dateizugriff auf Daten in verwalteten Volumes erfolgt über Pfade, die von Unity Catalog verwaltet werden. Weitere Informationen finden Sie unter Welcher Pfad wird für den Zugriff auf Dateien auf einem Volume verwendet?.

Wenn Sie ein verwaltetes Volume löschen, werden die auf diesem Volume gespeicherten Dateien ebenfalls innerhalb von 30 Tagen aus Ihrem Cloudmandanten gelöscht.

Was ist ein externes Volume?

Ein externes Volume ist ein von Unity Catalog verwaltetes Speichervolume, das für ein Verzeichnis innerhalb eines externen Speicherorts mit von Unity Catalog verwalteten Speicheranmeldeinformationen registriert ist. Externe Volumes ermöglichen es Ihnen, Unity Catalog-Datengovernance zu vorhandenen Cloudobjektspeicherverzeichnissen hinzuzufügen. Zu den Anwendungsfällen von externen Volumen gehören u. a.:

  • Hinzufügen von Governance zu Datendateien ohne Migration.
  • Steuern von Dateien, die von anderen Systemen erstellt werden und die von Azure Databricks erfasst oder aufgerufen werden müssen.
  • Steuern der von Azure Databricks erzeugten Daten, auf die von anderen Systemen direkt aus dem Cloudobjektspeicher zugegriffen werden muss.

Externe Volumes müssen Verzeichnisse innerhalb externer Speicherorte sein, die von Unity Catalog-Speicheranmeldeinformationen gesteuert werden. Unity Catalog verwaltet weder den Lebenszyklus noch das Layout der Dateien auf externen Volumes. Wenn Sie ein externes Volume löschen, löscht Unity Catalog die zugrunde liegenden Daten nicht.

Hinweis

Wenn Sie ein Volume definieren, wird der Cloud-URI-Zugriff auf Daten im Volumepfad durch die Berechtigungen des Volumes gesteuert.

Welcher Pfad wird für den Zugriff auf Dateien auf einem Volume verwendet?

Der Pfad für den Zugriff auf Volumes ist identisch, unabhängig davon, ob Sie Apache Spark, SQL, Python oder andere Sprachen und Bibliotheken verwenden. Dies unterscheidet sich von älteren Zugriffsmustern für Dateien im Objektspeicher, der an einen Azure Databricks-Arbeitsbereich gebunden ist.

Der Pfad für den Zugriff auf Dateien in Volumes verwendet das folgende Format:

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

Azure Databricks unterstützt außerdem ein optionales dbfs:/-Schema bei der Arbeit mit Apache Spark, sodass der folgende Pfad ebenfalls funktioniert:

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

Die Sequenz /<catalog>/<schema>/<volume> im Pfad entspricht den drei Unity Catalog-Objektnamen, die der Datei zugeordnet sind. Diese Pfadelemente sind schreibgeschützt und können von Benutzer*innen nicht direkt geschrieben werden, was bedeutet, dass es nicht möglich ist, diese Verzeichnisse mithilfe von Dateisystemvorgängen zu erstellen oder zu löschen. Sie werden automatisch verwaltet und mit den entsprechenden UC-Entitäten synchronisiert.

Hinweis

Sie können auch auf Daten in externen Volumes zugreifen, indem Sie Cloudspeicher-URIs verwenden.

Welche Berechtigungen gelten für Volumes?

Volumes verwenden das gleiche grundlegende Berechtigungsmodell wie Tabellen, aber während sich Berechtigungen für Tabellen auf das Gewähren des Zugriffs auf Abfragen und Bearbeiten von Zeilen in einer Tabelle konzentrieren, konzentrieren sich Berechtigungen für Volumes auf die Arbeit mit Dateien. Daher führen Volumes die folgenden Berechtigungen ein:

Weitere Informationen finden Sie unter Unity Catalog-Berechtigungen und sicherungsfähige Objekte.

Wer kann Volumeberechtigungen verwalten?

Sie müssen über Besitzerberechtigungen für ein Volume verfügen, um Volumeberechtigungen verwalten oder Volumes löschen zu können. Jedem Objekt in Unity Catalog kann nur ein Prinzipal als Besitzer zugewiesen sein, und während der Besitz nicht kaskadiert (d. h. der Besitzer eines Katalogs wird nicht automatisch zum Besitzer aller Objekte in diesem Katalog), gelten die dem Besitz zugeordneten Berechtigungen für alle Objekte, die in einem Objekt enthalten sind.

Dies bedeutet, dass für Unity Catalog-Volumes die folgenden Prinzipale Volumeberechtigungen verwalten können:

  • Der Besitzer des übergeordneten Katalogs.
  • Der Besitzer des übergeordneten Schemas.
  • Der Besitzer des Volumes.

Während jedes Objekt nur einen einzelnen Besitzer haben kann, empfiehlt Databricks, den Besitz für die meisten Objekte einer Gruppe und nicht einem einzelnen Benutzer zuzuweisen. Der anfängliche Besitz für jedes Objekt wird dem Benutzer zugewiesen, der dieses Objekt erstellt. Weitere Informationen finden Sie unter Verwalten des Unity Catalog-Objektbesitzes.

Erstellen eines verwalteten Volumes

Sie benötigen die folgenden Berechtigungen, um ein verwaltetes Volume zu erstellen:

Ressource Erforderliche Berechtigungen
Schema USE SCHEMA, CREATE VOLUME
Katalog USE CATALOG

Sql

Verwenden Sie die folgende Syntax, um ein verwaltetes Volume zu erstellen:

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

Katalog-Explorer

So erstellen Sie ein verwaltetes Volume im Katalog-Explorer:

  1. Klicken Sie in Ihrem Azure Databricks-Arbeitsbereich auf Symbol „Katalog“Katalog.
  2. Suchen Sie nach dem Schema, dem Sie das Volume hinzufügen möchten, und wählen Sie es aus.
  3. Klicken Sie auf die Schaltfläche Create Volume (Volume erstellen). (Sie müssen über ausreichende Berechtigungen verfügen.)
  4. Geben Sie einen Namen für das Volume ein.
  5. Fügen Sie einen Kommentar hinzu (optional).
  6. Klicken Sie auf Erstellen.

Erstellen eines externen Volumes

Sie benötigen die folgenden Berechtigungen, um ein externes Volume zu erstellen:

Ressource Erforderliche Berechtigungen
Externer Speicherort CREATE EXTERNAL VOLUME
Schema USE SCHEMA, CREATE VOLUME
Katalog USE CATALOG

Sql

Um ein externes Volume zu erstellen, geben Sie einen Pfad innerhalb eines externen Speicherorts mit der folgenden Syntax an:

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

Katalog-Explorer

So erstellen Sie ein externes Volume im Katalog-Explorer:

  1. Klicken Sie in Ihrem Azure Databricks-Arbeitsbereich auf Symbol „Katalog“Katalog.
  2. Suchen Sie nach dem Schema, dem Sie das Volume hinzufügen möchten, und wählen Sie es aus.
  3. Klicken Sie auf die Schaltfläche Create Volume (Volume erstellen). (Sie müssen über ausreichende Berechtigungen verfügen.)
  4. Geben Sie einen Namen für das Volume ein.
  5. Wählen Sie einen externen Speicherort aus, an dem das Volume erstellt werden soll.
  6. Bearbeiten Sie den Pfad, um das Unterverzeichnis widerzuspiegeln, in dem Sie das Volume erstellen möchten.
  7. Fügen Sie einen Kommentar hinzu (optional).
  8. Klicken Sie auf Erstellen.

Löschen eines Volumes

Nur Benutzer*innen mit Besitzerberechtigungen können ein Volume löschen. Weitere Informationen finden Sie unter Wer kann Volumeberechtigungen verwalten?.

Verwenden Sie die folgende Syntax, um ein Volume zu löschen:

DROP VOLUME IF EXISTS <volume-name>;

Wenn Sie ein verwaltetes Volume löschen, löscht Azure Databricks die zugrunde liegenden Daten innerhalb von 30 Tagen. Wenn Sie ein externes Volume löschen, entfernen Sie das Volume aus Unity Catalog, aber die zugrunde liegenden Daten bleiben am externen Speicherort unverändert erhalten.

Lesen von Dateien in einem Volume

Sie müssen über die folgenden Berechtigungen verfügen, um den Inhalt eines Volumes anzuzeigen oder auf Dateien zuzugreifen, die auf Volumes gespeichert sind:

Ressource Erforderliche Berechtigungen
Lautstärke READ
Schema USE SCHEMA
Katalog USE CATALOG

Sie interagieren mit dem Inhalt von Volumes mithilfe von Pfaden. Weitere Informationen finden Sie unter Welcher Pfad wird für den Zugriff auf Dateien auf einem Volume verwendet?.

Erstellen, Löschen und Ausführen anderer Dateiverwaltungsvorgänge auf einem Volume

Sie müssen über die folgenden Berechtigungen zum Ausführen von Dateiverwaltungsvorgängen für Dateien, die auf Volumes gespeichert sind, verfügen:

Ressource Erforderliche Berechtigungen
Lautstärke READ, WRITE
Schema USE SCHEMA
Katalog USE CATALOG

Sie können Dateiverwaltungsvorgänge auf Volumes mit den folgenden Tools ausführen:

Ausführliche Informationen zur programmgesteuerten Interaktion mit Dateien auf Volumes finden Sie unter Arbeiten mit Dateien in Unity Catalog-Volumes.

Beispielnotebook: Erstellen von und Arbeiten mit Volumes

Das folgende Notebook veranschaulicht die grundlegende SQL-Syntax zum Erstellen von und Interagieren mit Unity Catalog-Volumes.

Tutorial: Notebook für Unity Catalog-Volumes

Notebook abrufen

Reservierte Pfade für Volumes

Volumes führen die folgenden reservierten Pfade ein, die für den Zugriff auf Volumes verwendet werden:

  • dbfs:/Volumes
  • /Volumes

Hinweis

Pfade sind auch für potenzielle Tippfehler für diese Pfade aus Apache Spark-APIs und dbutils, einschließlich /volumes, /Volume, /volume reserviert, unabhängig davon, ob ihnen dbfs:/ vorangestellt ist. Der Pfad /dbfs/Volumes ist ebenfalls reserviert, kann aber nicht für den Zugriff auf Volumes verwendet werden.

Volumes werden erst ab Databricks Runtime 13.3 LTS unterstützt. In Databricks Runtime 12.2 LTS und früheren Versionen können Vorgänge für /Volumes-Pfade zwar erfolgreich sein, aber möglicherweise Daten auf kurzlebige Speicherdatenträger schreiben, die an Computecluster angefügt sind, anstatt Daten wie erwartet auf Unity Catalog-Volumes zu speichern.

Wichtig

Wenn Sie bereits vorhandene Daten in einem reservierten Pfad im DBFS-Stamm gespeichert haben, können Sie ein Supportticket erstellen, um temporären Zugriff auf diese Daten zu erhalten und sie an einen anderen Speicherort zu verschieben.

Begrenzungen

Um mit Unity Catalog-Volumes zu interagieren, müssen Sie Unity Catalog-fähiges Compute verwenden. Volumes unterstützen nicht alle Workloads.

Hinweis

Volumes unterstützen keine dbutils.fs-Befehle, die an Executoren verteilt werden.

Es gelten die folgenden Einschränkungen:

In Databricks Runtime 14.3 LTS und höheren Versionen:

  • Bei Einzelbenutzerbenutzerclustern können Sie nicht von Threads und Unterprozessen in Scala auf Volumes zugreifen.

Databricks Runtime 14.2 und niedriger:

  • Bei Computeressourcen, die mit dem Modus für den gemeinsamen Zugriff konfiguriert sind, können Sie UDFs nicht für den Zugriff auf Volumes verwenden.
    • Sowohl Python als auch Scala haben Zugriff auf FUSE über den Treiber, aber nicht über Executors.
    • Scala-Code, der E/A-Vorgänge ausführt, kann auf dem Treiber ausgeführt werden, aber nicht auf den Executors.
  • Bei Computeressourcen, die mit dem Zugriffsmodus für Einzelbenutzer konfiguriert sind, gibt es keine Unterstützung für FUSE in Scala, Scala-E/A-Code, der auf Daten mithilfe von Volumepfaden zugreift, oder Scala-UDFs. Python-UDFs werden im Zugriffsmodus für Einzelbenutzer unterstützt.

Alle unterstützten Databricks Runtime-Versionen:

  • Unity Catalog UDFs unterstützen nicht den Zugriff auf Volumedateipfade.

  • Sie können nicht über RDDs auf Volumes zugreifen.

  • Sie können spark-submit nicht mit JARs verwenden, die in einem Volume gespeichert sind.

  • Sie können keine Abhängigkeiten für andere Bibliotheken definieren, auf die über Volumepfade innerhalb einer Wheel- oder JAR-Datei zugegriffen wird.

  • Sie können Unity Catalog-Objekte nicht mit dem /Volumes/<catalog-name> oder /Volumes/<catalog-name>/<schema-name>-Muster auflisten. Sie müssen einen vollqualifizierten Pfad verwenden, der einen Volumenamen enthält.

  • Der DBFS-Endpunkt für die REST-API unterstützt keine Volumepfade.

  • Volumes werden von globalen Suchergebnissen im Azure Databricks-Arbeitsbereich ausgeschlossen.

  • Sie können keine Volumes als Ziel für die Clusterprotokollübermittlung angeben.

  • %sh mv wird für das Verschieben von Dateien zwischen Volumes nicht unterstützt. Verwenden Sie stattdessen dbutils.fs.mv oder %sh cp.

  • Sie können kein benutzerdefiniertes Hadoop-Dateisystem mit Volumes erstellen, was bedeutet, dass Folgendes nicht unterstützt wird:

    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)
    
  • Volumes sind in Azure Government-Regionen oder Arbeitsbereichen mit FedRAMP-Konformität nicht verfügbar.

  • Sie müssen das Pfadformat mit einem dbfs:/ Schema im Konfigurationsbereich der Azure Data Factory-Bibliothek verwenden. Beispiel: dbfs:/Volumes/<catalog-name>/<schema-name>/<volume-name>/file.