集算器 - 敏捷数据计算引擎

集算器是什么?

文件处理器
SQL解题手
报表数据源
JAVA计算包

集算器解决什么?

文件处理器

  • 自助处理文本\Excel
  • 非专业开发人员快速探索手边数据
  • 文本类型多样,格式不规范
  • Excel版本多样,布局较特殊
  • 批量处理文件

SQL解题手

  • 桌面解决数据库难题
  • 逻辑复杂的计算
  • 多步骤过程化计算
  • 大量临时性计算
  • 自由度较高的探索式分析

报表数据源

  • 多样数据源,跨库跨源
  • 逻辑复杂的SQL
  • 繁琐冗长的JAVA自定义数据源
  • 低耦合可移植的库外存储过程

JAVA计算包

  • 禁用SQL,要求用Java实现算法
  • 非RDB数据源
  • 跨库计算
  • 复杂算法、过程化算法
  • 热部署低耦合的库外存储过程
说明:SPL是esProc采用的脚本语言,dfx为脚本文件,相当于外置存储过程,报表通过JDBC接口传入SPL语句实现结构化计算或执行脚本。

集算器优势

独立计算引擎

不依赖于数据库的计算能力,拥有完整的敏捷语法体系

计算过程中不需要数据库

  • 不是转换成SQL交由数据库执行
  • 可以针对任何数据源实施通用计算

敏捷程序语言

SPL(Structured Process Language)

结合了SQL、Java的共同优势
  • 适应集合批量运算(SQL优势)
  • 擅长分步过程计算(Java优势)
精心设计的丰富库函数和一致性语法
  • 比python更易掌握并且性能更好

示例某支股票最长连续涨了多少交易日?

Python代码

1 import pandas as pd
2 def iterate(col):
3 prev = 0;
4 res = 0;
5 val = 0;
6 for curr in col:
7 if curr – prev > 0:
8 res += 1;
9 else:
10 res = 0;
11 prev = curr;
12 if val < res:
13 val = res;
14 return val;
15 data = pd.read_excel('D:/Stock.xlsx',sheet_name=0). sort_values('tradeDate').groupby('Company')['closePrice'].apply(iterate);

SQL代码

1 select max(continuousDays)-1
2 from (select count(*) continuousDays
3 from (select sum(changeSign) over(order by tradeDate) unRiseDays
4 from (select tradeDate,
5 case when closePrice>lag(closePrice) over(order by tradeDate)
6 then 0 else 1 end changeSign
7 from stock) )
8 group by unRiseDays)

SPL代码

  A
1 =stock.sort(tradeDate)
2 =0
3 =A1.max(A2=if(closePrice>closePrice[-1],A2+1,0))
语法体系更容易描述人的自然思维!
集合运算领域专业语法,同样过程代码更简洁!

应用案例

案例1 某保险公司 - 库外存储过程

Vertica不支持存储过程,复杂业务逻辑只能用Java写,代码冗长不易维护

用户评价

  1. The best use for us is to pass parameters to the Vertica database.
  2. Each cell becomes a data array that are easy to use, compare and manipulate. It is very logical and you have made it user friendly.

优化效果

  1. 使Vertica支持库外存储过程
  2. 过程化算法实施简单,友好
  3. BIRT数据准备简单高效

案例2某银行 - 计算中间件

Excel种类多达44种,由Java解析数据入库,开发周期长,硬编码难度高

降低开发成本

全部44种Excel解析由原来的32人天下降到6人天

提升开发效率

每种Excel解析代码量由100行变为3行

降低维护成本

除代码量简短易维护外;脚本热部署即修改即生效