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

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

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

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

На этой странице описывается, как выполнять федеративные запросы к данным Snowflake с помощью встроенной интеграции OAuth Snowflake. Сведения о других методах проверки подлинности см. на следующих страницах:

Федеративные запросы можно выполнять в Snowflake с помощью федерации запросов или федерации каталога.

В федерации запросов JDBC отправляет запрос каталога Unity вниз к внешней базе данных. Это идеально подходит для отчетов по запросу или проверки концепции на конвейерах ETL.

В федерации каталогов запрос Unity Catalog выполняется напрямую обращением к файловому хранилищу. Этот подход полезен для добавочной миграции без адаптации кода или в качестве долгосрочной гибридной модели для организаций, которые должны поддерживать некоторые данные в Snowflake вместе с данными, зарегистрированными в каталоге Unity. См. раздел "Включить федерацию каталога Snowflake".

Федерация запросов

Перед началом работы

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

  • Рабочая область активирована для Unity Catalog. Рабочие области, созданные после 9 ноября 2023 г., автоматически включены для каталога Unity, включая автоматическую подготовку хранилища метаданных. Вам не нужно создавать хранилище метаданных вручную, если ваша рабочая область была создана до автоматического включения и не была включена для Unity Catalog. См. автоматическое включение каталога Unity.

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

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

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

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

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

Создание интеграции безопасности

В консоли 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>: длительность действия токенов обновления.

    Important

    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;

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

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

Note

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

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

  1. В рабочей области Azure Databricks щелкните значок данных.Каталог.

  2. В верхней части области каталога щелкните значок " и выберите "Создать подключение" в меню.

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

  4. Выберите тип подключенияSnowflake.

  5. Для типа проверки подлинности выберите OAuth в раскрывающемся меню.

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

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

  8. Введите следующие сведения о проверке подлинности и подключении для хранилища Snowflake.

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

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

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

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

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

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

    • Войдите с помощью Snowflake: щелкните и войдите в Snowflake с помощью учетных данных OAuth.

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

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

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

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

  12. Нажмите Создать каталог.

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

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

  15. Предоставьте привилегии в каталоге. Нажмите Grant:

    1. Укажите принципалов , у которых будет доступ к объектам в каталоге. Начните вводить основной элемент в текстовом поле, а затем щелкните его в результатах поиска.
    2. Выберите предустановки привилегий , чтобы предоставить их каждому принципалу. Все пользователи учетной записи по умолчанию получают BROWSE.
      • В раскрывающемся меню выберите средство чтения данных , чтобы предоставить привилегии read объектам каталога.
      • Выберите редактор данных в выпадающем меню, чтобы предоставить привилегии read и modify для объектов в каталоге.
      • Вручную выберите привилегии для предоставления.
    3. Нажмите Grant.
  16. Нажмите кнопку Далее.

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

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

  19. Нажмите кнопку Сохранить.

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

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

Рассмотрим пример.

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

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

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

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

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

Дополнительные сведения см. в разделе "Требования к идентификатору" в документации по Snowflake.

Поддерживаемые продвижения

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

  • Filters
  • Projections
  • Limit
  • Joins
  • Агрегаты (Average, Corr, CovPopulation, CovSample, Count, Max, Min, StddevPop, StdevSamp, Sum, VariancePop, VarianceSamp)
  • Функции (строковые функции, математические функции, функции data, time и timestamp и другие прочие функции, такие как псевдоним, приведение, сортировка)
  • Функции Windows (DenseRank, Rank, RowNumber)
  • Sorting

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

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

Тип снежинка Тип Spark
десятичная, число, числовой DecimalType
bigint (большое целое число), byteint (байтовое целое число), int (целое число), integer (целое число), smallint (малое целое число), tinyint (крошечное целое число) IntegerType
float (вещественное число), float4 (четырёхкомпонентный вектор из вещественных чисел), float8 (восьмикомпонентный вектор из вещественных чисел) FloatType
двойной, двойная точность, вещественное число DoubleType
char, символ, строка, текст, время, varchar StringType
binary BinaryType
boolean BooleanType
date DateType
datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz TimestampType

Ограничения федерации запросов

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

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

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