Работа с базами данных YDB
YDB может выступать в качестве внешнего источника данных для другой базы YDB. В данном разделе рассматривается организация совместной работы двух независимых баз данных YDB в режиме обработки федеративных запросов.
Для подключения к внешней базе YDB со стороны другой базы YDB, выступающей в роли движка обработки федеративных запросов, на последней требуется выполнить следующие шаги:
- 
Подготовить аутентификационные данные для доступа к удалённой базе YDB. В настоящее время в федеративных запросах к YDB доступен метод аутентификации по логину и паролю (остальные методы не поддерживаются). Пароль к внешней базе сохраняется в виде секрета: CREATE OBJECT ydb_datasource_user_password (TYPE SECRET) WITH (value = "<password>");
- 
Создать внешний источник данных, описывающий стороннюю базу YDB. Параметр LOCATIONсодержит сетевой адрес экземпляра YDB, к которому осуществляется сетевое подключение. ВDATABASE_NAMEуказывается имя базы данных (например,local). Для аутентификации во внешнюю базу используются значения параметровLOGINиPASSWORD_SECRET_NAME. Включить шифрование соединений к внешней базе данных можно с помощью параметраUSE_TLS="TRUE". Если шифрование включено, то в поле<port>параметраLOCATIONнеобходимо указать порт gRPCs внешней YDB, в противном случае - порт gRPC.CREATE EXTERNAL DATA SOURCE ydb_datasource WITH ( SOURCE_TYPE="Ydb", LOCATION="<host>:<port>", DATABASE_NAME="<database>", AUTH_METHOD="BASIC", LOGIN="user", PASSWORD_SECRET_NAME="ydb_datasource_user_password", USE_TLS="TRUE" );
- 
Развернуть коннектор и настроить динамические узлы YDB на взаимодействие с ним. Также необходимо обеспечить сетевой доступ с динамических узлов YDB к внешнему источнику данных (по адресу, указанному в параметре LOCATIONзапросаCREATE EXTERNAL DATA SOURCE). В случае, если на предыдущем шаге было включено шифрование сетевых соединений к внешнему источнику, коннектор будет использовать системные корневые сертификаты (более подробно о настройке TLS можно узнать в инструкции по разворачиванию коннектора).
- 
Выполнить запрос к внешнему источнику данных. 
Синтаксис запросов
Для извлечения данных из таблиц внешней базы YDB используется следующая форма SQL-запроса:
SELECT * FROM ydb_datasource.`<table_name>`
где:
- ydb_datasource- идентификатор внешнего источника данных;
- <table_name>- полное имя таблицы внутри иерархии каталогов в базе данных YDB, например,- table,- dir1/table1или- dir1/dir2/table3.
В случае, если таблица находится на верхнем уровне иерархии (не принадлежит ни одному из каталогов), допускается не заключать имя таблицы в обратные апострофы "`":
SELECT * FROM ydb_datasource.<table_name>
Ограничения
При работе с внешними источниками данных YDB существует ряд ограничений:
- 
Внешние источники доступны только для чтения данных через запросы SELECT. Запросы, модифицирующие таблицы во внешних источниках, движком обработки федеративных запросов в настоящее время не поддерживаются.
- 
Система обработки федеративных запросов 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 BoolInt8Uint8Int16Uint16Int32Uint32Int64Uint64FloatDoubleStringUtf8
Поддерживаемые типы данных
При работе с таблицами, размещёнными во внешней базе YDB, пользователям доступен ограниченный набор типов данных. Все остальные типы, за исключением перечисленных ниже, не поддерживаются. В некоторых случаях производится преобразование типов, то есть колонки таблицы из внешней базы YDB меняют свой тип после вычитывания этой таблицы базой YDB, обрабатывающей федеративный запрос.
| Тип данных внешнего источника YDB | Тип данных в федеративной YDB | 
|---|---|
| Bool | Bool | 
| Int8 | Int8 | 
| Int16 | Int16 | 
| Int32 | Int32 | 
| Int64 | Int64 | 
| Uint8 | Uint8 | 
| Uint16 | Uint16 | 
| Uint32 | Uint32 | 
| Uint64 | Uint64 | 
| Float | Float | 
| Double | Double | 
| String | String | 
| Utf8 | Utf8 | 
| Date | Date | 
| Datetime | Datetime | 
| Timestamp | Timestamp | 
| Json | Json | 
| JsonDocument | Json |