Работа с базами данных YDB

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

Для подключения к внешней базе YDB со стороны другой базы YDB, выступающей в роли движка обработки федеративных запросов, на последней требуется выполнить следующие шаги:

  1. Подготовить аутентификационные данные для доступа к удалённой базе YDB. В настоящее время в федеративных запросах к YDB доступен метод аутентификации по логину и паролю (остальные методы не поддерживаются). Пароль к внешней базе сохраняется в виде секрета:

     CREATE OBJECT ydb_datasource_user_password (TYPE SECRET) WITH (value = "<password>");
    
  2. Создать внешний источник данных, описывающий стороннюю базу 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"
    );
    
  3. Развернуть коннектор и настроить динамические узлы YDB на взаимодействие с ним. Также необходимо обеспечить сетевой доступ с динамических узлов YDB к внешнему источнику данных (по адресу, указанному в параметре LOCATION запроса CREATE EXTERNAL DATA SOURCE). В случае, если на предыдущем шаге было включено шифрование сетевых соединений к внешнему источнику, коннектор будет использовать системные корневые сертификаты (более подробно о настройке TLS можно узнать в инструкции по разворачиванию коннектора).

  4. Выполнить запрос к внешнему источнику данных.

Синтаксис запросов

Для извлечения данных из таблиц внешней базы 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 существует ряд ограничений:

  1. Внешние источники доступны только для чтения данных через запросы SELECT. Запросы, модифицирующие таблицы во внешних источниках, движком обработки федеративных запросов в настоящее время не поддерживаются.

  2. Система обработки федеративных запросов YDB умеет передавать исполнение некоторых частей запроса системе, выступающей в качестве источника данных. Фрагменты запроса передаются сквозь YDB непосредственно во внешнюю систему и обрабатываются внутри неё. С помощью этой оптимизации, которая носит название «пушдауна предикатов» (predicate pushdown), удаётся значительно снизить объём данных, передаваемых от источника к движку обработки федеративных запросов. Благодаря этому снижается нагрузка на сеть и экономятся вычислительные ресурсы YDB.

    Частный случай пушдауна предикатов, при котором выполняется передача фильтрующих выражений, указанных после ключевого слова WHERE, называется «пушдауном фильтров» (filter pushdown). Пушдаун фильтров возможен при использовании:

    Описание Пример
    Фильтров вида IS NULL/IS NOT NULL WHERE 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
    Bool
    Int8
    Uint8
    Int16
    Uint16
    Int32
    Uint32
    Int64
    Uint64
    Float
    Double
    String
    Utf8

Поддерживаемые типы данных

При работе с таблицами, размещёнными во внешней базе 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