SPI (Service Provider Interface)#

Вы можете создавать расширения к CedrusData с помощью плагинов. Внутри плагина вы можете реализовать один или несколько расширений с помощью публичных интерфейсов продукта, называемых SPI (Service Provider Interface).

Типы расширений:

Зависимости#

Разработку расширений удобнее всего вести с помощью Maven.

Добавьте зависимость trino-spi в свой Maven-проект:

<dependency>
    <groupId>io.trino</groupId>
    <artifactId>trino-spi</artifactId>
    <version>442</version>
    <scope>provided</scope>
</dependency>

Для использования расширенного набора интерфейсов CedrusData добавьте ссылку на репозиторий CedrusData:

<repositories>
    <repository>
        <id>cedrusdata</id>
        <url>https://downloads.cedrusdata.ru/maven/</url>
    </repository>
</repositories>

После этого добавьте зависимость cedrusdata-spi:

<dependency>
    <groupId>io.trino</groupId>
    <artifactId>cedrusdata-spi</artifactId>
    <version>442-4</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>io.trino</groupId>
            <artifactId>trino-spi</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Плагин#

Класс io.trino.spi.Plugin реализует несколько методов, которые возвращают конкретные расширения, такие как коннекторы или функции. Для создания плагина вам необходимо написать собственный класс, который расширяет io.trino.spi.Plugin и реализует один или несколько его методов.

Метаданные плагина#

Чтобы CedrusData распознал собранный JAR файл как плагин, последний должен содержать файл io.trino.spi.Plugin в директории META-INF/services. Файл должен содержать строку с fully-qualified именем класса плагина. Например:

com.example.plugin.ExamplePlugin

Для плагинов, которые являются частью проекта Trino, этот файл создается автоматически, если проект имеет Maven packagin trino-plugin:

<packaging>trino-plugin</packaging>

Установка плагина#

С точки зрения CedrusData плагин представляет собой набор JAR-файлов, которые включают как сам плагин, так и его зависимости. Из списка JAR-файлов должны быть исключены все файлы, которые содержат классы в следующих пакетах:

io.trino.spi
com.fasterxml.jackson.annotation
io.airlift.slice
org.openjdk.jol
io.opentelemetry.api
io.opentelemetry.context

Для установки плагина, создайте директорию с уникальным именем в директории plugin внутри распакованного архива CedrusData и положите в нее все необходимые JAR-файлы.

Примечание

Каждый плагин Trino должен находиться в отдельной директории внутри директории plugin. Плагины должны содержать только JAR файлы непосредственно в директории плагина. Вложенные директории плагина будут проигнорированы.

По умолчанию CedrusData ищет плагины в директории plugin относительно распакованного архива CedrusData. Вы можете изменить директорию, в которой будет происходить поиск плагинов, с помощью параметра конфигурации plugin.dir.

Плагины должны быть установлены на всех узлах CedrusData (координатор и worker).

Сборка плагина#

Если вы работаете над плагином, который является частью проекта Trino, вы можете собрать плагин с помощью команды mvn package. Результатом работы команды будет ZIP-архив, который содержит все необходимые зависимости. Это возможно за счет специального типа packaging trino-plugin.

Если вы работаете над плагином, который не является часть проекта Trino, вам потребуется собрать архив самостоятельно, так как packaging trino-plugin недоступен для сторонних проектов. Вы можете воспользоваться Maven Assembly Plugin для автоматизации сборки архива с зависимостями.