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...
点击下载文档
本文2024-09-23 00:27:53发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-139628.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章