Пример 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.

Сопоставление включает:

  • имя типа данных

  • функцию записи