Пример JDBC-коннектора#
Пример JDBC-коннектора показывает, как расширить базовый JdbcPlugin,
чтобы читать данные из источника через JDBC-драйвер без необходимости
реализовывать различные сервисы Trino SPI, такие как ConnectorMetadata
или ConnectorRecordSetProvider.
Note
Этот коннектор является только примером. Он поддерживает очень ограниченный набор типов данных и не поддерживает расширенные функции, такие как predicate или другие виды pushdown.
Код#
Пример JDBC-коннектора находится в каталоге trino-example-jdbc в дереве исходного кода Trino.
Реализация плагина#
Реализация плагина в примерном JDBC-коннекторе расширяет
класс JdbcPlugin и использует ExampleClientModule.
Модуль:
связывает класс
ExampleClient, чтобы он мог использоваться базовым JDBC-коннектором;предоставляет фабрику соединений, которая создает новые соединения с помощью JDBC-драйвера на основе JDBC URL, заданного в свойствах конфигурации.
Реализация JdbcClient#
Базовый JDBC-плагин сопоставляет вызовы Trino SPI с JDBC API. Операции вроде чтения имен таблиц и столбцов хорошо определены в JDBC, поэтому базовый JDBC-плагин может реализовать их так, чтобы это работало с большинством JDBC-драйверов.
Одна возможность, которая по умолчанию не реализована, — сопоставление типов
данных при чтении и записи. Пример JDBC-коннектора реализует интерфейс
JdbcClient в классе ExampleClient, который расширяет
BaseJdbcClient и реализует два метода.
toColumnMapping#
toColumnMapping используется при чтении данных из коннектора.
Получив ConnectorSession, Connection и JdbcTypeHandle,
он возвращает ColumnMapping, если найден соответствующий тип данных.
Сопоставление столбца включает:
тип Trino,
функцию записи, которая используется для установки значений параметров запроса при подготовке JDBC-выражения для выполнения в источнике данных,
и функцию чтения, которая используется для чтения значения из result set JDBC-выражения и возврата его во внутреннем представлении Trino (например, как Slice).
toWriteMapping#
toWriteMapping используется при записи данных в коннектор. Получив
ConnectorSession и тип Trino, он возвращает WriteMapping.
Сопоставление включает:
имя типа данных
функцию записи