如https://apacheignite-sql.readme.io/docs/custom-sql-functions中所述,在客户端Java应用程序中使用自定义SQL函数对我来说效果很好。但是,将其部署到Ignite服务器节点的lib目录中并通过JDBC通过标准SQL调用时,
“ 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肯定会加载自定义Java jar文件,因为当未部署时,Ignite会说它无法加载自定义类。
查询为
SELECT * FROM Country WHERE sqr(2)> 100;
Ignite服务器节点需要哪些更改才能在通过JDBC发出的SQL语句中使用自定义SQL函数?
谢谢。
答案 0 :(得分:0)
对于初学者来说,sqlFunctionClasses
应该是完全合格的,就像com.your.package.MyFunctions
一样。
您还应该将其添加到“国家/地区”缓存中,而不要添加到“我的功能”中。如果确实使用CREATE TABLE
创建了Country,则可以尝试在cache template中定义它。例如。您可以使用WITH "TEMPLATE=MyFunctions"
。