Algo入门篇 之 认识Algo及使用简介

你是否只会用DynamicObject来处理业务逻辑?
你是否需要对数据集进行更复杂的加工,如过滤、聚合、分组、与其他集合join等各种操作,却因不知如何快速实现各种处理算法而头疼?
你是否因Java对象太多导致内存OOM而烦恼?你是否需要一个功能强大、接口简单的数据处理框架?
如果你有上述疑问或需求,不要错过本期文章——苍穹内存数据库计算引擎Algo介绍,帮你把烦恼统统抛掉。
1 应用场景
需在内存中对数据进行过滤、聚合、分组、join等各种复杂内存计算的场景。
2 Algo是什么
1. Algo是内存数据库计算引擎,提供SQL计算功能,支持常用的SQL算法,遵循SQL92标准。

Algo迭代引擎框架
2. Algo是一个迭代计算框架。架构图如下,核心特性包括:
1)内存数据计算引擎(只计算不存储);
2)支持SQL,涵盖SQL全功能;
3)支持MapReduce函数;
4)支持数据集迭代和Pipeline模式;
5)高性能:并行排序、并行取数;
6)内存控制及缓存,保证内存可靠;
7)支持分布式缓存,数据集跨进程传递。

Algo架构及核心特征
3 Algo接口有哪些
Algo中最核心的接口就是DataSet,它又被分为三类接口:
1、Transform转换接口:转换DataSet,生成新的DataSet。它包括一系列算法,如关系数据库SQL算法、MapReduce算法等:
SQL算法:如orderby,select,where,filter,group by,range,top,union等等;
MapReduce算法:Map和Reduce方法可执行SQL语句,executeSQL。
2、Action:消费DataSet。Action执行结果不是DataSet,比如count,sum等操作。
3、Split:将DataSet拆分成多个DataSet,譬如根据过滤条件或者分组字段拆分,即splitByFilter和splitByGroup。
4 如何从DataSet获取数据
从DataSet获取数据有以下两种方法:
方法一代码如下:
Iterator<Row> iterator = dataset.iterator();
while(iterator.hasNext()){
Row = row iterator.next();
}方法二代码如下:
while(dataSet.hasNext()){
Row row = dataSet.next();
}
/**
不管哪种方式,迭代完成后,dataSet会自动关闭。如果没有迭代完成就退出了循环,则需要手动关闭dataSet,调用dataSet.close(),或者使用下面这种方式,离开作用域就会自动关闭。
**/
try(AlgoContext ctx = Algo.newContext()){
…
}5 接口方法说明
本文仅对Transform转换接口中的select、filter、executeSQL三种接口进行介绍,后续将推出Algo系列文章进行完整讲解。
select方法
select方法是从原DataSet中选取需要的列,与SQL的select相似,选取列的同时也可以对列做一些操作,主要API有:
DataSet select(String expr);
DataSet select(String... expr);
DataSetselect(boolean distinct,String... expr)。
DataSet select(String expr)代码示例如下:
//支持对列进行函数等操作
DataSet newDataSet = dataSet.select("billno,fqty*3 qty,lower(name) as name");
//支持case when操作
DataSet newDataSet = dataSet.select("billno,case when number is null then name when number='' then name else number end as name");
//case when的另一种写法
DataSet newDataSet = dataSet.select("billno,case id when 1 then 10 when 2 then 20 else 100 end id");DataSet select(String... expr)代码示例如下:
//效果与一个参数的select是一样的。
DataSet newDataSet = dataSet.select(new String[]{"billno","number","name"});DataSet select(boolean distinct,String... expr)代码示例如下:
//是对select后的结果进行去重,去重字段包括select的所有字段。
DataSet newDataSet = dataSet.select(true,new String[]{"billno","number","name"});filter方法
顾名思义,filter方法是过滤,类似SQL中的where,主要API有:
DataSet filter(String expr);
DataSet filter(String expr, Mapparams);//变量传参方式;
DataSet Filter(FilterFunction function);//自定义过滤函数;
DataSet where(String expr);
DataSet where(String expr, Mapparams);
DataSet where(FilterFunction function)。
DataSet filter(String expr)代码示例如下:
//支持普通的表达式过滤:普通的比较,等于,不等于,大于,小于,大于等于,小于等于等;in,like;is nulk,is //not null等。条件之间可以使用and or连接
DataSet newDataSet = dataSet.filter("name='bob' and age='30'");
//属性之间的比较
DataSet newDataSet = dataSet.filter("number=billno");
//也支持表达式中有函数
DataSet newDataSet = dataSet.filter("fdate = to_date('2022-05-16','yyyy-MM-dd'Algo入门篇 之 认识Algo及使用简介
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



