7.18 同序表采用归并法连接 - 大数据

 

多个相互关联的表有序,其中包括大数据表,使用有序归并筛选记录。
根据相互关联的订单表、订单明细表和客户表,查询总销售额超过 1 万的客户,其中订单明细表和订单表数据量很大,无法全部加载到内存。

imagepng

使用 joinx() 函数进行有序归并。

脚本:

A
1 =connect(“db”)
2 =A1.cursor(“select * from Order order by ID”)
3 =A1.cursor(“select * from Detail order by ID”)
4 =A1.query@x(“select * from Customer”)
5 =A2.switch@i(CustomerID,A4:ID)
6 =joinx(A5:Order,ID;A3:Detail,ID)
7 =A6.groups(Order.CustomerID.Name; sum(Detail.Amount):Amount).select(Amount>10000)

A1 连接数据库
A2 创建订单表游标
A3 创建订单明细表游标
A4 查询客户表
A5 使用 switch@i 函数,将订单表的客户 ID 转换成对应记录,并删除不匹配记录
A6 使用 joinx 函数对订单表和订单明细表的游标进行有序归并
A7 分组汇总每个客户的销售额,并选出销售额大于一万的记录

运行结果:

Name Amount
ALFKI 14848.0
AROUT 55492.0