Поделиться через


Внешние расположения

применяется:отмечено Databricks SQL отмечено Databricks Runtime отмечено Unity только Catalog

Unity Catalog и встроенное хранилище метаданных Azure Databricks Hive используют расположения по умолчанию для управляемых tables. Unity Catalog представляет несколько новых защищаемых объектов в рамках привилегий grant к данным в облачном объектном хранилище.

  • Учетные данные хранилища

    Объект Unity Catalog, используемый для абстрагирования долгосрочного хранения credentials из облачного хранилища providers.

  • Внешнее расположение

    Объект Unity Catalog, используемый для связывания URI облачного хранилища объектов с учетными данными хранилища .

  • внешние table

    Unity, созданный в внешнем расположении, управляемом Unity .

Внешнее расположение

Внешнее расположение — это защищаемый объект, который объединяет путь к хранилищу с учетными данными хранилища для авторизации доступа к этому пути.

Автор внешнего расположения является его первоначальным владельцем. Владелец внешней локации и пользователи с правами MANAGE могут изменять её имя, URI и учетные данные хранения.

После создания внешнего расположения вы можете grant доступ к нему субъектов уровня учетной записи (пользователи и группы).

Пользователь или группа с разрешением на использование внешнего расположения могут обращаться к любому пути в хранилище в пределах пути этого расположения без прямого доступа к учетным данным хранилища.

Для более точного управления доступом можно использовать GRANT на внешних tables для ограничения доступа к отдельным файлам в внешнем расположении.

Имена внешних расположений являются неполными и должны быть уникальными в пределах хранилища метаданных.

Путь к хранилищу любого внешнего расположения не может быть содержим в пути к хранилищу другого внешнего расположения или в пути к хранилищу внешнего ресурса tableпри использовании явных учетных данных для хранения.

Предупреждение

Если schema (база данных) зарегистрирована в хранилище метаданных Hive на уровне рабочей области, удаление этого schema с помощью опции CASCADE приводит к рекурсивному удалению всех файлов в расположении schema, независимо от типа table (управляемый или внешний).

Если schema зарегистрирован в Unity Catalog хранилище метаданных, файлы для управления Unity Catalogtables удаляются рекурсивно. Однако файлы для внешнего tables не удаляются. Эти файлы необходимо управлять напрямую с помощью поставщика облачных хранилищ.

Таким образом, чтобы избежать случайной потери данных, никогда не следует регистрировать schema в хранилище метаданных Hive в местоположении, где уже имеются данные. Не следует создавать внешние tables в расположении, управляемом схемами хранилища метаданных Hive, или содержать управляемые tablesUnity Catalog.

Графическое представление связей

На схеме ниже показана связь между следующими элементами:

  • Хранилище credentials
  • внешние расположения;
  • внешний tables
  • пути к хранилищу;
  • сущности IAM;
  • учетные записи службы Azure.

Схема внешнего расположения ER

Примеры

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