Partage via


Emplacements externes

S’applique à : coche pour oui Databricks SQL coche marquée oui Databricks Runtime case marquée oui Unity Catalog uniquement

Unity Catalog et le metastore intégré Azure Databricks Hive utilisent des emplacements par défaut pour les tables managées. Unity Catalog introduit plusieurs nouveaux objets sécurisables pour accorder des privilèges aux données dans le stockage d’objets cloud.

Emplacement externe

Un emplacement externe est un objet sécurisable qui combine un chemin de stockage avec un identifiant de stockage qui autorise l’accès à ce chemin.

Le créateur d’un emplacement externe est son propriétaire initial. Le propriétaire d’un emplacement externe peut modifier le nom, l’URI et les informations d’identification de stockage de l’emplacement externe.

Après la création d’un emplacement externe, vous pouvez lui accorder l’accès aux principaux de niveau compte (utilisateurs et groupes).

Un utilisateur ou un groupe ayant l’autorisation d’utiliser un emplacement externe peut accéder à n’importe quel chemin de stockage dans le chemin de l’emplacement sans accès direct à l’identifiant de stockage.

Pour affiner le contrôle d’accès, vous pouvez utiliser l’instruction GRANT sur des tables externes pour encapsuler l’accès à des fichiers individuels au sein d’un emplacement externe.

Les noms d’emplacements externes ne sont pas qualifiés et doivent être uniques au sein du metastore.

Le chemin de stockage d’un emplacement externe ne peut pas être contenu dans le chemin de stockage d’un autre emplacement externe, ni dans celui d’une table externe à l’aide d’informations d’identification de stockage explicites.

Avertissement

Si un schéma (base de données) est inscrit dans votre metastore Hive au niveau de l’espace de travail, la suppression de ce schéma à l’aide de l’option CASCADE entraîne la suppression récursive de tous les fichiers de cet emplacement de schéma, quel que soit le type de table (managé ou externe).

Si le schéma est inscrit dans un metastore Unity Catalog, les fichiers des tables managées Unity Catalog sont supprimés de manière récursive. Toutefois, les fichiers des tables externes ne sont pas supprimés. Vous devez gérer ces fichiers directement à l’aide du fournisseur de stockage cloud.

Par conséquent, pour éviter toute perte accidentelle de données, vous ne devez jamais inscrire un schéma dans un metastore Hive à un emplacement contenant des données existantes. Vous ne devez pas non plus créer de tables externes dans un emplacement géré par des schémas de metastore Hive ou contenant des tables managées Unity Catalog.

Représentation graphique des relations

Le diagramme suivant décrit la relation entre les éléments suivants :

  • informations d’identification de stockage
  • emplacements externes
  • tables externes
  • chemins de stockage
  • entités IAM
  • comptes de service Azure

Diagramme ER des emplacements externes

Exemples

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