Рубрики
Без рубрики

Расширение драйвера Aerospike JDBC с помощью UDFs

Предисловие Этот пост продолжает серию статей, в которых представлен драйвер Aerospike SQL…. С тегами aerospike, java, sql, driver.

Этот пост продолжает серию статей, в которых представлен драйвер Aerospike SQL.

В предыдущем посте объяснялись встроенные функции, предоставляемые драйвером Aerospike JDBC. Здесь я собираюсь объяснить, как расширить функциональность драйвера путем реализации пользовательских функций (UDF).

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

Функция – это именованный блок повторно используемого кода, который используется для выполнения одного действия. Обычно функции возвращают результат. Функции могут принимать аргументы.

Java 8 и выше предоставляет интерфейсы Поставщик , Функция , Бифункция . Реализации этих интерфейсов могут быть определены как UDF для драйвера Aerospike JDBC. Например, вот определение функции now() , которая возвращает эпоху в миллисекундах:

public class Now implements new Supplier() {
    @Override
    public Long get() {
        return System.currentTimeMillis();
    }
};

Это пример функции, которая получает один аргумент:

public class Lower implements new Function() {
    @Override
    public String apply(String s) {
        return s == null ? null : s.toLowerCase();
    }
};

Реализация функции, которая принимает 2 аргумента, аналогична. Создайте класс, который реализует Bi-функцию . К сожалению, JDK не определяет интерфейс для функции, которая принимает 3, 4 или более аргументов, а также для функции, которая принимает любое количество аргументов. Такой интерфейс определяется драйвером:

package com.nosqldriver.util;
@FunctionalInterface
public interface VarargsFunction {
    R apply(T ... t);
}

Если вы хотите реализовать UDF, который принимает более 2 аргументов, вам необходимо реализовать этот интерфейс. В этом случае вам необходимо добавить драйвер в путь к классу компиляции. Реализация других типов функций не требует этой зависимости. Реализация функции Varargs имеет еще одну сложность: программист отвечает за приведение и проверку принятых аргументов.

Как только UDF будет реализован и проверен, он должен быть упакован в jar-файл, который следует добавить в путь к классу драйвера. Различные инструменты позволяют это сделать. Например Бобр и Белка разрешить определение драйвера, упакованного в несколько файлов jar. Как только это будет сделано, функция должна быть зарегистрирована с помощью параметра подключения:

custom.function.NAME=FULLY_QUALIFIED_CLASS_NAME

напр.

custom.function.now=com.mycompany.Now

Параметр подключения может быть указан как параметр URL-адреса JDBC или как свойство подключения.

jdbc:aeropspike:myhost?custom.function.now=com.mycompany.Now

Как только функция зарегистрирована, ее можно использовать в SQL-запросе:

select first_name, now() from people

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

Проект доступен в GitHub .

В следующей статье из этой серии будет объяснено, как работать со сложными типами.

Оригинал: “https://dev.to/alexradzin/extending-the-aerospike-jdbc-driver-with-udfs-5gei”