Выполнение федеративных запросов в Snowflake
В этой статье описывается, как настроить Федерацию Lakehouse для выполнения федеративных запросов к данным Snowflake, которые не управляются Azure Databricks. Дополнительные сведения о Федерации Lakehouse см. в статье "Что такое Федерация Lakehouse?".
Чтобы подключиться к базе данных Snowflake с помощью Федерации Lakehouse, необходимо создать следующее в хранилище метаданных каталога Azure Databricks Unity:
- Подключение к базе данных Snowflake.
- Внешний каталог , который отражает базу данных Snowflake в каталоге Unity, чтобы использовать синтаксис запросов каталога Unity и средства управления данными для управления доступом пользователей Azure Databricks к базе данных.
Подготовка к работе
Требования к рабочей области:
- Рабочая область включена для каталога Unity.
Требования к вычислениям:
- Сетевое подключение из кластера среды выполнения Databricks или хранилища SQL к целевым системам баз данных. См . рекомендации по сети для Федерации Lakehouse.
- Кластеры Azure Databricks должны использовать Databricks Runtime 13.3 LTS или более поздней версии и режим общего или однопользовательского доступа.
- Хранилища SQL должны быть профессиональными или бессерверными и должны использовать 2023.40 или более поздней версии.
Необходимые разрешения:
- Чтобы создать подключение, необходимо быть администратором хранилища метаданных или пользователем с
CREATE CONNECTION
привилегиями в хранилище метаданных каталога Unity, подключенном к рабочей области. - Чтобы создать внешний каталог, необходимо иметь
CREATE CATALOG
разрешение на хранилище метаданных и быть владельцем подключения или иметьCREATE FOREIGN CATALOG
привилегии для подключения.
Дополнительные требования к разрешениям указываются в каждом разделе на основе задач, который следует выполнить.
- Если вы планируете пройти проверку подлинности с помощью OAuth, создайте интеграцию безопасности в консоли Snowflake. Дополнительные сведения см. в следующем разделе.
(Необязательно) Создание интеграции безопасности в консоли Snowflake
Если вы хотите пройти проверку подлинности с помощью OAuth, следуйте этому шагу перед созданием подключения Snowflake. Чтобы выполнить проверку подлинности с помощью имени пользователя и пароля, пропустите этот раздел.
Примечание.
Поддерживается только встроенная интеграция OAuth Snowflake. Внешние интеграции OAuth, такие как Okta или Идентификатор Microsoft Entra, не поддерживаются.
В консоли Snowflake выполните команду CREATE SECURITY INTEGRATION
. Измените следующие значения:
<integration-name>
: уникальное имя для интеграции OAuth.<workspace-url>
: URL-адрес рабочей области Azure Databricks. Необходимо задать значениеOAUTH_REDIRECT_URI
https://<workspace-url>/login/oauth/snowflake.html
, где<workspace-url>
используется уникальный URL-адрес рабочей области Azure Databricks, где будет создано подключение Snowflake.<duration-in-seconds>
: продолжительность времени для маркеров обновления.Внимание
OAUTH_REFRESH_TOKEN_VALIDITY
— это настраиваемое поле, которое по умолчанию имеет значение 90 дней. После истечения срока действия маркера обновления необходимо повторно пройти проверку подлинности подключения. Задайте для поля разумное время.
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;
Создание подключения
Подключение задает путь и учетные данные для доступа к внешней системе базы данных. Чтобы создать подключение, можно использовать обозреватель каталогов или команду SQL в записной книжке Azure Databricks или CREATE CONNECTION
редакторе sql-запросов Databricks.
Примечание.
Для создания подключения можно также использовать REST API Databricks или интерфейс командной строки Databricks. См. статью POST /api/2.1/unity-catalog/connections и команды каталога Unity.
Необходимые разрешения: администратор хранилища метаданных или пользователь с привилегиями CREATE CONNECTION
.
Обозреватель каталогов
В рабочей области Azure Databricks щелкните "Каталог".
В верхней части области каталога щелкните значок "Добавить " и выберите " Добавить подключение " в меню.
Кроме того, на странице быстрого доступа нажмите кнопку "Внешние данные > ", перейдите на вкладку "Подключения " и нажмите кнопку "Создать подключение".
Введите понятное имя подключения.
Выберите тип подключения Snowflake.
Введите следующие свойства подключения для хранилища Snowflake.
- Тип проверки подлинности:
OAuth
илиUsername and password
- Узел: например,
snowflake-demo.east-us-2.azure.snowflakecomputing.com
- Порт: например,
443
- Склад Snowflake: например,
my-snowflake-warehouse
- Пользователь: например,
snowflake-user
- (OAuth) Идентификатор клиента: в консоли Snowflake запустите
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>')
, чтобы получить идентификатор клиента для интеграции безопасности. - (OAuth): секрет клиента: в консоли Snowflake запустите
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security_integration_name>')
, чтобы получить секрет клиента для интеграции безопасности. - (OAuth) Область клиента:
refresh_token session:role:<role-name>
. Укажите роль Snowflake для использования<role-name>
. - (Имя пользователя и пароль) Пароль: например,
password123
(OAuth) Вам будет предложено войти в Snowflake с помощью учетных данных OAuth.
- Тип проверки подлинности:
(Необязательно) Нажмите кнопку "Проверить подключение" , чтобы убедиться, что она работает.
(Необязательно) Добавьте комментарий.
Нажмите кнопку Создать.
SQL
Выполните следующую команду в записной книжке или редакторе sql-запросов Databricks.
CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
host '<hostname>',
port '<port>',
sfWarehouse '<warehouse-name>',
user '<user>',
password '<password>'
);
Рекомендуется использовать секреты Azure Databricks вместо строк открытого текста для конфиденциальных значений, таких как учетные данные. Например:
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>')
)
Сведения о настройке секретов см. в разделе "Управление секретами".
Создание внешнего каталога
Внешний каталог зеркально отражает базу данных во внешней системе данных, чтобы можно было запрашивать и управлять доступом к данным в этой базе данных с помощью Azure Databricks и каталога Unity. Чтобы создать внешний каталог, вы используете подключение к источнику данных, который уже определен.
Чтобы создать внешний каталог, можно использовать обозреватель каталогов или CREATE FOREIGN CATALOG
команду SQL в записной книжке Azure Databricks или редакторе запросов SQL.
Примечание.
Для создания каталога можно также использовать REST API Databricks или интерфейс командной строки Databricks. См. статью POST /api/2.1/unity-catalog/catalogs и команды каталога Unity.
Необходимые разрешения: CREATE CATALOG
разрешение на хранилище метаданных и право владения подключением или CREATE FOREIGN CATALOG
привилегией подключения.
Обозреватель каталогов
В рабочей области Azure Databricks щелкните каталог , чтобы открыть обозреватель каталогов.
В верхней части области каталога щелкните значок "Добавить " и выберите " Добавить каталог " в меню.
Кроме того, на странице быстрого доступа нажмите кнопку "Каталоги" и нажмите кнопку "Создать каталог ".
Следуйте инструкциям по созданию внешних каталогов в каталогах create.
SQL
Выполните следующую команду SQL в редакторе запросов записной книжки или SQL. Элементы в квадратных скобках являются необязательными. Замените значения-заполнители:
<catalog-name>
: имя каталога в Azure Databricks.<connection-name>
: объект подключения, указывающий источник данных, путь и учетные данные доступа.<database-name>
: имя базы данных, которую вы хотите зеркально отражать в качестве каталога в Azure Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
Идентификаторы базы данных с учетом регистра
Поле database
внешнего каталога сопоставляется с идентификатором базы данных Snowflake. Если идентификатор базы данных Snowflake не учитывает регистр, регистр, используемый в внешнем каталоге <database-name>
, сохраняется. Однако если идентификатор базы данных Snowflake учитывает регистр, необходимо упаковать внешний каталог <database-name>
в двойные кавычки, чтобы сохранить регистр.
Например:
database
преобразуется вDATABASE
"database"
преобразуется вdatabase
"database"""
преобразуется вdatabase"
Чтобы избежать двойной кавычки, используйте еще одну двойную кавычку.
"database""
приводит к ошибке, так как двойные кавычки не побеждаются правильно.
Дополнительные сведения см. в разделе "Требования к идентификатору" в документации по Snowflake.
Поддерживаемые pushdowns
Поддерживаются следующие pushdown:
- Фильтры
- Проекции.
- Лимит
- Объединения
- Агрегаты (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.
Дополнительные ресурсы
- Настройка OAuth Snowflake для пользовательских клиентов в документации по Snowflake
- Справочник по SQL: CREATE SECURITY INTEGRATION (Snowflake OAuth) в документации по Snowflake