SPL 分组优化技巧

栏目: 数据库 · 发布时间: 6年前

1.      常规分组

当分组聚合的结果集不大时,可以使用groups。例如有学生成绩表存储在集文件中,表结构如下:

SPL 分组优化技巧

现在计算每个学生的总分数:

SPL 分组优化技巧

A1:成绩表的数据装入内存。

A2:按照studentID字段分组,计算总分。

如果成绩表数据太大,无法装入内存,则可以用游标方式:

SPL 分组优化技巧

A1:得到成绩表的游标。

A2:按照studentID字段分组,计算总分。

当成绩表记录很多,分组计算的结果集很大时,就要使用groupx:

SPL 分组优化技巧

A1:得到成绩表的游标。

A2:按照studentID字段分组,计算总分。

groupx的最后一个参数是缓冲区行数,也就是内存里能够一次处理的记录条数,这里指定为10000,实际使用时要根据自己的情况进行调整。

2.      有序分组

2.1.      前半有序

当数据对分组字段有序时,可以使用groups@o。如上例中,当成绩表对studentID字段有序时,就可以加上选项o:

SPL 分组优化技巧

如果成绩表太大,无法装入内存,可以使用游标:

SPL 分组优化技巧

同样,如果有序分组的结果集很大,就不能用groups,这时要使用group:

SPL 分组优化技巧

group的返回是游标,这一点跟groups不一样。

2.2.      后半有序

“后半”有序是指:要分组的表 T 已经对字段a,b有序,现在我们要将表T按字段b进行分组。例如有保存销售记录的集文件sale.btx,表结构如下:

SPL 分组优化技巧

销售表对字段date,employeeID有序,现在要计算每个员工的销售总额,对employeeID字段做分组,这时常规分组会计算hash,但这种后半有序的情况可以使用groups@h,看一下实现:

SPL 分组优化技巧

如果销售表太大,无法装入内存,可以使用游标:

SPL 分组优化技巧

3.      序号分组

当分组表达式的结果是序号的时候,可以使用groups@n。仍然使用上例的销售表,现在要计算统计每个月的销售额,实现是这样的:

SPL 分组优化技巧

A1:得到销售表的游标。

A2:把date字段转换为月份,计算每个月的销售总额;如果存在date字段是null的情况,则要加上选项@0。

使用@n之后,会依据序号去分组,而不用再计算HASH,所以要比不带@n时快。

使用3亿条数据测试,本案例实际测试结果:

SPL 分组优化技巧

4.      过滤拆分

过滤拆分是指根据条件分组,满足条件和不满足条件的分成两个集。使用select可以做到这种拆分,但是要遍历两次,即一次select(条件true),和一次select(条件false)。

而使用group和align只需要遍历一次。以上面成绩表为例,现在要把成绩及格的和不及格的分成两组,看一下group的实现:

SPL 分组优化技巧

需要注意的是,使用group过滤拆分的结果不一定是两个集,有可能结果只有一个集,如本例中,有可能出现成绩都大于60的情况。这时候需要判断一下结果集的个数,或者使用align,因为align的结果肯定是两个集,没有符合条件的记录,也会产生一个空集。来看一下align的实现:

SPL 分组优化技巧

如果想在过滤拆分中把不满足的写进文件,可以使用select(x;file),看一下实现:

SPL 分组优化技巧

执行完成后,A3里是成绩及格的,不及格的会保存到集文件Fail.btx。

如果要拆分为多个集,可以使用groupn。例如要把成绩分为优秀、良好、及格和不及格这些集合,可以这样实现:

SPL 分组优化技巧

5.      组内TopN

top也可以用于group中,例如计算每个部门里薪水的最大值:

SPL 分组优化技巧

A1:得到员工表的游标。

A2:按照dept字段分组,组内再求最高薪水值,命名为topSalary。

A2执行结果的MaxSalary字段是数值,如果想查询薪水最高的员工的信息,可以写成这样:

SPL 分组优化技巧

top不仅可以返回最大值,还可以得到前n个最靠前的值,这时把1写成n即可。例如计算每个部门里薪水排前三名的员工的信息:

SPL 分组优化技巧

6.      并行

使用groups进行分组计算时,还可以采取并行方式进一步提高性能,这时要加上选项@m。

如上面例中,计算每个员工的销售总额,看一下并行方式的实现:

SPL 分组优化技巧

如果数据太大,无法装入内存,可以使用多路游标:

SPL 分组优化技巧

本文由润乾软件 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。

转载、引用前需联系作者,并署名作者且注明文章出处。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。


以上所述就是小编给大家介绍的《SPL 分组优化技巧》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Host Your Web Site In The Cloud

Host Your Web Site In The Cloud

Jeff Barr / SitePoint / 2010-9-28 / USD 39.95

Host Your Web Site On The Cloud is the OFFICIAL step-by-step guide to this revolutionary approach to hosting and managing your websites and applications, authored by Amazon's very own Jeffrey Barr. "H......一起来看看 《Host Your Web Site In The Cloud》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码