Externe locaties
Alleen van toepassing op: Databricks SQL Databricks Runtime Unity Catalog
Unity Catalog en de ingebouwde Azure Databricks Hive-metastore gebruiken standaardlocaties voor beheerde tabellen. Unity Catalog introduceert verschillende nieuwe beveiligbare objecten om bevoegdheden te verlenen aan gegevens in de cloudobjectopslag.
-
Een Unity Catalog-object dat wordt gebruikt om referenties voor de lange termijn te abstraheren van cloudopslagproviders.
-
Een Unity Catalog-object dat wordt gebruikt om een opslag-URI voor cloudobjecten te koppelen aan een opslagreferentie.
-
Een Unity Catalog-tabel die is gemaakt op een door de Unity Catalog beheerde externe locatie.
Externe locatie
Een externe locatie is een beveiligbaar object dat een opslagpad combineert met een opslagreferentie waarmee toegang tot dat pad wordt geautoriseerd.
De maker van een externe locatie is de oorspronkelijke eigenaar. De eigenaar van een externe locatie kan de naam, URI en opslagreferentie van de externe locatie wijzigen.
Nadat een externe locatie is gemaakt, kunt u deze toegang verlenen tot principals op accountniveau (gebruikers en groepen).
Een gebruiker of groep met machtigingen voor het gebruik van een externe locatie heeft toegang tot elk opslagpad binnen het pad van de locatie zonder directe toegang tot de opslagreferentie.
Als u het toegangsbeheer verder wilt verfijnen, kunt u GRANT voor externe tabellen gebruiken om de toegang tot afzonderlijke bestanden binnen een externe locatie in te kapselen.
Namen van externe locaties zijn niet gekwalificeerd en moeten uniek zijn binnen de metastore.
Het opslagpad van een externe locatie kan niet worden opgenomen in het opslagpad van een andere externe locatie of binnen het opslagpad van een externe tabel met behulp van een expliciete opslagreferentie.
Waarschuwing
Als een schema (database) is geregistreerd in de Hive-metastore op werkruimteniveau, wordt dat schema verwijderd met behulp van de CASCADE
optie, waardoor alle bestanden op die schemalocatie recursief worden verwijderd, ongeacht het tabeltype (beheerd of extern).
Als het schema is geregistreerd bij een Unity Catalog-metastore, worden de bestanden voor beheerde tabellen in Unity Catalog recursief verwijderd. De bestanden voor externe tabellen worden echter niet verwijderd. U moet deze bestanden rechtstreeks beheren met behulp van de cloudopslagprovider.
Om onbedoeld gegevensverlies te voorkomen, moet u daarom nooit een schema registreren in een Hive-metastore op een locatie met bestaande gegevens. U moet ook geen nieuwe externe tabellen maken op een locatie die wordt beheerd door Hive-metastoreschema's of die beheerde tabellen van Unity Catalog bevatten.
Grafische weergave van relaties
In het volgende diagram wordt de relatie tussen:
- opslagreferenties
- externe locaties
- externe tabellen
- opslagpaden
- IAM-entiteiten
- Azure-serviceaccounts
Voorbeelden
-- 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