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