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資料庫函式
- Power Apps SortByColumns 函式使用注意事項APP函式
- 類别範本及其成員函式的定義及注意事項函式
- Oracle 自定義函式Oracle函式
- shell自定義函式函式
- Hive常用函式及自定義函式Hive函式
- .NetCore在跨域時設定自定義響應頭的注意事項NetCore跨域
- ES6中箭頭函式使用的注意事項函式
- 梯度提升二三事:怎麼來自定義損失函式?梯度函式
- hive 3.0.0自定義函式Hive函式
- Hive中自定義函式Hive函式
- python教程:自定義函式Python函式
- java自定義equals函式和hashCode函式Java函式
- PHP 自定義函式用法及常用函式集合PHP函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- Laravel 新增自定義助手函式Laravel函式
- laravel 自定義全域性函式Laravel函式
- Laravel 自定義函式存放位置Laravel函式
- Laravel自定義輔助函式Laravel函式
- FlinkSQL自定義函式開發SQL函式
- 棧空間受限情況下C/C++函式呼叫注意事項C++函式
- Angular 14 inject 函式使用過程中的一些注意事項Angular函式
- MySQL使用之五_自定義函式和自定義過程MySql函式
- JavaScript 設計模式系列 – 自定義函式(惰性函式)JavaScript設計模式函式
- Python命令列引數定義及注意事項Python命令列
- RandomAccessFile注意事項randomMac
- @Lombok注意事項Lombok
- 詳解箭頭函式和普通函式的區別以及箭頭函式的注意事項、不適用場景函式
- VBA 自定義常用函式 (備用)函式
- php自定義函式放哪兒PHP函式
- matlab自定義函式建立與使用Matlab函式
- MySQL全面瓦解18:自定義函式MySql函式
- 生產注意事項
- 電量注意事項
- CSP 考前注意事項
- 快取注意事項快取