algo查询学习笔记

一、algo的定义:

1、Algo是内存数据库计算引擎,提供SQL计算功能,支持常用的SQL算法,遵循SQL92标准 ,是一个迭代计算框架

2、Algo的作用:数据库分库后,替代SQL功能 替代复杂SQL 替代临时表 报表框架

二、原理:algo查询学习笔记

1、DataSet的定义:

DataSet是结果集:类似JDBC ResultSet 结果集转换器 迭代计算

接口类:kd.bos.algo.DataSet

两类接口: Transform,转换DataSet,生成新的DataSet Action,消费DataSet

2、DataSet转换方法:

①、将一个DataSet转换成另一个DataSet 转换接口,包括主要sql操作,如orderby,select,where,filter,group by,range,top,union等等 可执行sql语句,executeSql

algo查询学习笔记
 

示例:

​
Dataset dataset =null;
Dataset test =dataset.executesql( "select * from test" );

​

②、Action是消费DataSet,Action执行结果不是DataSet,Action执行后,DataSet自动关闭。

Action接口不多,比如count,cache

algo查询学习笔记

 3、DataSet引用关系树

DataSet经过多次转换后,会形成一个引用关系树,如:

DataSet c = a.union(b);

DataSet e = c.select(new String[]{“fid”,”fname”});

DataSet f = c.join(d,xxx).finish(); 非叶子节点都是被引用的DataSet 每个DataSet节点都会消耗资源或者引用资源,close时会释放资源 DataSet.close时,会自动close引用节点 所以,所有叶子节点close,会自动close整棵树 叶子节点必须closealgo查询学习笔记

三、Algo API对象

接口/对象类

作用

说明/注意

kd.bos.algo.Algo

创建DataSet

getCacheDataSet(String cacheId)

这个类是入口,给平台使用的,业务不要使用

kd.bos.algo.DataSet

DataSet操作接口,包括转换,action,close等

Kd.bos.algo.RowMeta

DataSet的元数据,类似jdbc ResultSetMetaData

由字段Field[]组成

Kd.bos.algo.Field

字段

Kd.bos.algo.DataType

数据类型,包括主要数据类型

Kd.bos.algo.Input

数据源接口

Kd.bos.algo.Row

行接口,行值访问器

Row是一个虚接口,访问器,不是Object[],所以业务代码不能把Row缓存起来

CachedDataSet

DataSet.cache的结果对象

不是DataSet的子类

CacheHint

Cache hint,指示

JoinDataSet

DataSet.join的结果对象,也是Join构造器

不是DataSet的子类

HashJoinDataSet

DataSet.hashJoin的结果对象,也是HashJoin构造器

不是DataSet的子类

GroupbyDataSet

DataSet.groupBy的结果对象,也是groupBy构造器

不是DataSet的子类

HashTable

DataSet.toHashTable的结果对象,是hashJoin的参数

JoinType

Join类型枚举

JoinHint

Join hint,指示

RowMetaFactory

创建RowMeta

给平台用的

1、获取元数据RowMeta,Field,DataType ,

DataType类型 行遍历器 ,Row接口 DataSet接口 Transform Action Close

RowMeta rowMeta = dataSet.getRowMeta();

Field field = rowMeta.getField(index);

2、行遍历器:类似ResultSet,提供遍历方法 得到遍历器:Iterator<Row> iterator();

语法糖:for(Row row:DataSet)遍历,隐含调用了iterator方法 每个DataSet只能显式得到一次遍历器 虽然被引用的DataSet内部可能会被遍历多次

3、Row接口:

public int size(); public Boolean getBoolean(int index);
public Object get(int index); public Boolean getBoolean(String field);
public Object get(String field); public Double getDouble(int index);
public String getString(int index); public Double getDouble(String field);
public String getString(String field); public BigDecimal getBigDecimal(int index);
public Integer getInteger(int index); public BigDecimal getBigDecimal(String field);
public Integer getInteger(String field); public Date getDate(int index);
public Long getLong(int index); public Date getDate(String field);
public Long getLong(String field); public Timestamp getTimestamp(int index);
public Timestamp getTimestamp(String field);

