Ignite自定義函式注意事項
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.客戶端和伺服器端需要同時擁有自定義函式的類檔案,不然會找不到檔案- 採用client方式啟動的ignite獲取的cacheconfigeration物件和伺服器段啟動的ignite獲取的cacheconfigeration物件是不一樣的,客戶端必須定義不一樣的cache名,且伺服器端必須配置sqlchema,不然會報錯找不到sqlschema。
- 程式中使用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)+" 呼叫chengfa函式後number的資料為:"+row.get(1)+" 呼叫jianfa函式後的number的資料為:"+row.get(2)+" 呼叫chufa函式後的unitPrice的資料為:"+row.get(3)+", number原始資料為:"+row.get(4)+", 呼叫內建floor函式後的unitprice的值:"+row.get(5)+", unitPrice原始資料為:"+row.get(6)+", 呼叫to_date函式後saleDate資料為:"+row.get(7)+", saleDate原始資料為:"+row.get(8));
i++;
}
}
}
相關文章
- 函式注意事項函式
- Android自定義View注意事項AndroidView
- Mysql資料庫自定義函式的定義、使用方法及操作注意事項MySql資料庫函式
- setbuf函式使用注意事項函式
- 自定義函式索引使用及其注意點函式索引
- 使用find_in_set()函式的注意事項函式
- 類别範本及其成員函式的定義及注意事項函式
- Power Apps SortByColumns 函式使用注意事項APP函式
- 使用箭頭函式的幾個注意事項函式
- shell自定義函式函式
- Oracle 自定義函式Oracle函式
- perl自定義函式函式
- Hive常用函式及自定義函式Hive函式
- 梯度提升二三事:怎麼來自定義損失函式?梯度函式
- hive 3.0.0自定義函式Hive函式
- Hive中自定義函式Hive函式
- MySQL建立自定義函式MySql函式
- python 自定義函式Python函式
- oracle 自定義聚合函式Oracle函式
- mysql自定義函式篇MySql函式
- Oracle中自定義函式Oracle函式
- 一個自定義函式函式
- Oracle自定義聚集函式Oracle函式
- ORACLE 自定義函式BUG?Oracle函式
- SQL SERVER 自定義函式SQLServer函式
- SQL 自定義函式FUNCTIONSQL函式Function
- ES6中箭頭函式使用的注意事項函式
- 多執行緒CreateThread函式的用法及注意事項執行緒thread函式
- fork 和 vfork 使用的注意事項和 system() 函式的替代函式
- js自定義回撥函式簡單程式碼例項JS函式
- 空函式有參函式呼叫引數的注意事項Swift 1.1語言函式Swift
- 【TABLE】oracle表線上重定義注意事項Oracle
- PHP 自定義函式用法及常用函式集合PHP函式
- java自定義equals函式和hashCode函式Java函式
- mysql 自定義分析函式 least 及 日期函式MySql函式AST
- laravel 自定義全域性函式Laravel函式
- Laravel 自定義函式存放位置Laravel函式
- Laravel 新增自定義助手函式Laravel函式