暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBASE南大通用分享:OLAP Group函数数据合并并行功能介绍

GBASE数据库 2022-06-20
1280

OLAP Group函数数据合并并行功能介绍

背景

OLAP Group函数包括Rollup()、Cube()、Grouping sets(),它们是对普通分组聚集的扩展,可以输出多级汇总结果。在GBase 8a中如果不开启并行优化,它们首先生成各级汇总数据,再将汇总数据串行逐行合并到最终结果表,本文将介绍GBase 8a对于Group函数的并行处理功能。

 

Rollup()函数执行过程

Rollup()函数会对维度的组合从右至左生成汇总,例如Rollup (a, b ,c)等价于下列汇总临时表做union all操作:

group by (a, b, c)

group by (a, b)

group by (a)

group by ()               //表示对所有行进行聚集(不分组)

 

Cube()和Grouping sets()函数执行过程

Cube()和Grouping sets()与Rollup()类似,都是对简单分组聚合操作进行扩展。

Cube()对 各维度的所有组合生成汇总,如果Cube()函数包含n列,则将有2n个汇总临时表,例如Cube(a, b, c)等价于对下列汇总临时表做union all操作:

group by (a, b, c)

group by (a, b)

group by (a, c)

group by (b, c)

group by (a)

group by (b)

group by (c)

group by ()               //表示对所有行进行聚集(不分组)

 

列参数多时,Cube()的计算量是非常大的,如果不需要对所有组合计算汇总,可以使用Grouping sets()函数对制定的组合计算汇总,例如Grouping sets((a, b), (b, c))等价于对下列汇总临时表的union all操作:

group by (a, b)

group by (b, c)

 

所以Rollup()、Cube()、Grouping sets()都是对汇总临时表进行数据合并(union all)的操作,提升合并操作的效能对这三个函数均有正面影响。

 

并行执行方式

并行执行前需要先将数据进行划分,让各个线程处理不同的数据,数据划分有两种方式:

1、横向划分

如下图所示,每个线程处理表的部分行,涉及这些行的所有列。


2、纵向划分

如下图所示,每个线程处理表的某一列,涉及该列的所有行。


在OLAP Group函数的数据合并阶段,各列的数据已经由前面的分组聚集操作准备好了,需要做的只是将数据从汇总临时表写入最终目标表,其中不涉及任何CPU运算。

这种情况下,横向划数据会导致并行线程串行写入相同的文件,这时IO将成为瓶颈,效能无法通过并行得到提升;而使用纵向划分、列间并行的方式可以有效地提升效能,不会发生IO等待。

所以,对于包含多列的OLAP Group函数的执行,使用纵向划分、列间并行的方式可以有效地提升效能,GBase 8a通过参数_gbase_parallel_olap_group_merge控制,将该参数设置为1时打开并行优化。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论