Обзор Trino ADB connector

Для подключения к кластеру ADB через Trino-коннектор необходимо создать новый каталог Trino. В конфигурации каталога должен использоваться тип коннектора greengagedb, а также должны быть указаны следующие параметры (минимальный набор):

connector.name=greengagedb (1)
connection-url=jdbc:postgresql://<adb_master>:6000/database (2)
connection-user=<adb_username> (3)
connection-password=<password>
1 Выбор типа коннектора для работы с ADB. Начиная с версии ADH 4.2.0 поддерживаются два взаимозаменяемых имени: connector.name=greengagedb и connector.name=adb.
2 JDBC-строка для подключения к мастер-хосту кластера ADB. Коннектор использует JDBC-драйвер PostgreSQL и поддерживает все его свойства конфигурации, а также наследует ограничения. Больше информации доступно на странице PostgreSQL connector.
3 Пользователь ADB, используемый коннектором для подключения к ADB-кластеру. Пользователь должен быть заранее создан на стороне ADB и должен иметь достаточные права для выполнения запросов.

Режимы работы

Trino-коннектор может взаимодействовать с кластером ADB в нескольких режимах, описанных ниже.

Режим Чтение Запись Описание

JDBC

Да

Да

Режим по умолчанию для взаимодействия коннектора и ADB-кластера через драйвер JDBC. Не поддерживает параллельные операции чтения/записи и другие оптимизации. Это самый медленный, но при этом самый надежный режим, который используется в тех случаях, когда другие режимы недоступны

gpfdist

Да

Да

gpfdist — это утилита для распределенных операций чтения и записи данных из файлов, которая позволяет параллельно загружать и выгружать данные из внешних таблиц ADB. Под капотом коннектор Trino разворачивает серверы gpfdist на хостах ADH, а сегменты ADB используют gpfdist-клиенты для параллельного обмена данными с коннектором.

Данный режим активируется с помощью параметра greengagedb.gpfdist.enabled=true (параметр сессии gpfdist_enabled)

Parallel cursor

Да

Нет

Модуль gp_parallel_retrieve_cursor — это улучшенная реализация курсора (cursor), которая позволяет параллельно получать результаты запросов непосредственно из сегментов ADB. Данный тип курсора обеспечивает более быстрое параллельное чтение, добавляет дополнительную гибкость за счет чтения данных в виде фрагментов и в целом более эффективен при обработке больших наборов результатов. Информация о включении данного режима приведена ниже

Включение режима параллельного курсора

Для активации режима параллельного курсора необходимо выполнить следующее:

  1. В ADB-кластере создайте расширение gp_parallel_retrieve_cursor:

    CREATE EXTENSION gp_parallel_retrieve_cursor;
  2. При создании нового Trino-каталога для ADB установите параметр greengagedb.read-mode=PARALLEL_CURSOR (параметр сессии greengagedb.read_mode=PARALLEL_CURSOR).

ВАЖНО

Для использования режима параллельного курсора значение параметра greengagedb.scan-parallelism должно быть SEGMENTS (значение по умолчанию).

Логика выбора режима и переключение на JDBC

Выбор режима чтения

Режим чтения коннектора определяется параметром greengagedb.read-mode, который может принимать следующие значения:

  • PARALLEL_CURSOR

  • GPFDIST

  • JDBC

  • AUTO

В следующей таблице приведены подробности реализации каждого режима.

Режим чтения Подробности реализации

PARALLEL_CURSOR

Используется только при явном указании

GPFDIST

Если какой-либо столбец в выборке не поддерживается gpfdist, чтение через gpfdist прерывается и используется JDBC

JDBC

Используется в качестве резервного режима. Правила переключения на JDBC:

  • отсутствие столбцов в проекции (no_columns);

  • наличие MERGE_ROW_ID в проекции;

  • передача порядка сортировки (sort_order) для сохранения глобального упорядочивания данных;

  • операции присвоения (update_assignments) при работе с таблицей;

  • операции с временными неименованными таблицами;

  • выражения ограничений (constraint) с потенциальным риском из-за использования арифметических операций % или /.

AUTO

