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


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

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

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

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

Федерация Lakehouse поддерживает SQL Server, База данных SQL Azure и Управляемый экземпляр SQL Azure.

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

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

  • Включена рабочая область для каталога Unity.

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

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

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

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

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

  • Если вы планируете пройти проверку подлинности с помощью OAuth, зарегистрируйте приложение в идентификаторе Microsoft Entra для Azure Databricks. Дополнительные сведения см. в следующем разделе.

(Необязательно) Регистрация приложения в идентификаторе Microsoft Entra для Azure Databricks

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

  1. Войдите на портал Azure.
  2. В области навигации слева щелкните идентификатор Microsoft Entra.
  3. Щелкните Регистрация приложений.
  4. Щелкните Новая регистрация. Введите имя нового приложения и задайте URI перенаправления для https://<workspace-url>/login/oauth/azure.html.
  5. Щелкните Зарегистрировать.
  6. В поле Essentials скопируйте и сохраните идентификатор приложения (клиента). Это значение будет использоваться для настройки приложения.
  7. Щелкните сертификаты и секреты.
  8. В разделе Секреты клиента выберите Новый секрет клиента.
  9. Введите описание секрета и истечения срока действия (значение по умолчанию — 180 дней).
  10. Нажмите кнопку Добавить.
  11. Скопируйте созданное значение для секрета клиента.
  12. Щелкните разрешения API.
  13. Щелкните Добавить разрешение.
  14. Выберите Базу данных SQL Azure и щелкните user_impersonation в разделе Делегированные разрешения.
  15. Щелкните Добавить разрешения.

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

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

Примечание.

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

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

Обозреватель каталогов

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

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

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

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

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

  5. Выберите тип проверки подлинности OAuth или имени пользователя и пароля (обычная проверка подлинности).

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

  7. Нажмите Далее.

  8. На странице аутентификации введите следующие свойства подключения для экземпляра SQL Server. Свойства, относящиеся к выбранному методу проверки подлинности, предшествуют Auth type в скобках.

    • Узел: сервер SQL Server.
    • (Обычная проверка подлинности) Порт
    • (Обычная проверка подлинности) trustServerCertificate: по умолчанию false. Если задано значение true, транспортный слой использует SSL для шифрования канала и обхода цепочки сертификатов для проверки доверия. Оставьте значение по умолчанию, если у вас нет конкретной необходимости обойти проверку доверия.
    • (Обычная проверка подлинности) Пользователь
    • (Обычная проверка подлинности) Пароль
    • (OAuth) Конечная точка авторизации: конечная точка авторизации Azure Entra в формате https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize.
    • (OAuth) Идентификатор клиента из созданного приложения.
    • (OAuth) Секрет клиента из созданного секрета клиента.
    • (OAuth) сфера OAuth: введите следующее значение без изменений: https://database.windows.net/.default offline_access.
    • (OAuth) Щелкните Войти с использованием идентификатора Azure Entra ID. Введите имя пользователя и пароль Azure. После перенаправления на страницу проверки подлинности код авторизации заполняется в пользовательском интерфейсе.
  9. Щелкните Создать подключение.

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

    • сертификат сервера доверия. Этот параметр по умолчанию не выбран. При выборе уровень транспорта использует SSL для шифрования канала и обхода цепочки сертификатов для проверки доверия. Оставьте это по умолчанию, если у вас нет особой необходимости обойти проверку доверия.
    • намерение приложения: тип рабочей нагрузки приложения при подключении к серверу.
  11. Нажмите Далее.

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

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

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

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

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

  17. Предоставьте привилегии на каталоге. Щелкните Предоставить:

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

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

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

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

Примечание.

(OAuth) Конечная точка OAuth идентификатора Azure entra должна быть доступна из IP-адресов уровня управления Azure Databricks. Ознакомьтесь с регионами Azure Databricks.

SQL

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

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

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

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

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

Создание внешнего каталога

Примечание.

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

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

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

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

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

Обозреватель каталогов

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

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

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

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

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>');

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

Для всех вычислений поддерживаются следующие pushdown:

  • Фильтры
  • Проекции.
  • Предел
  • Функции: частичные, только для выражений фильтров. (Строковые функции, математические функции, функции data, Time и Timestamp и другие другие функции, такие как Псевдоним, Приведение, SortOrder)

Следующие pushdown поддерживаются в Databricks Runtime 13.3 LTS и более поздних версиях, а также в вычислительных ресурсах хранилища SQL:

  • Статистические выражения
  • Следующие логические операторы: =, =, <<=, =, >>=, <=>
  • Следующие математические функции (не поддерживаются при отключении ANSI): +, -, *, %, /
  • Следующие прочие операторы: ^, |, ~
  • Сортировка при использовании с ограничением

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

  • Объединения
  • Функции Windows

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

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

Тип SQL Server Тип Spark
bigint (без знака), десятичная, деньги, числовые, малые деньги DecimalType
smallint, tinyint ShortType
INT IntegerType
bigint (если подписан) LongType
real FloatType
с плавающей запятой DoubleType
char, nchar, uniqueidentifier CharType
nvarchar, varchar VarcharType
text, xml StringType
binary, geography, geometry, image, timestamp, udt, varbinary BinaryType
bit BooleanType
Дата DateType
datetime, datetime, smalldatetime, time TimestampType/TimestampNTZType

*При чтении из SQL Server SQL Server SQL Server datetimes сопоставляется с Spark TimestampType , если preferTimestampNTZ = false (по умолчанию). SQL Server datetimes сопоставляются с TimestampNTZType значением if preferTimestampNTZ = true.