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


Выполнение федеративных запросов в Snowflake

В этой статье описывается, как set федерации Lakehouse для выполнения федеративных запросов к данным Snowflake, которые не управляются Azure Databricks. Дополнительные сведения о Федерации Lakehouse см. в статье "Что такое Федерация Lakehouse?".

Чтобы подключиться к базе данных Snowflake, используя федерацию Lakehouse, в хранилище метаданных Azure Databricks Unity Catalog необходимо создать следующее:

  • Подключение к базе данных Snowflake.
  • внешний catalog, который отражает базу данных Snowflake в Unity Catalog, чтобы использовать синтаксис запросов Unity Catalog и инструменты управления данными для управления доступом пользователей Azure Databricks к базе данных.

Подготовка к работе

Требования к рабочей области:

  • Рабочая область, включенная для Unity Catalog.

Требования к вычислениям:

  • Сетевое подключение от вычислительного ресурса к целевым системам баз данных. См . рекомендации по сети для Федерации Lakehouse.
  • Вычислительные ресурсы Azure Databricks должны использовать Databricks Runtime 13.3 LTS или более поздней версии, а также режим общего доступа или режим доступа одного пользователя.
  • Хранилища SQL должны быть профессиональными или бессерверными и должны использовать 2023.40 или более поздней версии.

Необходимые разрешения:

  • Чтобы создать подключение, необходимо быть администратором хранилища метаданных или пользователем с правами CREATE CONNECTION в хранилище метаданных Unity Catalog, подключенном к рабочей области.
  • Чтобы создать внешний catalog, необходимо иметь разрешение CREATE CATALOG на хранилище метаданных и быть владельцем подключения или иметь права CREATE FOREIGN CATALOG для подключения.

Дополнительные требования к разрешениям указываются в каждом разделе на основе задач, который следует выполнить.

  • Если вы планируете пройти проверку подлинности с помощью OAuth, создайте интеграцию безопасности в консоли Snowflake.
  • Если вы планируете пройти проверку подлинности с помощью маркера доступа OAuth, необходимо также запросить маркер доступа.

(Необязательно) Создание интеграции безопасности в консоли Snowflake

Если вы хотите пройти проверку подлинности с помощью OAuth, следуйте этому шагу перед созданием подключения Snowflake. Чтобы выполнить проверку подлинности с помощью имени пользователя и пароля, пропустите этот раздел.

Примечание.

Поддерживается только встроенная интеграция OAuth Snowflake. Внешние интеграции OAuth, такие как Okta или Идентификатор Microsoft Entra, не поддерживаются.

В консоли Snowflake выполните команду CREATE SECURITY INTEGRATION. Замените valuesна следующее:

  • <integration-name>: уникальное имя для интеграции OAuth.

  • <workspace-url>: URL-адрес рабочей области Azure Databricks. Для setнеобходимо OAUTH_REDIRECT_URIhttps://<workspace-url>/login/oauth/snowflake.html; where<workspace-url> является уникальным URL-адресом рабочей области Azure Databricks, в которой вы создадите подключение Snowflake where.

  • <duration-in-seconds>: длительность времени для токенов refresh.

    Внимание

    OAUTH_REFRESH_TOKEN_VALIDITY — это настраиваемое поле, которое по умолчанию set до 90 дней. После истечения срока действия маркера refresh необходимо повторно пройти проверку подлинности подключения. Set поле до разумной длительности времени.

CREATE SECURITY INTEGRATION <integration-name>
TYPE = oauth
ENABLED = true
OAUTH_CLIENT = custom
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://<workspace-url>/login/oauth/snowflake.html'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = <duration-in-seconds>
OAUTH_ENFORCE_PKCE = TRUE;

(Необязательно) Запросить токен доступа OAuth

Следуйте руководству : Generate и используйте маркер OAuth с помощью Snowflake OAuth для пользовательских клиентов в базе знаний Snowflake.

Создание подключения

Подключение указывает путь и credentials для доступа к внешней системе базы данных. Чтобы создать подключение, можно использовать обозреватель Catalog или команду SQL CREATE CONNECTION в записной книжке Azure Databricks или редакторе sql-запросов Databricks.

Примечание.

Для создания подключения можно также использовать REST API Databricks или интерфейс командной строки Databricks. POST /api/2.1/unity-catalog/connections и команды Unity Catalog.

Необходимые разрешения: администратор хранилища метаданных или пользователь с привилегиями CREATE CONNECTION .

