电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

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

来源:金蝶云社区作者:金蝶2024-09-237

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、filterexecuteSQL三种接口进行介绍,后续将推出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及使用简介

你是否只会用DynamicObject来处理业务逻辑?你是否需要对数据集进行更复杂的加工,如过滤、聚合、分组、与其他集合join等各种操作,却因不...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信