Freigeben über


Externe Speicherorte

Gilt für: Häkchen Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime durch Häkchen mit „Ja“ markiert Nur Unity Catalog

Unity Catalog und der integrierte Azure Databricks Hive-Metastore verwenden Standardspeicherorte für verwaltete Tabellen. Unity Catalog führt mehrere neue sicherungsfähige Objekte ein, um Daten im Cloudobjektspeicher Berechtigungen zu gewähren.

Externer Speicherort

Ein externer Speicherort ist ein sicherungsfähiges Objekt, das einen Speicherpfad mit Speicheranmeldeinformationen kombiniert, die einen Zugriff auf den betreffenden Pfad autorisieren.

Der Ersteller eines externen Standorts ist sein ursprünglicher Besitzer. Der Besitzer eines externen Speicherorts kann den Namen, den URI und die Speicheranmeldeinformationen des externen Speicherorts ändern.

Nachdem ein externer Speicherort erstellt wurde, können Sie Prinzipalen (Benutzer und Gruppen) auf Kontoebene Zugriff darauf gewähren.

Ein Benutzer oder eine Gruppe mit der Berechtigung, einen externen Speicherort zu verwenden, kann ohne direkten Zugriff auf die Speicheranmeldeinformationen auf jeden Speicherpfad innerhalb des Pfads des Speicherorts zugreifen.

Um die Zugriffssteuerung weiter zu verfeinern, können Sie GRANT für externe Tabellen verwenden, um den Zugriff auf einzelne Dateien an einem externen Speicherort zu kapseln.

Namen von externen Speicherorten werden ohne Qualifizierung angegeben, müssen aber im Metastore eindeutig sein.

Der Speicherpfad eines externen Speicherorts darf nicht im Speicherpfad eines anderen externen Speicherorts oder im Speicherpfad einer externen Tabelle mit expliziten Speicheranmeldeinformationen enthalten sein.

Warnung

Wenn ein Schema (Datenbank) in Ihrem Hive-Metastore auf Arbeitsbereichsebene registriert ist, führt das Löschen dieses Schemas mithilfe der Option CASCADE dazu, dass alle Dateien an diesem Schemaspeicherort rekursiv gelöscht werden, unabhängig vom Tabellentyp (verwaltet oder extern).

Wenn das Schema in einem Unity Catalog-Metastore registriert ist, werden die Dateien für verwaltete Unity Catalog-Tabellen rekursiv gelöscht. Die Dateien für externe Tabellen werden jedoch nicht gelöscht. Sie müssen diese Dateien direkt mithilde des Cloudspeicheranbieters verwalten.

Um versehentlichen Datenverlust zu vermeiden, sollten Sie daher niemals ein Schema in einem Hive-Metastore an einem Speicherort mit vorhandenen Daten registrieren. Sie sollten auch keine neuen externen Tabellen an einem Speicherort erstellen, der von Hive-Metastore-Schemas verwaltet wird oder verwaltete Unity Catalog-Tabellen enthält.

Grafische Darstellung von Beziehungen

Das folgende Diagramm veranschaulicht die Beziehung zwischen den folgenden Elementen:

  • Speicheranmeldeinformationen
  • Externe Speicherorte
  • Externe Tabellen
  • Speicherpfade
  • IAM-Entitäten
  • Azure-Dienstkonten

ER-Diagramm des externen Speicherorts

Beispiele

-- Grant `finance` user permission to create external location on `my_azure_storage_cred` storage credential, and then create an external location on the specific path to which `my_azure_storage_cred` has access
> GRANT CREATE EXTERNAL LOCATION ON STORAGE CREDENTIAL `my_azure_storage_cred` TO `finance`
> CREATE EXTERNAL LOCATION `finance_loc` URL 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance'
    WITH (CREDENTIAL `my_azure_storage_cred`)
    COMMENT 'finance';

-- Grant read, write, and create table access to the finance location to `finance` user
> GRANT READ FILES, WRITE FILES, CREATE EXTERNAL TABLE ON EXTERNAL LOCATION `finance_loc` TO `finance`;

-- `finance` can read from any storage path under abfss://depts/finance but nowhere else
> SELECT count(1) FROM `delta`.`abfss://container@storageaccount.dfs.core.windows.net/depts/finance` WITH (CREDENTIAL my_azure_storage_cred);
  100
> SELECT count(1) FROM `delta`.`abfss://container@storageaccount.dfs.core.windows.net/depts/hr/employees` WITH (CREDENTIAL my_azure_storage_cred);
  Error

-- `finance` can create an external table over specific object within the `finance_loc` location
> CREATE TABLE main.default.sec_filings LOCATION 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings';

-- Cannot list files under an external table with a user that doesn't have SELECT permission on it
> LIST 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings'
  Error
> LIST 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings/_delta_log'
  Error