Compartilhar via


Locais externos

Aplica-se a: verificação marcada como sim SQL do Databricks verificação marcada como sim Runtime do Databricks marca de seleção positiva Somente Catálogo do Unity

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

Local externo

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 é seu proprietário inicial. O proprietário de um local externo pode modificar o nome, a URI e a credencial de armazenamento do local externo.

Após um local externo ser criado, você pode conceder acesso a ele para entidade de segurança (usuários e grupos) com nível de conta.

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

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

Nomes de locais externos não são qualificados e devem ser exclusivos no metastore.

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

Aviso

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

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

Portanto, para evitar a perda acidental de dados, você nunca deve registrar um esquema em um metastore do Hive em um local em que já haja dados. Você também não deve criar novas tabelas externas em um local gerenciado por esquemas de metastore do Hive nem que contenha tabelas gerenciadas do Catálogo do Unity.

Representação gráfica de relacionamentos

O diagrama a seguir mostra o relacionamento entre:

  • credenciais de armazenamento
  • locais externos
  • tabelas externas
  • caminhos de armazenamento
  • entidades IAM
  • contas de serviço do Azure

Diagrama de ER de um local externo

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