Algo-内存数据库计算引擎接口说明

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

Algo-内存数据库计算引擎接口说明

# 1 cache 我们可以调用DataSet的接口: ```java public CachedDataSet cache(CacheHint cacheHint) ``` 来创建一个CachedDataSet。 + dataSet.cache(),dataSet是离线的,只能顺序遍历,遍历一次,无状态。 + CachedDataSet是将DataSet缓存起来,通过id多次访问,并提供随机按Range访问。 + CachedDataSet默认是有超时时间的(30分钟),业务可以自己设置。 ![cache.webp](/download/01000d8185ca3d404032a4d91607b36c0137.webp) ***示例*** ```java //写入缓存 CacheHint hint = new CacheHint(); Hint.setTimeout(60* 60 * 1000); //默认超时是30分钟 CachedDataSet cachedDataSet = DataSet.cache(cacheHint); String id = cachedDataSet.getCachedId(); //获取CachedDataSet CachedDataSet cachedDataSet = Algo.get CachedDataSet(id); //遍历缓存 Iterator<Row> iterator cachedDataSet.iterator(int begin, int length); 或者 List<Row> list = cachedDataSet. getList(int begin, int length); //关闭 cachedDataSet.close(); ``` # 2 Cache Builder 适用于当前dataset cache后可以继续添加row。 ```java //写入缓存 CacheHint hint = new CacheHint(); Hint.setTimeout(60* 60 * 1000); //默认超时是30分钟 CachedDataSet cachedDataSet = DataSet.cache(cacheHint); String id = cachedDataSet.getCachedId(); //获取CachedDataSet CachedDataSet cachedDataSet = Algo.get CachedDataSet(id); //遍历缓存 Iterator<Row> iterator cachedDataSet.iterator(int begin, int length); 或者 List<Row> list = cachedDataSet. getList(int begin, int length); //关闭 cachedDataSet.close(); ``` # 3 DataSetBuilder DataSetBuilder提供内存构造DataSet的功能,DataSetBuilder不同于CachedDataSet.Builder。 ```java RowMeta rowMeta = xxx; DataSetBuilder builder = Algo.createDataSetBuilder(rowMeta); builder.append(new Object[]{xxx}); builder.append(new Object[]{xxx}); DataSet dataset = builder.build(); ``` # 4 Input Input是一种数据源接口,通过Input可以创建一个DataSet,接口如下: ```java DataSet createDataSet(Input... inputs); ``` 执行并行取数,如果传入多个Input,默认启动4个并行查询。 Input有4个子类: + OrmInput + DbInput + OqlInput + CollectInput Input有一个子接口CustomizedInput,供自定义Input。 ***代码示例*** ```java int n = 8; OrmInput[] inputs = new OrmInput[n]; for(int i=0;i<n;i++){ Qfilter[] filters = …; //把filters拆成多个,可并行执行 Inputs[i] = new OrmInput(algoKey, String entityName, selectFields, filters); } DataSet dataset = Algo.createDataSet(inputs); ``` # 5 计算表达式 ***特性*** + expr支持基本四则运算,包括:+,-,*,/,()。 + 支持常量数字,字符串。 + 支持逻辑表达式: <,>,<=,>=,<>,!=, and, or, xor, not。 + 支持宏: NULL, TRUE, FALSE。 + 别名: expr alias, expr as alias。 + 支持跟SQL一样的Case When语法,2种。 + 支持函数。 ***代码示例*** ```java 1. famount 2. famount as amount 3. famount * 2 as amount, famount + 2 as amount, famount / fqty as amount, famount * fqty as mount, 4. (famount + qty) * 2 as amount 5. famount > fqty as b 6. famount > fqty and fqty > 100 as c 7. null as c, true as c, false as c 8. 100 as amount, 'abc' as name 9. fname + 'abc' as name ``` ***表达式语法*** | 类型 | 语法 | 说明 | | - | - | - | | 数值四则运算 | +,-,*,/,%,() | %为求余 | | 字符串拼接 | + | 或者用concat函数 | | 字符串like | like %abc% | 跟sql类似,通过%实现左右like匹配 | | 别名 | expr as alias | A as c, a+b as c | | 类型转换 | Cast(expr as DataType) | | | 布尔连接符 | and,or | | | 布尔比较符 | =, <, <= , >, >=, <>, != | <,<=,>,>=只适用于数值比较<> 等价于 != | | Case When语句 | 1.Case 表达式 When 值 then 值 [else 值] end
2.Case When 布尔表达式 then 值 [else 值] end | 跟sql一样,有两种形式 | | In | expr in (v1, v2,vN) | 跟sql一样 | | Is Null,Is Not Null | 1.Expr is Null
2.Expr is Not Null | 等价于expr=null, expr<>null | | 宏 | True, False, Null | | | 参数化 | expr>? | ?是参数,filter函数通过Map传入值 | | 函数 | Func(arg1,arg2) | | # 6 日期函数 | 函数 | 说明 | | - | - | - | | Now()
Date() | 返回当前时间 | | Year(date) | 返回date年月日中的年 | | Month(date) | 返回date年月日中的月 | | Day(date) | 返回date年月日中的日 | | Date(year,month,day) | 根据year,month,day返回Date字段 | | TO_DATE(str,format) | 如to_date(“1999-1-1”,”yyyy-MM-dd”),这里的format是Java的DateFormat规范,跟SQL的不兼容 | | TO_CHAR(str,format) | 如to_char(date,”yyyy-MM-dd”),这里的format是Java的DateFormat规范,跟SQL的不兼容 | | Dateadd(datepart,number,date) | DATEADD函数需要3个参数,格式(参考SQL):DATEADD(datepart,number,date),datepart可以为Year,Month,Day,Hour,Minute,Second | | DATEDIF(start_date,end_date,unit) | unit可以为Y,M,D | # 7 字符串函数 + concat(str1,str2,str3) 字符串拼接符,等价于str1+str2+str3。 + contains(left, right) 返回boolean,left是否包含right。 + startsWith(left, right) 返回boolean。 + endsWith(left,right) + lower(str) 返回小写字符串。 + upper(str) 返回大写字符串。 + len(str) 返回字符串长度int。 # 8 聚合函数 适用于GroupBy的select中。 | 类型 | 方法 | 说明 | 其它 | | - | - | - | - | | 普通聚合函数 | sum(String field)
sum(String expr, String alias) | expr:表达式 | | | 普通聚合函数 | avg(String field)
avg(String expr, String alias) | expr:表达式 | | | 普通聚合函数 | max(String field)
max(String expr, String alias) | expr:表达式 | | | 普通聚合函数 | min(String field)
min(String expr, String alias) | expr:表达式 | | | 普通聚合函数 | count()
count(String alias) | 等价于select count(1)等价于select(1) | count不需要指定field,因为count(1)=count(*) | | 特殊聚合函数 | maxP(String field, String propertyField)
maxP(String expr, String propertyField,String alias) | 用field/expr计算最大行,结果取propertyField字段 | | | 特殊聚合函数 | minP(String field, String propertyField)
minP(String expr, String propertyField, String alias) | 用field/expr计算最小行,结果取propertyField字段 | | | 控制 | finish() | 返回DataSet接口 | | # 9 特殊函数 + preRowValue() 取上行本列值。 + preRowValue("field") 取上行字段field的值。

Algo-内存数据库计算引擎接口说明

# 1 cache我们可以调用DataSet的接口:```javapublic CachedDataSet cache(CacheHint cacheHint)```来创建一个CachedDataSet。+ data...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息