问题介绍
要在 Java 代码中实现类似 SQL 中的 GroupBy 分组聚合运算,是比较繁琐的,通常先要声明数据结构(Java 实体类),然后用 Java 集合进行循环遍历,最后根据分组条件添加到某个子集合中。Java 8 有了 Lambda(stream)代码简洁了许多,分组后往往还要跟着聚合操作,仍然需要单写聚合函数 sum(),count(*),topN()等。这些还都是最常规的分组和聚合运算,遇到对位分组、枚举分组、多重分组等非常规分组加上其他聚集函数 (FIRST,LAST…),代码就变得非常冗长且不通用。如果能有一个中间件专门负责这类计算,采用类似 SQL 脚本做算法描述,在 Java 中直接调用脚本并返回结果集就好了。Java 版集算器和 SPL 脚本,就是这样的机制,下面举例说明如何使用。
SPL 实现
-
常规分组
duty.xlsx 文件中保存着每个人的加班记录:
| workday | name |
| 2016-02-05 | Ashley |
| 2016-02-08 | Ashley |
| 2016-02-09 | Ashley |
| 2016-02-10 | Johnson |
| 2016-02-11 | Johnson |
| 2016-02-12 | Johnson |
| 2016-02-15 | Ashley |
| 2016-02-16 | Ashley |
| 2016-02-17 | Ashley |
汇总每个人的值班天数:
| A | |
| 1 | =file("/Users/test/duty.xlsx").importxls@tx() |
| 2 | =A1.groups(name;count(name):count) |

保存脚本文件CountName.dfx(嵌入 Java 会用到)
-
每组 TopN
取每个月、每个人、头三天的加班记录
| A | |
| 1 | =file("/Users/test/duty.xlsx").importxls@tx() |
| 2 | =A1.group( |

本文介绍了如何在 Java 中利用 SPL 脚本轻松实现数据分组,避免了繁琐的 Java 代码。SPL 提供了常规分组、对位分组和枚举分组等多种分组方式,通过 JDBC 调用存储过程方法嵌入到 Java 应用中。此外,文章还提到 SPL 入门版提供了终身使用权,并有丰富的技术文档和社区支持。
最低0.47元/天 解锁文章
686

被折叠的 条评论
为什么被折叠?