Обозреватель Catalog

  1. В рабочей области Azure Databricks щелкните значок CatalogCatalog.

  2. В верхней части области Catalog щелкните значок Добавить или плюсзначок "Добавить" и selectДобавить подключения в меню.

    Кроме того, на странице быстрого доступа нажмите кнопку > внешних данных , перейдите на вкладку Connections и щелкните Создать подключение .

  3. На странице основы подключения мастера установки подключения введитепонятное имя подключения.

  4. Select тип подключения Snowflake.

  5. Для типа проверки подлинности выберите selectUsername and password (обычная проверка подлинности), OAuth access token, PEM Private Keyили OAuth из раскрывающегося меню.

  6. (Необязательно) Добавьте комментарий.

  7. Нажмите кнопку Далее.

  8. Введите следующие сведения о проверке подлинности и подключении для хранилища Snowflake. Свойства, относящиеся к выбранному методу проверки подлинности, предшествуют Auth type в скобках.

    • Узел: например, snowflake-demo.east-us-2.azure.snowflakecomputing.com

    • Порт: например, 443

    • Пользователь: например, snowflake-user

    • (Обычная проверка подлинности) пароля: например, password123

    • (Маркер доступа OAuth) Маркер доступа: Маркер доступа из (необязательно) Запрос маркера доступа OAuth.

    • (Маркер доступа OAuth) истекает в секундах: время окончания срока действия (в секундах) для маркера доступа из (необязательно) Запрос маркера доступа OAuth (expires_in).

    • (OAuth) идентификатор клиента: в консоли Snowflake выполните SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>'), чтобы получить идентификатор клиента для интеграции безопасности.

    • (OAuth) секрет клиента: в консоли Snowflake запустите SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>'), чтобы получить этот секрет клиента для интеграции безопасности.

    • (OAuth) область применения OAuth: refresh_token session:role:<role-name>. Укажите роль Snowflake для использования <role-name>.

    • (OAuth) вход с помощью Snowflake: щелкните и войдите в Snowflake с помощью credentialsOAuth.

    • (Закрытый ключ PEM) закрытый ключ PEM: закрытый ключ из пары ключей RSA в формате HEX64.

    • (Закрытый ключ PEM) истекает в секундах: время окончания срока действия (в секундах) для подключения, сделанного с закрытым ключом.

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

  9. Щелкните Создать подключение.

  10. (Обычная проверка подлинности) На странице сведений о подключении укажите следующее:

    • Склад Snowflake: например, my-snowflake-warehouse
    • (Необязательно) узел прокси-сервера: узел прокси-сервера, используемый для подключения к Snowflake. Кроме того, необходимо selectиспользовать прокси-сервер и указать порт прокси-сервера.
    • (Необязательно) использовать прокси-сервер: следует ли подключаться к Snowflake с помощью прокси-сервера.
    • (Необязательно) порт прокси-сервера: порт прокси-сервера, используемый для подключения к Snowflake. Кроме того, необходимо selectиспользовать прокси и указать узел прокси.
    • (Необязательно) роль Snowflake: роль безопасности по умолчанию, используемая для сеанса после подключения.
  11. Нажмите кнопку Далее.

  12. На странице основ Catalog введите имя для внешнего catalog. Внешний catalog дублирует базу данных во внешней системе хранения данных, чтобы можно было выполнять запросы и управлять доступом к данным в этой базе данных с помощью Azure Databricks и Unity Catalog.

  13. (Необязательно) Нажмите кнопку "Проверить подключение" , чтобы убедиться, что она работает.

  14. Щелкните Создать catalog.

  15. На странице Access указаны рабочие области select, в которых пользователи могут получить доступ к созданным вами catalog. Вы можете selectвсе рабочие области имеют доступили щелкните Назначить рабочим областям, select рабочих областей, а затем щелкните Назначить.

  16. Измените владельца, который сможет управлять доступом ко всеми объектам в catalog. Начните вводить основной элемент в текстовом поле, а затем щелкните его в результатах поиска.

  17. Grant привилегии на catalog. Щелкните Grant:

    1. Укажите субъекты , у которых будет доступ к объектам в catalog. Начните вводить основной элемент в текстовом поле, а затем щелкните его в результатах поиска.
    2. Select назначает предустановки привилегий grant каждому субъекту. Все пользователи учетной записи по умолчанию получают BROWSE.
      • Select чтение данных из раскрывающегося меню, чтобы grantread привилегии для объектов в catalog.
      • редактора данных из раскрывающегося меню, чтобы и привилегии для объектов в .
      • Вручную select привилегии для grant.
    3. Щелкните Grant.
  18. Нажмите кнопку Далее.

  19. Укажите на странице метаданных пары "ключ-значение" тегов. Дополнительные сведения см. в статье Применение тегов к объектам Catalog Unity, которые могут быть защищены.

  20. (Необязательно) Добавьте комментарий.

  21. Нажмите Сохранить.

SQL

Выполните следующую команду в записной книжке или редакторе sql-запросов Databricks.

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user '<user>',
  password '<password>'
);

