Пользовательская функция SQL не найдена на узле сервера во время выполнения - PullRequest
0 голосов
/ 18 октября 2018

Пользовательская функция SQL отлично работает для меня, когда она используется в клиентском приложении Java, как описано в https://apacheignite -sql.readme.io / docs / custom-sql-functions .Тем не менее, когда он развертывается на узлах сервера Ignite в своем каталоге lib и вызывается через стандартный SQL через JDBC, Ignite сообщает

"Ошибка SQL [42000] ... Функция ... не найдена ... [90022-195]».

Ниже приведена конфигурация Ignite, используемая при запуске.

<property name="cacheConfiguration">
        <list>
                <bean class="org.apache.ignite.configuration.CacheConfiguration">
                        <property name="name" value="MyFunctions"/>
                        <property name="sqlFunctionClasses" value="MyFunctions"/>
                </bean>
        </list>
</property>

Я также пробовал имя кэша «default», но у него та же проблема.Если я использую имя кэша для пользовательской функции SQL, которое совпадает с именем таблицы, Ignite говорит

"Несоответствие конфигурации кэша (локальный кэш был создан с помощью Ignite API, а удаленный кэш был создан с помощью CREATE TABLE): "

Ignite точно загрузил пользовательский файл jar Java, потому что, когда он не был развернут, Ignite сказал бы, что не может загрузить пользовательский класс.

Запрос:

SELECT * FROM Страна WHERE sqr (2)> 100;

Какие изменения необходимы для узлов сервера Ignite для использования пользовательских функций SQL в операторах SQL, которыевыдаются через JDBC?

Спасибо.

1 Ответ

0 голосов
/ 18 октября 2018

Для начала, sqlFunctionClasses должен быть полностью квалифицирован, как в com.your.package.MyFunctions.

Вы также должны добавлять его в кэш страны, а не в MyFunctions.Если Страна действительно создана с CREATE TABLE, вы можете попытаться определить ее в шаблоне кеша .Например, вы можете использовать WITH "TEMPLATE=MyFunctions".

...