利用集算器实现分库汇总

当单台数据库的数据量太大而影响性能时,可以把数据拆分到多台服务器上,每台服务器只承担部分计算压力,再由SPL合并计算结果。特殊地,数据可拆分为历史数据库和当前实时数据库,由SPL实现T+0计算。下面用几个典型例子来说明分库汇总的用法。

过滤

订单表orders分库存储在两个Oracle数据库中,数据源名分别为orclA、orclB,请过滤出金额amount大于等于10000的订单。

SPL代码如下:

image.png

排序

请过滤出金额大于等于10000的订单,并按订单金额顺序排序。

分库排序算法中,各线程的计算结果不能简单合并,而要用merge函数归并,SPL代码如下:

image.png

分组汇总

请将订单表按年、月分组,对各组数据的amount字段求和。

分库分组汇总算法中,合并后的数据要做二次分组汇总,SPL代码如下:

image.png

如果分组数较多,则应当利用有序来提高性能,具体做法是:在SQL中事先按分组字段排序,使SQL结果有序,之后使用归并算法合并数据,并用group@o分组汇总。SPL代码如下:

image.png

分组汇总后过滤

请将订单表按年、月分组,对各组数据的amount字段求和,再过滤出汇总值大于110000000的结果。

SQL实现本算法,通常在group by后带having语句,即:

select extract(year from   orderTime)y,extract(month from orderTime)m,sum(amount) amt from orders group   by  extract(year from   orderTime),extract(month from orderTime) having sum(amount)>=120000000

分库实现算法时,不能直接使用上述SQL,应该先实现分组汇总算法,再用SPL实现过滤。代码如下:

image.png

异构库分库

SPL除了支持同构库分库,也支持异构库分库。需要注意的是,不同数据库的SQL语法并不通用,比如数字截断函数,Oracle中写作trunc,在MySQL中写作truncate。为了正确处理不同的语法,应当先写出SPL标准SQL,再用SPL的sqltranslate函数翻译成不同的本地SQL。

比如:orders表分库存储在Oracle和mysql中,数据源名为orcl和my,请查询amount字段大于等于10000的记录,并将amount字段截断取整。

SPL代码如下:

image.png

连接

除了单表分库计算,SPL也支持多表连接分库计算。这种情况下应对事实表和维表分别处理,事实表应当分库存放,每个数据库存放一部分数据,维表不分库,应当全量复制到每一个数据库中。

比如销售人员表sales是订单表orders的维表,两者以salesID为关联字段,请按sales表的部门字段dept分组,求各部门的销售额。假设sales表已全量存储于各数据库,则SPL代码如下:

image.png


集算器
Innovation Makes Progress
114 声望
9 粉丝
0 条评论
推荐阅读
性能优化技巧:前半有序时的排序
在对数据集进行排序运算时,有时会遇到这样一种场景:数据集T已经按字段a有序,而字段b无序,现在我们要将T按a、b排序,我们称之为前半有序(a有序)的排序。此时我们能想到一种优化的排序方法:从T中先取出a值相同...

raqsoft1阅读 663

知乎推广无需API开发集成连接并打通金数据
运营人员需每天需要将知乎推广上产生的线索录入到金数据表单中,便于运营负责人查看并分配给相关的销售人员及时跟进,但人工手动同步数据费时费力,且易出错。此外,时效性不强导致线索无法实现快速响应。因此,...

集简云阅读 1.1k

巨量引擎无需API开发集成连接并打通企业微信自建
企业在用巨量引擎推广时,常会因为无法紧盯推广后台查看线索,未及时跟进,导致客户流失。如每当巨量引擎推广有线索提交自动发送企微消息通知,实时与客户产生交互,将会大大提高线索转化率。因此,市场负责人常...

集简云阅读 665

抖音无需API开发集成连接并打通钉钉
每当抖音有新用户留资时,运营人员总是无法第一时间收到,即使查看完线索后还需同步到钉钉上,给负责的相关销售人员创建待办通知,便于销售人员及时跟进,但整个过程比较繁琐,容易导致意向客户等待时间过长,体...

集简云阅读 648

钉钉自建无需API开发集成连接并打通招商银行银企直联
市场活动经费,物品采购费,员工差旅费等报销单据类型多样化,都需要企业人员在钉钉OA系统上提交审批,审批通过后,再由财务人员手动同步到招商银行银企直联发起支付,一张单据常常覆盖付款账号,付款人,时间等...

集简云阅读 583

Java 集合中的排序算法浅析
排序是一个Java开发者,在日常开发过程中随处可见的开发内容,Java中有丰富的API可以调用使用。在Java语言中,作为集合工具类的排序方法,必定要做到通用、高效、实用这几点特征。使用什么样排序算法会比较合适,...

京东云开发者1阅读 270

封面图
Notion无需API开发集成连接并打通邮件系统
Jessica是一家上市公司的运营总监,常常需要与各部门人员沟通工作,每天收到的会议邀请及会议纪要的邮件不下10封。平时Jessica个人也习惯使用Notion做个人计划管理,便于直观了解计划的实施效果如何,以及更好地...

集简云阅读 452

114 声望
9 粉丝
宣传栏