Мы рекомендуем использовать секреты azure Databricks вместо строк открытого текста для конфиденциальных values, таких как credentials. Например:

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

Сведения о настройке секретов см. в разделе "Управление секретами".

Создание внешнего catalog

Примечание.

Если вы используете пользовательский интерфейс для создания подключения к источнику данных, включается создание внешнего catalog, и вы можете пропустить этот шаг.

Внешний catalog дублирует базу данных во внешней системе хранения данных, чтобы можно было выполнять запросы и управлять доступом к данным в этой базе данных с помощью Azure Databricks и Unity Catalog. Чтобы создать внешний catalog, вы используете подключение к источнику данных, уже определенному.

Чтобы создать внешнюю catalog, можно использовать обозреватель Catalog или команду SQL CREATE FOREIGN CATALOG в записной книжке Azure Databricks или редакторе SQL-запросов.

Для создания catalogможно также использовать REST API Databricks или интерфейс командной строки Databricks. POST /api/2.1/unity-catalog/catalogs и команды Unity Catalog.

Необходимые разрешения:CREATE CATALOG разрешение на хранилище метаданных и право владения подключением или CREATE FOREIGN CATALOG привилегией подключения.

Обозреватель Catalog

  1. В рабочей области Azure Databricks щелкните значок CatalogCatalog, чтобы открыть обозреватель Catalog.

  2. В верхней части области Catalog щелкните значок Добавить или плюсзначок "Добавить" и selectДобавить catalog в меню.

    Кроме того, на странице быстрого доступа нажмите кнопку и нажмите кнопку "Создать ".

  3. Следуйте инструкциям по созданию внешних catalogs в Создать catalogs.

SQL

Выполните следующую команду SQL в редакторе запросов записной книжки или SQL. Элементы в квадратных скобках являются необязательными. Замените заполнитель values:

  • <catalog-name>: имя catalog в Azure Databricks.
  • <connection-name>: объект подключения , указывающий источник данных, путь и доступ credentials.
  • <database-name>. Имя базы данных, которую вы хотите зеркально отображать как catalog в Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

Идентификаторы базы данных с учетом регистра

Поле database из внешнего catalog сопоставляется с базой данных Snowflake identifier. Если база данных Snowflake identifier не учитывает регистр, регистр, используемый в иностранном catalog<database-name>, сохраняется. Однако если база данных Snowflake identifier чувствительна к регистру, необходимо заключить внешний catalog<database-name> в двойные кавычки, чтобы сохранить регистр.

Например:

  • database преобразуется в DATABASE

  • "database" преобразуется в database

  • "database""" преобразуется в database"

    Чтобы избежать двойной кавычки, используйте еще одну двойную кавычку.

  • "database"" приводит к ошибке, так как двойные кавычки не побеждаются правильно.

Дополнительные сведения см. в требованиях Identifier в документации по Snowflake.

Поддерживаемые pushdowns

Поддерживаются следующие pushdown:

  • Фильтры
  • Проекции.
  • Limit
  • Объединения
  • Агрегаты (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StdevSamp, Sum, VariancePop, VarianceSamp)
  • Функции (строковые функции, математические функции, функции data, time и timestamp и другие прочие функции, такие как псевдоним, приведение, сортировка)
  • Функции Windows (DenseRank, Rank, RowNumber)
  • Сортировка

Сопоставление типов данных

При чтении из Snowflake в Spark типы данных сопоставляются следующим образом:

Тип Snowflake Тип Spark
десятичная, числовая, числовая DecimalType
bigint, byteint, int, integer, smallint, tinyint IntegerType
float, float4, float8 FloatType
double, double precision, real DoubleType
char, character, string, text, time, varchar StringType
binary BinaryType
boolean BooleanType
Дата DateType
datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz TimestampType

Ограничения OAuth

Ниже перечислены ограничения поддержки OAuth:

  • Конечная точка OAuth Snowflake должна быть доступна из IP-адресов уровня управления Databricks. См. исходящий трафик из плоскости управления Azure Databricks. Snowflake поддерживает настройку политик сети на уровне интеграции безопасности, что позволяет отдельной сетевой политике, которая обеспечивает прямое подключение от плоскости управления Databricks к конечной точке OAuth для авторизации.
  • Использование параметров конфигурации роли Proxy, Прокси-узла, прокси-порта и Snowflake. Укажите роль Snowflake в рамках области OAuth.

Ограничения закрытого ключа PEM

Ниже перечислены ограничения поддержки закрытого ключа PEM:

  • Драйвер Snowflake JDBC не поддерживает проверку подлинности с зашифрованными закрытыми ключами. Чтобы избежать ошибок, используйте ключ generate, к которому добавлен параметр -nocrypt, следующим образом:

    openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
    

Дополнительные ресурсы

См. следующие статьи в документации по Snowflake: