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

В этом разделе описана основная информация про работу с внешней базой данных Greenplum. Поскольку Greenplum основан на PostgreSQL, интеграции с ними работают похожим образом, а некоторые ссылки ниже могут вести на документацию PostgreSQL.

Для работы с внешней базой данных Greenplum необходимо выполнить следующие шаги:

  1. Создать секрет, содержащий пароль для подключения к базе данных.
    CREATE OBJECT greenplum_datasource_user_password (TYPE SECRET) WITH (value = "<password>");
    
  2. Создать внешний источник данных, описывающий определённую базу данных в составе кластера Greenplum. В параметр LOCATION нужно передать сетевой адрес мастер-ноды Greenplum. При чтении по умолчанию используется пространство имен public, но это значение можно изменить с помощью опционального параметра SCHEMA. Включить шифрование соединений к внешней базе данных можно с помощью параметра USE_TLS="TRUE".
    CREATE EXTERNAL DATA SOURCE greenplum_datasource WITH (
        SOURCE_TYPE="Greenplum",
        LOCATION="<host>:<port>",
        DATABASE_NAME="<database>",
        AUTH_METHOD="BASIC",
        LOGIN="user",
        PASSWORD_SECRET_NAME="greenplum_datasource_user_password",
        USE_TLS="TRUE",
        SCHEMA="<schema>"
    );
    
  3. Развернуть коннектор и настроить динамические узлы YDB на взаимодействие с ним. Также необходимо обеспечить сетевой доступ с динамических узлов YDB к внешнему источнику данных (по адресу, указанному в параметре LOCATION запроса CREATE EXTERNAL DATA SOURCE). В случае, если на предыдущем шаге было включено шифрование сетевых соединений к внешнему источнику, коннектор будет использовать системные корневые сертификаты (более подробно о настройке TLS можно узнать в инструкции по разворачиванию коннектора).

  4. Выполнить запрос к базе данных.

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

Для работы с Greenplum используется следующая форма SQL-запроса:

SELECT * FROM greenplum_datasource.<table_name>

где:

  • greenplum_datasource - идентификатор внешнего источника данных;
  • <table_name> - имя таблицы внутри внешнего источника данных.

Ограничения

При работе с кластерами Greenplum существует ряд ограничений:

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

  2. Если значение даты, хранящейся во внешнем источнике данных, находится вне допустимого для YDB диапазона (все используемые даты должны быть позднее 1970-01-01, но ранее 2105-12-31), в YDB такое значение будет преобразовано в NULL.

  3. Система обработки федеративных запросов 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

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

В базе данных Greenplum признак опциональности значений колонки (разрешено или запрещено колонке содержать значения NULL) не является частью системы типов данных. Ограничение (constraint) NOT NULL для каждой колонки реализуется в виде атрибута attnotnull в системном каталоге pg_attribute, то есть на уровне метаданных таблицы. Следовательно, все базовые типы Greenplum по умолчанию могут содержать значения NULL, и в системе типов YDB они должны отображаться в опциональные типы.

Ниже приведена таблица соответствия типов Greenplum и YDB. Все остальные типы данных, за исключением перечисленных, не поддерживаются.

Тип данных Greenplum Тип данных YDB Примечания
boolean Optional<Bool>
smallint Optional<Int16>
int2 Optional<Int16>
integer Optional<Int32>
int Optional<Int32>
int4 Optional<Int32>
serial Optional<Int32>
serial4 Optional<Int32>
bigint Optional<Int64>
int8 Optional<Int64>
bigserial Optional<Int64>
serial8 Optional<Int64>
real Optional<Float>
float4 Optional<Float>
double precision Optional<Double>
float8 Optional<Double>
json Optional<Json>
date Optional<Date> Допустимый диапазон дат с 1970-01-01 и до 2105-12-31. При выходе значения за границы диапазона возвращается NULL.
timestamp Optional<Timestamp> Допустимый диапазон времени с 1970-01-01 00:00:00 и до 2105-12-31 23:59:59. При выходе значения за границы диапазона возвращается значение NULL.
bytea Optional<String>
character Optional<Utf8> Правила сортировки по умолчанию, строка дополняется пробелами до требуемой длины.
character varying Optional<Utf8> Правила сортировки по умолчанию.
text Optional<Utf8> Правила сортировки по умолчанию.