Если установлен параметр greengagedb.gpfdist.enabled=true и все столбцы в проекции gpfdist-совместимы, используется режим GPFDIST. В противном случае используется JDBC. Значение AUTO никогда не использует режим параллельного курсора, поскольку его необходимо указывать явно

Выбор режима записи

Основная логика выбора режима записи следующая:

  • Если установлен параметр gpfdist_enabled=true, для операций INSERT и CTAS используется gpfdist. В противном случае запись данных выполняется через JDBC.

  • Для операций UPDATE/DELETE/MERGE всегда используется JDBC.

Поддержка операций

Поддержка SQL-команд

В следующей таблице перечислены SQL-операции, поддерживаемые на уровне коннектора.

Операция Поддержка Примечание

SELECT

Да

Режим чтения выбирается на основе параметра read_mode и правил переключения на JDBC

INSERT / CTAS

Да

Используется gpfdist, если gpfdist_enabled=true; в противном случае используется JDBC

UPDATE / DELETE / MERGE

Да

Команды DML выполняются через JDBC

CREATE/DROP TABLE, CREATE/DROP SCHEMA, RENAME SCHEMA

Да

Команды DDL выполняются через JDBC

ALTER TABLE, ADD/DROP/RENAME COLUMN

Да

Команды DML выполняются через JDBC

ALTER COLUMN TYPE / DROP NOT NULL

Да

Команды DML выполняются через JDBC

Поддерживаемые режимы для SELECT

В следующей таблице приведены поддерживаемые режимы чтения для операций SELECT.

Тип операции JDBC Parallel cursor gpfdist

Сканирование именованной таблицы

Да

Да

Да

Промежуточный результат запроса (переданный запрос/join)

Да

Переключение на JDBC

Переключение на JDBC

ORDER BY + LIMIT, требующие глобальной сортировки

Да

Переключение на JDBC

Переключение на JDBC

LIMIT

Да

Да (один сплит)

Да (один сплит)

Недопустимые для gpfdist типы столбцов

N/A

N/A

Переключение на JDBC (greengagedb.read-fallback=ALLOW) или ошибка (greengagedb.read-fallback=FORBID)

MERGE_ROW_ID, нулевая проекция, потенциально опасные ограничения с %//

Да

Переключение на JDBC

Переключение на JDBC

Поддержка pushdown-оптимизаций

Функция Чтение через JDBC Чтение через Parallel cursor Чтение через gpfdist

Предикат/проекция

Да

Да

Да

Агрегация

Да

Да

Да

Объединение (join)

Да

Да

Если в процессе планирования используются внутренние дескрипторы запроса (query-relation handles), коннектор переключается на JDBC для корректного выполнения запроса

Да

Если в процессе планирования используются внутренние дескрипторы запроса (query-relation handles), коннектор переключается на JDBC для корректного выполнения запроса

Переход ADB на Greengage

В версии ADH 4.2.0 Trino ADB connector был обновлен в связи с переходом ADB на GreengageDB. Данное обновление привело к следующим основным изменениям:

  • Используется новое имя для Trino ADB connector: connector.name=greengagedb. Для обеспечения обратной совместимости также допустимо использование connector.name=adb.

  • Изменены конфигурационные параметры коннектора.

Если вы используете Trino ADB connector и планируете обновить ADH до версии 4.2.0, выполнять обновление следует в следующем порядке:

  1. Перед обновлением остановите сервис Trino.

  2. Обновите конфигурацию коннектора с учетом новых параметров конфигурации.

  3. Запустите обновление кластера.

Ограничения и особенности

Trino ADB connector имеет следующие особенности и ограничения:

  • Для использования режима параллельного курсора требуется расширение GreengageDB gp_parallel_retrieve_cursor.

  • Эндпойнт для проверки работоспособности gpfdist: http://<external-host>:<port>/health.

  • Для операции ALTER TABLE …​ ADD COLUMN не поддерживаются параметры FIRST/AFTER, а также комментарии к столбцам.

  • Переименование таблиц, принадлежащих к разным схемам, не поддерживается.

  • Генерация __trino_row_id является необязательной и по умолчанию отключена. Чтобы включить генерацию этого ID для таблиц, созданных коннектором, установите значение greengagedb.trino-row-id-enabled=true.

  • ADB 7.x (Greengage DB 7.x) временно не поддерживается.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней