2019独角兽企业重金招聘Python工程师标准>>>

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.客户端和服务器端需要同时拥有自定义函数的类文件,不然会找不到文件

2. 采用client方式启动的ignite获取的cacheconfigeration对象和服务器段启动的ignite获取的cacheconfigeration对象是不一样的,客户端必须定义不一样的cache名,且服务器端必须配置sqlchema,不然会报错找不到sqlschema。

3. 程序中使用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++;

}

}

}

转载于:https://my.oschina.net/zhouwang93/blog/1828055

ignite自定义函数相关推荐

  1. 2021年大数据Hive(八):Hive自定义函数

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive自定义函数 一.概述 1.UDF(User-Define ...

  2. 如何在sqlite3连接中创建并调用自定义函数

    #!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

  3. 自定义函数_自定义函数,让你的表格为所欲为

    自定义函数可以做什么?可以让你的表格为所欲为! 这篇文章教你如何掌握自定义函数. 函数是大家在使用 Excel 工作的过程中经常会用到的. 比如大家已经很熟悉了的求和函数 SUM,计数函数 COUNT ...

  4. 【mysql的编程专题⑤】自定义函数

    用户自定义函数(user-defined function,UDF) 是一种对mysql的扩展途径,其用法与内置函数相同 创建自定义函数 语法 create function function_nam ...

  5. 在python中使用关键字define定义函数_python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...

  6. 查缺补漏 | Python自定义函数

    1 默认参数要放在自定义函数参数列表的最后,也就是说下面的定义是不允许的 2 调用函数时熟悉的是位置参数,但是也可以用关键字参数,也就是调用时把参数名写出来(可以通过它来改变参数的顺序).不过貌似系统 ...

  7. 实验 4 在分支循环结构中调用自定义函数

    1.利用循环计算多个圆柱体体积. 要求: 1. 当输入的半径r或h<=0时,提示输入错误,重新输入: 2. r和h为整形: 3. 利用变量n代表多少个圆柱需要计算,n由键盘输入: 4. 连续计算 ...

  8. 关于学习Python的一点学习总结(26->自定义函数及创建初始化数据结构函数)

    62.自定义函数: 1.判断某个对象是否可调用,使用内置函数callable >>> import math>>> x=1>>> y=math.s ...

  9. MySQL-自定义函数

    函数体由合法的SQL语句构成: 可以是简单的select或者insert语句 如果是复合结构,则使用begin--end语句: 复合结构可以包含声明,循环,控制结构: 创建自定义函数: CREATE ...

最新文章

  1. python序列类型-python-序列类型
  2. SpringBoot(一)_快速实战搭建项目
  3. 【ssi】增删改查六操作小框架(八)
  4. Linux日志服务器的搭建
  5. Spark 配置指南
  6. 20210627:力扣第247周周赛(上)
  7. EF的注解Annotation和Fluent API
  8. RSA、DSA算法原理与举例
  9. 新中大财务软件V5.08安装
  10. nginx工作原理及配置
  11. 【离散数学】图论 第七章(6) 图的结点着色和Welch Powell法、平面图着色、希伍德五色定理、四色定理
  12. Python数据分析通关,30个案例!
  13. 【渝粤教育】电大中专学前教育学作业 题库
  14. hadoop测试环境完全分布式安装配置
  15. Typora桌面快捷方式创建
  16. matlab newton method,matlab Newton method
  17. 【玩转数据系列十五】机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)
  18. 日常使用的共享文件协议服务---FTP、NFS、SMB
  19. wxPython in Action (wx.ListBox)
  20. html字体下划线取消,取消下划线与显示下划线设置

热门文章

  1. 网页中如何启用QQ交谈
  2. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)
  3. 为什么程序员不擅长评估开发时间?(转)
  4. 【Vegas原创】更改域用户的IE默认首页
  5. GridView跨行合并单元格
  6. LaTEX、 Aurora、 markdown常用数学符号
  7. BZOJ1086:[SCOI2005]王室联邦——题解
  8. 2199. [HZOI 2016] 活动投票
  9. postgresql 查看数据库,表,索引,表空间以及大小
  10. 系统文件打开检测脚本