Partilhar via


Localizações externas

Aplica-se a:Marque Sim Databricks SQL Marque Sim Databricks Runtime Marque Sim Unity Catalog apenas

O Catálogo Unity e o metastore interno do Azure Databricks Hive usam locais padrão para tabelas gerenciadas. O Unity Catalog introduz vários novos objetos protegíveis para conceder privilégios aos dados no armazenamento de objetos na nuvem.

Localização externa

Um local externo é um objeto protegível que combina um caminho de armazenamento com uma credencial de armazenamento que autoriza o acesso a esse caminho.

O criador de um local externo é o seu proprietário inicial. O proprietário de um local externo pode modificar o nome, o URI e a credencial de armazenamento do local externo.

Depois que um local externo é criado, você pode conceder acesso a ele a entidades de segurança no nível da conta (usuários e grupos).

Um usuário ou grupo com permissão para usar um local externo pode acessar qualquer caminho de armazenamento dentro do caminho do local sem acesso direto à credencial de armazenamento.

Para refinar ainda mais o controle de acesso, você pode usar GRANT em tabelas externas para encapsular o acesso a arquivos individuais em um local externo.

Os nomes de locais externos não são qualificados e devem ser exclusivos dentro do metastore.

O caminho de armazenamento de qualquer local externo não pode estar contido no caminho de armazenamento de outro local externo ou no caminho de armazenamento de uma tabela externa usando uma credencial de armazenamento explícita.

Aviso

Se um esquema (banco de dados) estiver registrado no metastore do Hive no nível do espaço de trabalho, descartar esse esquema usando a CASCADE opção fará com que todos os arquivos nesse local do esquema sejam excluídos recursivamente, independentemente do tipo de tabela (gerenciada ou externa).

Se o esquema estiver registrado em um metastore do Unity Catalog, os arquivos das tabelas gerenciadas do Unity Catalog serão excluídos recursivamente. No entanto, os arquivos para tabelas externas não são excluídos. Você deve gerenciar esses arquivos usando o provedor de armazenamento em nuvem diretamente.

Portanto, para evitar a perda acidental de dados, você nunca deve registrar um esquema em um metastore do Hive em um local com dados existentes. Também não deve criar novas tabelas externas em um local gerenciado por esquemas de metastore do Hive ou contendo tabelas gerenciadas do Unity Catalog.

Representação gráfica de relações

O diagrama a seguir descreve a relação entre:

  • Credenciais de armazenamento
  • Localizações externas
  • Tabelas externas
  • caminhos de armazenamento
  • Entidades do IAM
  • Contas de serviço do Azure

Diagrama ER de localização externa

Exemplos

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