Работа с базами данных Microsoft SQL Server
В этом разделе описана основная информация про работу с внешней базой данных Microsoft SQL Server.
Для работы с внешней базой данных Microsoft SQL Server необходимо выполнить следующие шаги:
-
Создать секрет, содержащий пароль для подключения к базе данных.
CREATE OBJECT ms_sql_server_datasource_user_password (TYPE SECRET) WITH (value = "<password>"); -
Создать внешний источник данных, описывающий определённую базу данных Microsoft SQL Server. Параметр
LOCATIONсодержит сетевой адрес экземпляра Microsoft SQL Server, к которому осуществляется подключение. ВDATABASE_NAMEуказывается имя базы данных (например,master). Для аутентификации во внешнюю базу используются значения параметровLOGINиPASSWORD_SECRET_NAME. Включить шифрование соединений к внешней базе данных можно с помощью параметраUSE_TLS="TRUE".CREATE EXTERNAL DATA SOURCE ms_sql_server_datasource WITH ( SOURCE_TYPE="MsSQLServer", LOCATION="<host>:<port>", DATABASE_NAME="<database>", AUTH_METHOD="BASIC", LOGIN="user", PASSWORD_SECRET_NAME="ms_sql_server_datasource_user_password", USE_TLS="TRUE" ); -
Развернуть коннектор и настроить динамические узлы YDB на взаимодействие с ним. Также необходимо обеспечить сетевой доступ с динамических узлов YDB к внешнему источнику данных (по адресу, указанному в параметре
LOCATIONзапросаCREATE EXTERNAL DATA SOURCE). В случае, если на предыдущем шаге было включено шифрование сетевых соединений к внешнему источнику, коннектор будет использовать системные корневые сертификаты (более подробно о настройке TLS можно узнать в инструкции по разворачиванию коннектора). -
Выполнить запрос к базе данных.
Синтаксис запросов
Для работы с Microsoft SQL Server используется следующая форма SQL-запроса:
SELECT * FROM ms_sql_server_datasource.<table_name>
где:
ms_sql_server_datasource- идентификатор внешнего источника данных;<table_name>- имя таблицы внутри внешнего источника данных.
Ограничения
При работе с кластерами Microsoft SQL Server существует ряд ограничений:
-
Внешние источники доступны только для чтения данных через запросы
SELECT. Запросы, модифицирующие таблицы во внешних источниках, движком обработки федеративных запросов в настоящее время не поддерживаются. -
Если значение даты, хранящейся во внешнем источнике данных, находится вне допустимого для YDB диапазона (все используемые даты должны быть позднее 1970-01-01, но ранее 2105-12-31), в YDB такое значение будет преобразовано в
NULL. -
Система обработки федеративных запросов YDB умеет передавать исполнение некоторых частей запроса системе, выступающей в качестве источника данных. Фрагменты запроса передаются сквозь YDB непосредственно во внешнюю систему и обрабатываются внутри неё. С помощью этой оптимизации, которая носит название «пушдауна предикатов» (predicate pushdown), удаётся значительно снизить объём данных, передаваемых от источника к движку обработки федеративных запросов. Благодаря этому снижается нагрузка на сеть и экономятся вычислительные ресурсы YDB.
Частный случай пушдауна предикатов, при котором выполняется передача фильтрующих выражений, указанных после ключевого слова
WHERE, называется «пушдауном фильтров» (filter pushdown). Пушдаун фильтров возможен при использовании:Описание Пример Фильтров вида IS NULL/IS NOT NULLWHERE column1 IS NULLилиWHERE column1 IS NOT NULLЛогических условий OR,NOT,AND.WHERE column IS NULL OR column2 is NOT NULL.Условий сравнения =,<>,<,<=,>,>=c другими колонками или константами.WHERE column3 > column4 OR column5 <= 10.Поддерживаемые типы данных для пушдауна фильтров:
Тип данных YDB BoolInt8Int16Int32Int64FloatDouble
Поддерживаемые типы данных
В базе данных Microsoft SQL Server признак опциональности значений колонки (разрешено или запрещено колонке содержать значения NULL) не является частью системы типов данных. Ограничение (constraint) NOT NULL для любой колонки любой таблицы хранится в виде значения столбца IS_NULLABLE системной таблицы INFORMATION_SCHEMA.COLUMNS, то есть на уровне метаданных таблицы. Следовательно, все базовые типы Microsoft SQL Server по умолчанию могут содержать значения NULL, и в системе типов YDB они должны отображаться в опциональные типы.
Ниже приведена таблица соответствия типов Microsoft SQL Server и YDB. Все остальные типы данных, за исключением перечисленных, не поддерживаются.
| Тип данных Microsoft SQL Server | Тип данных YDB | Примечания |
|---|---|---|
bit |
Optional<Bool> |
|
tinyint |
Optional<Int8> |
|
smallint |
Optional<Int16> |
|
int |
Optional<Int32> |
|
bigint |
Optional<Int64> |
|
real |
Optional<Float> |
|
float |
Optional<Double> |
|
date |
Optional<Date> |
Допустимый диапазон дат с 1970-01-01 и до 2105-12-31. При выходе значения за границы диапазона возвращается NULL. |
smalldatetime |
Optional<Datetime> |
Допустимый диапазон времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL. |
datetime |
Optional<Timestamp> |
Допустимый диапазон времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL. |
datetime2 |
Optional<Timestamp> |
Допустимый диапазон времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL. |
binary |
Optional<String> |
|
varbinary |
Optional<String> |
|
image |
Optional<String> |
|
char |
Optional<Utf8> |
|
varchar |
Optional<Utf8> |
|
text |
Optional<Utf8> |
|
nchar |
Optional<Utf8> |
|
nvarchar |
Optional<Utf8> |
|
ntext |
Optional<Utf8> |