Выполнение федеративных запросов в 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_URI
https://<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
В рабочей области Azure Databricks щелкните значок Catalog.
В верхней части области Catalog щелкните значок значок "Добавить" и selectДобавить подключения в меню.
Кроме того, на странице быстрого доступа нажмите кнопку > внешних данных , перейдите на вкладку Connections и щелкните Создать подключение .
На странице
основы подключения мастераустановки введитепонятноеподключения имя подключения. Select тип подключения Snowflake.
Для типа проверки подлинности выберите select
Username and password
(обычная проверка подлинности),OAuth access token
,PEM Private Key
илиOAuth
из раскрывающегося меню.(Необязательно) Добавьте комментарий.
Нажмите кнопку Далее.
Введите следующие сведения о проверке подлинности и подключении для хранилища 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) истекает в секундах: время окончания срока действия (в секундах) для подключения, сделанного с закрытым ключом.
После успешного входа вы будете перенаправлены обратно в мастер подключения
.
Щелкните Создать подключение.
(Обычная проверка подлинности) На странице сведений о подключении
укажите следующее: -
Склад Snowflake: например,
my-snowflake-warehouse
- (Необязательно) узел прокси-сервера: узел прокси-сервера, используемый для подключения к Snowflake. Кроме того, необходимо selectиспользовать прокси-сервер и указать порт прокси-сервера.
- (Необязательно) использовать прокси-сервер: следует ли подключаться к Snowflake с помощью прокси-сервера.
- (Необязательно) порт прокси-сервера: порт прокси-сервера, используемый для подключения к Snowflake. Кроме того, необходимо selectиспользовать прокси и указать узел прокси.
- (Необязательно) роль Snowflake: роль безопасности по умолчанию, используемая для сеанса после подключения.
-
Склад Snowflake: например,
Нажмите кнопку Далее.
На странице основ Catalog введите имя для внешнего catalog. Внешний catalog дублирует базу данных во внешней системе хранения данных, чтобы можно было выполнять запросы и управлять доступом к данным в этой базе данных с помощью Azure Databricks и Unity Catalog.
(Необязательно) Нажмите кнопку "Проверить подключение" , чтобы убедиться, что она работает.
Щелкните Создать catalog.
На странице Access указаны рабочие области select, в которых пользователи могут получить доступ к созданным вами catalog. Вы можете selectвсе рабочие области имеют доступили щелкните Назначить рабочим областям, select рабочих областей, а затем щелкните Назначить.
Измените владельца, который сможет управлять доступом ко всеми объектам в catalog. Начните вводить основной элемент в текстовом поле, а затем щелкните его в результатах поиска.
Grant привилегии на catalog. Щелкните Grant:
- Укажите субъекты , у которых будет доступ к объектам в catalog. Начните вводить основной элемент в текстовом поле, а затем щелкните его в результатах поиска.
-
Select назначает предустановки привилегий grant каждому субъекту. Все пользователи учетной записи по умолчанию получают
BROWSE
.-
Select
чтение данных из раскрывающегося меню, чтобы grant
read
привилегии для объектов в catalog. - редактора данных
из раскрывающегося меню, чтобы и привилегии для объектов в . - Вручную select привилегии для grant.
-
Select
чтение данных из раскрывающегося меню, чтобы grant
- Щелкните Grant.
Нажмите кнопку Далее.
Укажите на странице метаданных пары "ключ-значение" тегов. Дополнительные сведения см. в статье Применение тегов к объектам Catalog Unity, которые могут быть защищены.
(Необязательно) Добавьте комментарий.
Нажмите Сохранить.
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
В рабочей области Azure Databricks щелкните значок Catalog, чтобы открыть обозреватель Catalog.
В верхней части области Catalog щелкните значок значок "Добавить" и selectДобавить catalog в меню.
Кроме того, на странице быстрого доступа
нажмите кнопку и нажмите кнопку "Создать ".Следуйте инструкциям по созданию внешних 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: