Ubicaciones externas
Se aplica a: Databricks SQL Databricks Runtime solo a Unity Catalog
Unity Catalog y el metastore de Hive de Azure Databricks integrado usan ubicaciones predeterminadas para las tablas administradas. Unity Catalog presenta varios nuevos objetos protegibles para conceder privilegios a los datos en el almacenamiento de objetos en la nube.
-
Objeto de Unity Catalog que se usa para abstraer credenciales a largo plazo de los proveedores de almacenamiento en la nube.
-
Objeto de Unity Catalog que se usa para asociar un URI de almacenamiento de objetos en la nube con una credencial de almacenamiento.
-
Tabla de Unity Catalog creada en una ubicación externa administrada por Unity Catalog.
Ubicación externa
Una ubicación externa es un objeto protegible que combina una ruta de acceso de almacenamiento con una credencial de almacenamiento que autoriza el acceso a esa ruta de acceso.
El creador de una ubicación externa es su propietario inicial. El propietario de una ubicación externa puede modificar el nombre, el URI y la credencial de almacenamiento de la ubicación externa.
Una vez creada una ubicación externa, puede conceder acceso a ella a entidades de seguridad de nivel de cuenta (usuarios y grupos).
Un usuario o grupo con permiso para usar una ubicación externa puede acceder a cualquier ruta de acceso de almacenamiento dentro de la ruta de acceso de la ubicación sin acceso directo a la credencial de almacenamiento.
Para refinar aún más el control de acceso, puede usar GRANT en tablas externas para encapsular el acceso a archivos individuales dentro de una ubicación externa.
Los nombres de ubicaciones externas no están completos y deben ser únicos dentro del repositorio metastore.
La ruta de acceso de almacenamiento de cualquier ubicación externa no puede estar incluida en la ruta de acceso de almacenamiento de otra ubicación externa ni en la ruta de acceso de almacenamiento de una tabla externa mediante una credencial de almacenamiento explícita.
Advertencia
Si un esquema (base de datos) está registrado en el metastore de Hive de nivel de área de trabajo, quitar ese esquema con la opción CASCADE
hace que todos los archivos de esa ubicación de esquema se eliminen de forma recursiva, independientemente del tipo de tabla (administrada o externa).
Si el esquema se registra en un metastore de catálogos de Unity, los archivos de las tablas administradas por el catálogo de Unity se eliminan de forma recursiva. Sin embargo, los archivos de las tablas externas no se eliminan. Debe administrar esos archivos mediante el proveedor de almacenamiento en la nube directamente.
Por lo tanto, para evitar la pérdida accidental de datos, nunca debe registrar un esquema de un metastore de Hive en una ubicación con datos existentes. Tampoco debe crear nuevas tablas externas en una ubicación administrada por esquemas de metastore de Hive o que contenga tablas administradas por el catálogo de Unity.
Representación gráfica de relaciones
En el diagrama siguiente se describe la relación entre:
- credenciales de almacenamiento
- ubicaciones externas
- tablas externas
- rutas de acceso de almacenamiento
- entidades IAM
- cuentas de servicio de Azure
Ejemplos
-- 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