Коннектор Greenplum®/Cloudberry
Коннектор Greenplum®/Cloudberry, разработанный Яндексом на основе коннектора PostgreSQL
Коннектор поддерживает параллельное чтение данных сразу с нескольких сегментов Greenplum® и чтение данных напрямую с сегментов по протоколу GPFDIST, что значительно увеличивает производительность запросов при чтении больших объемов данных. Оба способа чтения данных можно применять одновременно, чтобы наиболее эффективно использовать ресурсы кластера Trino и кластера Greenplum®.
Коннектор Greenplum®/Cloudberry доступен в Trino версии 476 и выше.
Параллельное чтение данных
При параллельном чтении из таблицы данные разделяются по значению метаколонки gp_segment_id.
Уровень параллелизма определяется количеством сегментов в кластере Greenplum®. Максимальный уровень параллелизма ограничен настройкой коннектора greenplum.max-read-parallelism и соответствующим свойством сессии max_read_parallelism.
Схематично параллельное чтение представлено на диаграмме:
При использовании параллельного чтения коннектор выполняет только частичную фильтрацию строк при выталкивании оператора LIMIT (limit pushdown
Чтение данных по протоколу GPFDIST
Коннектор позволяет читать данные напрямую с сегментов Greenplum® через серверы GPFDISTgreenplum.gpfdist.server.enabled.
В кластере Trino можно создать не больше восьми каталогов с включенными GPFDIST-серверами.
Чтение данных напрямую с сегментов Greenplum® состоит из следующих этапов:
-
Коннектор создает внешнюю таблицу с указанием адреса воркера Trino, читающего данные:
CREATE WRITABLE EXTERNAL TEMPORARY TABLE <имя_внешней_таблицы> ... LOCATION('gpfdist://<адрес_воркера_Trino>'); -
Коннектор выполняет запрос:
INSERT INTO <имя_внешней_таблицы> SELECT ... FROM <имя_таблицы_в_Greenplum®>; -
Сегменты Greenplum® отправляют данные воркеру Trino на указанный адрес.
Схематично чтение данных с сегментов представлено на диаграмме:
Использование протокола GPFDIST для чтения данных вносит следующие ограничения в работу коннектора:
- Не поддерживается чтение многомерных массивов.
- Не поддерживается чтение массивов строковых типов.
- Не поддерживается режим обработки массивов AS_JSON
. - При одновременном выталкивании операторов
LIMITиORDER BY(Top-N pushdown ) коннектор выполняет только частичную сортировку данных. Это не влияет на корректность результатов запроса.
Настройки коннектора
Базовые настройки коннектора и соответствующие им свойства сессии совпадают с коннектором PostgreSQL
| Настройка | Описание | Значение по умолчанию |
|---|---|---|
greenplum.gpfdist.server.enabled |
Включает GPFDIST-серверы на воркерах Trino | false |
greenplum.gpfdist.max-processing-threads |
Максимальный размер пула потоков, производящих асинхронную обработку GPFDIST-запросов | 32 |
greenplum.gpfdist.max-query-threads |
Максимальный размер пула потоков, создающих внешние таблицы Greenplum® и инициирующих запись данных во внешнюю таблицу | 32 |
greenplum.gpfdist.read.enabled |
Включает чтение данных напрямую с сегментов Greenplum® по протоколу GPFDIST | false |
greenplum.gpfdist.read.buffer-size |
Размер буфера для чтения данных по протоколу GPFDIST в формате data size Соответствует свойству сессии |
32MB |
greenplum.gpfdist.retry-timeout |
Максимальное время, которое сегмент Greenplum® будет ожидать ответа на GPFDIST-запрос, в формате duration При значении, отличающемся от |
null |
greenplum.max-read-parallelism |
Максимальный уровень параллелизма при чтении данных из Greenplum®. Соответствует свойству сессии |
1 (отсутствие параллелизма) |
greenplum.segment-fetch-required |
Определяет поведение коннектора в случае, если ему не удается получить информацию о количестве сегментов Greenplum®:
Соответствует свойству сессии |
true |