Percorsi esterni

Si applica solo a:segno di spunta sì Catalogo Unity di Databricks SQL segno di spunta sì Databricks Runtime segno di spunta sì

Il catalogo unity e il metastore Hive di Azure Databricks incorporato usano percorsi predefiniti per le tabelle gestite. Unity Catalog introduce diversi nuovi oggetti a protezione diretta per concedere privilegi ai dati nell'archiviazione di oggetti cloud.

Posizione esterna

Un percorso esterno è un oggetto a protezione diretta che combina un percorso di archiviazione con credenziali di archiviazione che autorizza l'accesso a tale percorso.

L'autore di una posizione esterna è il proprietario iniziale. Il proprietario di una posizione esterna può modificare il nome, l'URI e le credenziali di archiviazione della posizione esterna.

Dopo aver creato una posizione esterna, è possibile concedere l'accesso a tale percorso alle entità a livello di account (utenti e gruppi).

Un utente o un gruppo con l'autorizzazione per l'uso di una posizione esterna può accedere a qualsiasi percorso di archiviazione all'interno del percorso della posizione senza accesso diretto alle credenziali di archiviazione.

Per perfezionare ulteriormente il controllo di accesso, è possibile usare GRANT su tabelle esterne per incapsulare l'accesso ai singoli file all'interno di un percorso esterno.

I nomi di posizione esterni non sono qualificati e devono essere univoci all'interno del metastore.

Il percorso di archiviazione di qualsiasi posizione esterna non può essere contenuto all'interno del percorso di archiviazione di un'altra posizione esterna o all'interno del percorso di archiviazione di una tabella esterna usando credenziali di archiviazione esplicite.

Avviso

Se uno schema (database) viene registrato nel metastore Hive a livello di area di lavoro, l'eliminazione dello schema tramite l'opzione determina l'eliminazione CASCADE ricorsiva di tutti i file nel percorso dello schema, indipendentemente dal tipo di tabella (gestito o esterno).

Se lo schema viene registrato in un metastore del catalogo Unity, i file per le tabelle gestite di Unity Catalog vengono eliminati in modo ricorsivo. Tuttavia, i file per le tabelle esterne non vengono eliminati. È necessario gestire questi file usando direttamente il provider di archiviazione cloud.

Pertanto, per evitare perdite accidentali di dati, è consigliabile non registrare mai uno schema in un metastore Hive in una posizione con dati esistenti. Né è consigliabile creare nuove tabelle esterne in una posizione gestita dagli schemi del metastore Hive o contenere tabelle gestite dal catalogo Unity.

Rappresentazione grafica delle relazioni

Il diagramma seguente descrive la relazione tra:

  • credenziali di archiviazione
  • posizioni esterne
  • tabelle esterne
  • percorsi di archiviazione
  • Entità IAM
  • Account del servizio di Azure

Diagramma ER della posizione esterna

Esempi

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