日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

ignite自定义函数

發布時間:2025/6/15 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ignite自定义函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

Ignite自定義函數注意事項

  • 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.客戶端和服務器端需要同時擁有自定義函數的類文件,不然會找不到文件

    ??? ? 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自定义函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。