4、DataType类型:DataType type = field.getDataType();

BooleanType

StringType

IntegerType

LongType

DoubleType

从元数据ORM框架查出来的数据不会有Double

BigDecimalType

DateType

TimestampType

NullType

Select中动态创建null Field生成

UnknownType

表达式解析后无法确定的列,业务不会用到

5、创建DataSet

①、业务使用: QueryServiceHelper. queryDataSet(String algoKey, String entityName, String selectFields, QFilter[] filters,String orderBys) ORM.queryDataSet(String algoKey, String entityName, String selectFields, QFilter[] filters,String orderBys) DB.queryDataSet();

②、Algo原生: Algo algo = Algo.create(algoKey); public abstract DataSet createDataSet(Collection<Object[]> rowList, RowMeta rowMeta); public abstract DataSet createDataSet(Iterator<Object[]> iterator, RowMeta rowMeta); public abstract DataSet createDataSet(ResultSet rs); public abstract DataSet createDataSet(Input… inputs);

③、通过Input创建DataSet,请参考高级API

④、什么是algoKey

无论由哪种方法创建DataSet,都必须传algoKey algoKey是用来: 监控追踪DataSet的使用情况,包括日志,性能(IO,CPU,时间),执行计划 可根据algoKey动态配置DataSet执行行为 比如:algoKey=fi.abc,未来可能的配置项包括: algo.fi.abc.env=local/cluster/spark algo.fi.abc.maxrowcount=100000 algo.fi.abc.querytimeout=60*1000 algoKey定义规范: fi.gl.AccountBalance 调用类名字Class.getName()

⑤、DataSet 接口-sql查询

除了需要两个DataSet的操作,比如Join,Union,大部分都支持SQL查询 基于SQL查询得到DataSet和基于API得到DataSet是等价的

方法

功能

DataSet executeSql(String sql)

执行sql语句

⑥、DataSet 接口:

DataSet接口,表达式语法在文档说明

方法

功能

select(String[] exprs)

select(String exprs)

选择字段,类似: select a,b,c,a,b,c可以是表达式

addField(String expr, String alias)

增加字段

addNullField(String alias)

增加null字段,等价于addField(“null”,alias)

addBalanceField(String expr, String alias)

增加余额字段,该字段的值从上往下累加

removeFields(String... fields)

删除字段

filter(String expr)

filter(String expr, Map<String, Object> params)

where(String expr)

where(String expr, Map<String, Object> params)

过滤,类似where,expr中可以写变量,变量值通过params传递,比如”a>b”, params是map,key包含a和b

orderBy(String[] fields)

排序,field可以写成field asc,field desc

groupBy(String[] groupFields)

groupBy(String[] groupFields, boolean[] orderByDescs)

groupBy操作,后续详细说明

DataSet join(DataSet rightDataSet)

DataSet join(DataSet rightDataSet, JoinHint hint)

DataSet join(DataSet rightDataSet, JoinType type)

DataSet join(DataSet rightDataSet, JoinType type, JoinHint hint)

DataSet leftJoin(DataSet rightDataSet, JoinHint hint)

DataSet rightJoin(DataSet rightDataSet, JoinHint hint)

DataSet fullJoin(DataSet rightDataSet, JoinHint hint)

Join操作,后续详细说明

DataSet hashJoin(HashTable hashTable, String leftJoinKeyField, String[] 

DataSet hashTableSelectFields)

DataSet hashJoin(HashTable hashTable, String leftJoinKeyField, String[] 

DataSet hashTableSelectFields, boolean includeNotExist)

HashJoin操作,后续详细说明

 








 

 

上一篇:Exploring Market Making Strategy for High Frequency Trading: An Agent-Based Approach


下一篇:Backtesting strategies using tick data