Работа с базами данных MySQL
В этом разделе описана основная информация про работу с внешней базой данных MySQL.
Для работы с внешней базой данных MySQL необходимо выполнить следующие шаги:
-
Создать секрет, содержащий пароль для подключения к базе данных.
CREATE OBJECT mysql_datasource_user_password (TYPE SECRET) WITH (value = "<password>"); -
Создать внешний источник данных, описывающий определённую базу данных MySQL. Параметр
LOCATIONсодержит сетевой адрес экземпляра MySQL, к которому осуществляется подключение. ВDATABASE_NAMEуказывается имя базы данных (например,mysql). Для аутентификации во внешнюю базу используются значения параметровLOGINиPASSWORD_SECRET_NAME. Включить шифрование соединений к внешней базе данных можно с помощью параметраUSE_TLS="TRUE".CREATE EXTERNAL DATA SOURCE mysql_datasource WITH ( SOURCE_TYPE="MySQL", LOCATION="<host>:<port>", DATABASE_NAME="<database>", AUTH_METHOD="BASIC", LOGIN="user", PASSWORD_SECRET_NAME="mysql_datasource_user_password", USE_TLS="TRUE" ); -
Развернуть коннектор и настроить динамические узлы YDB на взаимодействие с ним. Также необходимо обеспечить сетевой доступ с динамических узлов YDB к внешнему источнику данных (по адресу, указанному в параметре
LOCATIONзапросаCREATE EXTERNAL DATA SOURCE). В случае, если на предыдущем шаге было включено шифрование сетевых соединений к внешнему источнику, коннектор будет использовать системные корневые сертификаты (более подробно о настройке TLS можно узнать в инструкции по разворачиванию коннектора). -
Выполнить запрос к базе данных.
Синтаксис запросов
Для работы с MySQL используется следующая форма SQL-запроса:
SELECT * FROM mysql_datasource.<table_name>
где:
mysql_datasource- идентификатор внешнего источника данных;<table_name>- имя таблицы внутри внешнего источника данных.
Ограничения
При работе с кластерами MySQL существует ряд ограничений:
-
Внешние источники доступны только для чтения данных через запросы
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 BoolInt8Uint8Int16Uint16Int32Uint32Int64Uint64FloatDouble
Поддерживаемые типы данных
В базе данных MySQL признак опциональности значений колонки (разрешено или запрещено колонке содержать значения NULL) не является частью системы типов данных. Ограничение (constraint) NOT NULL для любой колонки любой таблицы хранится в виде значения столбца IS_NULLABLE системной таблицы INFORMATION_SCHEMA.COLUMNS, то есть на уровне метаданных таблицы. Следовательно, все базовые типы MySQL по умолчанию могут содержать значения NULL, и в системе типов YDB они должны отображаться в опциональные типы.
Ниже приведена таблица соответствия типов MySQL и YDB. Все остальные типы данных, за исключением перечисленных, не поддерживаются.
| Тип данных MySQL | Тип данных YDB | Примечания |
|---|---|---|
bool |
Optional<Bool> |
|
tinyint |
Optional<Int8> |
|
tinyint unsigned |
Optional<Uint8> |
|
smallint |
Optional<Int16> |
|
smallint unsigned |
Optional<Uint16> |
|
mediumint |
Optional<Int32> |
|
mediumint unsigned |
Optional<Uint32> |
|
int |
Optional<Int32> |
|
int unsigned |
Optional<Uint32> |
|
bigint |
Optional<Int64> |
|
bigint unsigned |
Optional<Uint64> |
|
float |
Optional<Float> |
|
real |
Optional<Float> |
|
double |
Optional<Double> |
|
date |
Optional<Date> |
Допустимый диапазон дат с 1970-01-01 и до 2105-12-31. При выходе значения за границы диапазона возвращается NULL. |
datetime |
Optional<Timestamp> |
Допустимый диапазон времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL. |
timestamp |
Optional<Timestamp> |
Допустимый диапазон времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL. |
tinyblob |
Optional<String> |
|
blob |
Optional<String> |
|
mediumblob |
Optional<String> |
|
longblob |
Optional<String> |
|
tinytext |
Optional<String> |
|
text |
Optional<String> |
|
mediumtext |
Optional<String> |
|
longtext |
Optional<String> |
|
char |
Optional<Utf8> |
|
varchar |
Optional<Utf8> |
|
binary |
Optional<String> |
|
varbinary |
Optional<String> |
|
json |
Optional<Json> |