Выполнение федеративных запросов на 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. Чтобы выполнить проверку подлинности с помощью имени пользователя и пароля, пропустите этот раздел.
- Войдите на портал Azure.
- В области навигации слева щелкните идентификатор Microsoft Entra.
- Щелкните Регистрация приложений.
- Щелкните Новая регистрация. Введите имя нового приложения и задайте URI перенаправления для
https://<workspace-url>/login/oauth/azure.html
. - Щелкните Зарегистрировать.
- В поле Essentials скопируйте и сохраните идентификатор приложения (клиента). Это значение будет использоваться для настройки приложения.
- Щелкните сертификаты и секреты.
- В разделе Секреты клиента выберите Новый секрет клиента.
- Введите описание секрета и истечения срока действия (значение по умолчанию — 180 дней).
- Нажмите кнопку Добавить.
- Скопируйте созданное значение для секрета клиента.
- Щелкните разрешения API.
- Щелкните Добавить разрешение.
- Выберите Базу данных SQL Azure и щелкните user_impersonation в разделе Делегированные разрешения.
- Щелкните Добавить разрешения.
Создание подключения
Подключение задает путь и учетные данные для доступа к внешней системе базы данных. Чтобы создать подключение, можно использовать обозреватель каталогов или команду CREATE CONNECTION
SQL в записной книжке Azure Databricks или редакторе sql-запросов Databricks.
Примечание.
Для создания подключения можно также использовать REST API Databricks или интерфейс командной строки Databricks. Смотрите POST /api/2.1/unity-catalog/connections и команды каталога Unity.
Необходимые разрешения: администратор хранилища метаданных или пользователь с привилегиями CREATE CONNECTION
.
Обозреватель каталогов
В рабочей области Azure Databricks щелкните значок каталога
каталога.
В верхней
части области каталогащелкните значок Добавить или плюс значок "Добавить " и выберитеДобавить подключения в меню.Кроме того, на странице быстрого доступа нажмите кнопку Внешние данные, перейдите на вкладку подключений и щелкните Создать подключение.
На странице
основы подключения мастера настройки подключениявведите понятное имя подключения .Выберите тип подключения SQL Server.
Выберите тип проверки подлинности OAuth или имени пользователя и пароля (обычная проверка подлинности).
(Необязательно) Добавьте комментарий.
Нажмите Далее.
На странице аутентификации введите следующие свойства подключения для экземпляра 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. После перенаправления на страницу проверки подлинности
код авторизации заполняется в пользовательском интерфейсе.
Щелкните Создать подключение.
(Обычная проверка подлинности) На странице сведений о подключении
укажите следующее: - сертификат сервера доверия. Этот параметр по умолчанию не выбран. При выборе уровень транспорта использует SSL для шифрования канала и обхода цепочки сертификатов для проверки доверия. Оставьте это по умолчанию, если у вас нет особой необходимости обойти проверку доверия.
- намерение приложения: тип рабочей нагрузки приложения при подключении к серверу.
Нажмите Далее.
На странице каталога
введите имя внешнего каталога. Внешний каталог зеркально отражает базу данных во внешней системе данных, чтобы можно было запрашивать и управлять доступом к данным в этой базе данных с помощью Azure Databricks и каталога Unity. (Необязательно) Нажмите кнопку "Проверить подключение" , чтобы убедиться, что она работает.
Щелкните Создать каталог.
На странице Access выберите рабочие области, в которых пользователи могут получить доступ к созданному каталогу. Вы можете выбрать Все рабочие области имеют доступ, или нажать Назначить рабочие области, выбрать рабочие области, а затем нажать Назначить.
Измените владельца, который сможет управлять доступом ко всем объектам в каталоге. Начните вводить адресата в текстовом поле, а затем выберите адресата в возвращенных результатах.
Предоставьте привилегии на каталоге. Щелкните Предоставить:
- Укажите ответственных лиц, которые будут иметь доступ к объектам в каталоге. Начните вводить адресата в текстовом поле, а затем выберите адресата в возвращенных результатах.
- Выберите предустановки привилегий , чтобы предоставить каждому субъекту. Все пользователи учетной записи получают
BROWSE
по умолчанию.- Выберите средство чтения данных в раскрывающемся меню, чтобы предоставить
read
привилегии для объектов в каталоге. - Выберите редактор данных в раскрывающемся меню, чтобы предоставить
read
иmodify
привилегии для объектов в каталоге. - Вручную выберите привилегии для предоставления.
- Выберите средство чтения данных в раскрывающемся меню, чтобы предоставить
- Щелкните Предоставить.
Нажмите Далее.
На странице метаданных укажите пары тегов «ключ-значение». Дополнительные сведения см. в статье Применение тегов к защищаемым объектам каталога Unity.
(Необязательно) Добавьте комментарий.
Нажмите кнопку Сохранить.
Примечание.
(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
привилегией подключения.
Обозреватель каталогов
В рабочей области Azure Databricks щелкните значок каталога
каталога, чтобы открыть обозреватель каталогов.
В верхней части области каталога
щелкните значок Добавить или плюс значок "Добавить " и выберитеДобавить каталог в меню.Кроме того, на странице быстрого доступа нажмите кнопку "Каталоги", а затем нажмите кнопку "Создать каталог".
Следуйте инструкциям по созданию внешних каталогов в создание каталогов.
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
.