Ignite自定义函数注意事项

简介: Ignite自定义函数注意事项

Ignite自定义函数注意事项

  1. Customer SQL Function
    首先,需要写自定义SQL函数的java类。

注意:1. 定义函数的方法必须是静态的static修饰。

      2. 自定义函数的方法不能重载。
      3. 每个方法必须要用@QuerySqlFunction注释。
      4.当有多个自定义方法时,不能同时在@QuerySqlFunction(alias=’XXX’)中定义别名。
      5. 使用setSqlfunction(‘xxx.class’)注册函数的时候,不能同时注册两个class,如果需要自定义多个函数可以在一个类中定义多个方法。

示例如下:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.ignite.cache.query.annotations.QuerySqlFunction;

public class addition2{

public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final String MINUTE_PATTERN = "yyyy-MM-dd HH:mm";
public static final String HOUR_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_PATTERN = "yyyy-MM-dd";
public static final String HOUR_FORMAT = "HH:mm:ss";
public static final String MONTH_PATTERN = "yyyy-MM";
public static final String YEAR_PATTERN = "yyyy";
public static final String MINUTE_ONLY_PATTERN = "mm";
public static final String HOUR_ONLY_PATTERN = "HH";

// @QuerySqlFunction
// public static double add1(int x,double y){
// return (double)x+y;
// }

@QuerySqlFunction
public static int add(int x,int y){
    return x+y;
}
@QuerySqlFunction
public static int chengfa(int x,int y){
    return x*y;
}
@QuerySqlFunction
public static int jianfa(int x,int y){
    return x-y;
}
@QuerySqlFunction
public static double chufa(double x,double y){
    if (y==0)
        System.out.println("被除数不能为零,重新输入:");
    return x/y;
}
@QuerySqlFunction
public static Date todate(String dateTimeString,String pattern) throws ParseException{
    if(pattern==null||pattern==""){
        pattern =DATE_PATTERN;
    }
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    return sdf.parse(dateTimeString);
}

}

  1. 注册自定义函数
    注意:1.客户端和服务器端需要同时拥有自定义函数的类文件,不然会找不到文件

    1. 采用client方式启动的ignite获取的cacheconfigeration对象和服务器段启动的ignite获取的cacheconfigeration对象是不一样的,客户端必须定义不一样的cache名,且服务器端必须配置sqlchema,不然会报错找不到sqlschema。
    2. 程序中使用setName(‘XXXX’)指定cachename的时候需要与已经存在的cacheName不同。

示例如下:
import java.util.Arrays;
import java.util.List;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;

public class SqlFunction {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    //local ignite connect
            IgniteConfiguration cfg1 = new IgniteConfiguration();
            cfg1.setIgniteInstanceName("productinfo_withtime");
            TcpDiscoverySpi spi = new TcpDiscoverySpi();
            TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
            ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47510"));
            spi.setIpFinder(ipFinder);
            cfg1.setDiscoverySpi(spi);
            cfg1.setClientMode(true);
            Ignite ignite = Ignition.start(cfg1);        
            CacheConfiguration ccfg = new CacheConfiguration();
            ccfg.setName("productinfo1");
            ccfg.setSqlSchema("productinfo_withtime");
            ccfg.setSqlFunctionClasses(addition2.class);        
            IgniteCache cache = ignite.getOrCreateCache(ccfg);
            SqlFieldsQuery query = new SqlFieldsQuery("SELECT add(number,20) add,chengfa(number,3) chengfa,jianfa(number,3) jianfa,chufa(unitPrice,3) chufa,number,floor(unitPrice) floor,unitPrice,todate(time,'yyyy-MM-dd'),time FROM SALE");
            QueryCursor<List<?>> cursor=cache.query(query);
            int i=1;
            for(List<?> row: cursor){
            System.out.println("调用add函数后的number数据第"+i+"行为:"+row.get(0)+"\t调用chengfa函数后number的数据为:"+row.get(1)+"\t调用jianfa函数后的number的数据为:"+row.get(2)+"\t调用chufa函数后的unitPrice的数据为:"+row.get(3)+",\tnumber原始数据为:"+row.get(4)+",\t调用内置floor函数后的unitprice的值:"+row.get(5)+",\tunitPrice原始数据为:"+row.get(6)+",\t调用to_date函数后saleDate数据为:"+row.get(7)+",\tsaleDate原始数据为:"+row.get(8));
                i++;
            }
        }
}
相关文章
|
机器学习/深度学习 自然语言处理 算法
基于深度学习的语音识别技术应用与发展
在当今数字化时代,语音识别技术已经成为人机交互领域的重要组成部分。本文将介绍基于深度学习的语音识别技术在智能助手、智能家居和医疗健康等领域的应用与发展,同时探讨该技术在未来的潜在应用和发展方向。
412 4
|
Rust 区块链
学Rust不学Cargo,等于没学Rust:features特性详解
在 Rust 中,Cargo 的 "features" 是一种条件编译机制,允许在编译 crate 时编译部分代码。这样可以在一个 crate 中提供多个功能,并根据需要选择性地启用或禁用这些功能。
413 1
|
关系型数据库 MySQL Shell
mac安装mysql最新版(v8.0.15),并使用navicat连接本地数据库
mac安装mysql有两种方式,一种是官网下载安装包后安装,另一种是使用终端安装。 参考链接: 1、mac安装mysql,并使用navicat连接本地数据库 2、Mac Navicat 出现 2003 - Can’t connect to MySQL server on ‘127.0.0.1’ (61 “Connection refused”)
905 0
mac安装mysql最新版(v8.0.15),并使用navicat连接本地数据库
|
6月前
|
安全 JavaScript Unix
开源协议不能随便选!选错直接被「背刺」
程序员晚枫带你了解开源协议的重要性!选错协议,你的项目可能被“闭源背刺”或“专利埋雷”。本文详解7大常见协议:GPL、MIT、Apache 2.0、BSD、LGPL、MPL/EPL和Creative Commons。每种协议适用不同场景,例如GPL适合技术民主化,MIT让代码自由传播,Apache 2.0提供专利保护。晚枫结合自身开源项目经验,分享选协议秘籍,助你避免法律风险,守护技术遗产不被滥用。记得查LICENSE文件,别等律师函来了才后悔!
284 7
|
运维 数据管理 网络安全
数据管理DMS操作报错合集之在执行任务流时遇到错误,该如何解决
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
供应链 数据库 UED
图解:订单系统的设计
本文主要讲述了在传统电商企业中,订单系统应承载的角色,就订单系统所包含的主要功能模块梳理了设计思路,并对订单系统未来的发展做了一些思考。
1884 1
图解:订单系统的设计
|
网络安全 数据安全/隐私保护
银河麒麟v10系统SSH远程管理及切换root用户的操作方法
银河麒麟v10系统SSH远程管理及切换root用户的操作方法
5969 0
|
前端开发 容器
Bootstrap 5 保姆级教程(十四):Flex
Bootstrap 5 保姆级教程(十四):Flex
|
Dubbo Java 应用服务中间件
微服务框架(七)Docker容器部署(Dubbo、Zookeeper、Dubbo-admin)
此系列文章将会描述Java框架**Spring Boot**、服务治理框架**Dubbo**、应用容器引擎**Docker**,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   **本文为Docker容器部署,包括Dubbo微服务、Zookeeper、Dubbo-admin的部署**
微服务框架(七)Docker容器部署(Dubbo、Zookeeper、Dubbo-admin)
|
存储 编解码 安全
探索FFmpeg复用:深入理解媒体数据的组织与封装(二)
探索FFmpeg复用:深入理解媒体数据的组织与封装
284 0