SPL CookBook 2022

 

前言

SPL(Structured Process Language) 是专业数据计算引擎 esProc 所用的程序语言,SPL 中固化了大量结构化数据运算类库,在有序集合运算、数据结构变换、特殊分组计算、表间关联与比对、大数据计算等方面做了深入研究,尤其是它的分步计算与中间结果的复用机制,使得复杂代码的编写大大减化,学习成本大幅度下降,是帮助开发的好工具。

使用 SPL 编写数据计算处理代码要比 SQL 和 Python 等简捷得多,它提供的有序集合存储对象,其成员可以引用另一个有序集合或单条记录,从而使得很多复杂计算变简单;它天然支持中间结果的临时保存与复用,使得复杂 sql 得以简化;它在有序归并、有序关联方面提供了大量的函数,使得程序员不用再为这些复杂的计算浪费精力;它提供的数据库游标、文件游标等访问机制、多线程并行计算相关函数,使得程序员玩转大数据和小数据量一样轻松。

本书中收集了数百个数据处理中的常见任务及对应的 SPL 代码,涵盖了数据分析人员面对的大部分场景,掌握这些任务的实现方法并加以组合,可以很轻松地应用常规的数据分析处理。

目录

第 1 章 查找定位与筛选

1.1 按条件取成员的位置

1.2 按条件取成员

1.3 多条件筛选

1.4 找出满足条件的第一条记录

1.5 查找最小值对应记录

1.6 查找最大值对应记录

1.7 按主键值取成员位置

1.8 按主键值取成员

1.9 按主键值取多个成员

1.10 前 N 名 / 后 N 名:取值

1.11 前 N 名 / 后 N 名:取序号

1.12 前 N 名 / 后 N 名:取对应记录

1.13 前 N 个 / 后 N 个

1.14 分组:组内筛选前 N 名 / 后 N 名

1.15 分组:组内筛选前 N 名 / 后 N 名不产生子集

1.16 分组:用汇总值筛选分组

1.17 分组:筛选时用到分组汇总值

1.18 有序:找出最大值成员序号后再跨行运算

1.19 有序:用相邻行筛选

1.20 有序:用相邻区间筛选

1.21 有序:找出连续出现某种情况的区间

第 2 章 聚合

2.1 求和

2.2 求最大最小值

2.3 求平均值

2.4 计数

2.5 逻辑与

2.6 逻辑或

2.7 非重复计数

2.8 中位数

2.9 分组:求和

2.10 分组:求最大最小值

2.11 分组:求平均值

2.12 分组:计数

2.13 分组:逻辑与

2.14 分组:逻辑或

2.15 分组:非重复计数

2.16 分组:中位数

2.17 迭代聚合

2.18 迭代聚合:自定义终止迭代条件

第 3 章 集合运算

3.1 两个集合的合集

3.2 两个集合的交集

3.3 两个集合的并集

3.4 两个集合的差集

3.5 两个集合的异或集

3.6 合集与差集的混合使用

3.7 序列中所有集合成员的合集

3.8 序列中所有集合成员的并集

3.9 序列中所有集合成员的交集

3.10 从属和包含:成员从属判断

3.11 从属和包含:集合包含判断

3.12 从属和包含:顺序相关的集合包含判断

3.13 从属和包含:根据主键值确定记录是否存在

3.14 序列间运算:序列的比较

3.15 序列间运算:多个序列中成员的对位计算

3.16 序列间运算:比较两个序列是否相等

3.17 序列和单值间的运算

3.18 同序集合按原序归并计算合集

3.19 同序集合按原序归并计算并集

3.20 同序集合按原序归并计算交集

3.21 同序集合按原序归并计算差集

3.22 同序集合按原序归并计算异或集

3.23 多个序表按主键归并计算合集

3.24 多个序表归并法比较差异

3.25 无序表归并法计算并集

3.26 序列的聚合运算:并集和差集

3.27 序列的聚合运算:交集

3.28 两个小文件数据的多种集合运算

3.29 使用多个小文件数据,执行复杂集合运算

3.30 两个大数据表归并法计算合集

3.31 两个大数据表归并法计算并集

第 4 章 排名与排序

4.1 简单成员排序

4.2 行式数据排序 - 按单字段

4.3 行式数据排序 - 按多字段组合

4.4 行式数据排序 - 按表达式

4.5 排序后按原始序号获取记录

4.6 按指定次序排序

4.7 指定次序有重复值的排序

4.8 部分数据按指定次序剩余按原序

4.9 打乱次序

4.10 组内排序

4.11 组排序

4.12 简单成员排名

4.13 行式数据排名 - 按单字段

4.14 行式数据排名 - 按多字段组合

4.15 行式数据排名 - 按表达式

4.16 将并列排名的成员拼接起来

4.17 组内排名

4.18 组排名

第 5 章 有序运算

5.1 相邻行的引用

5.2 相邻区间的引用

5.3 数据无序,保持原序时计算某列与上一日期的差值

5.4 分组内相邻行的引用

5.5 定位特定成员,再和相邻行对比

5.6 定位多个成员,再和相邻行对比

5.7 迭代:计数

5.8 迭代:求和

5.9 迭代:提前终止的累计

5.10 应用:最大连续增长天数

5.11 应用:复杂跨行计算

第 6 章 分组

6.1 普通分组:按字段值

6.2 普通分组:按表达式

6.3 普通分组:按序号分组

6.4 对齐分组:每组最多保留一条记录

6.5 对齐分组:每组保留所有匹配成员

6.6 对齐分组:不匹配记录放到新组

6.7 按序号对齐分组:每组最多保留一条记录

6.8 按序号对齐分组:每组保留所有匹配成员

6.9 按序号对齐分组:可重复分组

6.10 枚举分组:每个成员只存放到第一个匹配组

6.11 枚举分组:不匹配成员放到新组

6.12 枚举分组:可重复分组

6.13 按段分组:按字段值分段

6.14 按段分组:按表达式分段

6.15 次序相关的分组:连续相同值分组

6.16 次序相关的分组:连续相同值分组 - 大数据

6.17 次序相关的分组:按相邻条件分组

6.18 次序相关的分组:按相邻条件分组 - 大数据

6.19 次序相关的分组:按序号分组

6.20 分组子集:关注子集而非聚合值

6.21 分组子集:对子集再用聚合值过滤

6.22 分组子集:对子集过滤,再对选出子集进一步分组

6.23 分组子集:在子集中跨行运算

第 7 章 关联

7.1 关联查询:两表单字段关联同时过滤

7.2 关联查询:两表多字段关联同时过滤

7.3 关联查询:多表关联

7.4 关联查询:左连接 - 单字段关联

7.5 关联查询:左连接 - 多字段关联

7.6 关联查询:全连接

7.7 关联查询:两表序号对位

7.8 关联查询:多表序号对位

7.9 关联查询:序号对位的应用 - 打乱字段值

7.10 利用关联补足分组汇总时的缺失数据

7.11 区间关联:写在公式里

7.12 区间关联:利用关联表

7.13 多级关联

7.14 外键值转换为对应记录

7.15 外键映射存在性检测

7.16 外键映射存在性反向检测

7.17 同序表采用归并法连接

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

7.19 带过滤条件的笛卡尔积

7.20 使用笛卡尔积计算矩阵相乘

7.21 计算笛卡尔积时采用左连接

7.22 大数据表与大维表的关联查询

7.23 小数据表与大维表的快速关联查询

7.24 同序数据表和大维表的快速关联查询

7.25 CrossApply 运算

7.26 OuterApply 运算

7.27 Apply 运算退化为笛卡尔积

7.28 Apply 运算的复杂用法

第 8 章 结构转换

8.1 行转列

8.2 列转行

8.3 双向转置

8.4 动态行转列

8.5 填充法行转列,列名动态生成

8.6 多行转多行

8.7 定位赋值法行转列

8.8 行转列,同时列间计算

8.9 主子表关联的动态行转列

8.10 多表关联的动态行转列

8.11 数据分栏

8.12 转置时解决数据类型不一致的问题

8.13 将同一行的并列属性拆分到多行

第 9 章 字符串

9.1 连接两列字符串

9.2 连接字符串与其它类型的数值

9.3 连接序列中的成员

9.4 连接序列成员时给串加引号

9.5 将序表转换为 csv 格式

9.6 将字符串拆分为字符序列

9.7 将字符串拆分为单词序列

9.8 用制表符作为分隔符拆分字符串

9.9 用逗号作为分隔符拆分字符串

9.10 用指定分隔符将字符串拆分为两段

9.11 用正则表达式拆分字符串

9.12 将字符串解析为数值

9.13 将百分比字符串解析为数值

9.14 自动解析单个字符串为相应的数据类型

9.15 在拆分字符串的同时解析

9.16 将字符串解析为表

9.17 从 Base64 编码串解析出键值对

9.18 用正则表达式解析表中字段

9.19 用正则表达式解析不定行文本

9.20 使用代码解析表中字段

9.21 修改 SQL 语句中的过滤条件

9.22 将标准 SQL 语句翻译成指定数据库所使用的格式

9.23 解析 HTML 文件,分析正文

9.24 解析 HTML 文件,读出序表

第 10 章 日期时间

10.1 计算 N 天后的日期

10.2 计算两个日期相差天数

10.3 计算两个日期时间的相差秒数 / 分钟数

10.4 计算一周的第一日和最后一日

10.5 计算季度日均销售额

10.6 计算年龄

10.7 计算 N 个月前的日期

10.8 有关工作日的计算

10.9 有关工作日序列的计算

10.10 有关日期序列的计算

10.11 等分时间段的计算

第 11 章 递归

11.1 递归查找单个引用

11.2 循环递归查找所有引用

11.3 递归查找引用,直到指定值

11.4 查找叶子记录

11.5 递归获取字段值

11.6 递归合并字段值

11.7 遍历目录下所有文件

11.8 遍历目录,汇总所有文件

11.9 查找上一级引用

11.10 查找引用链上有指定值的记录,并列出上级

11.11 查找所有上级引用

11.12 函数递归:汉诺塔问题

11.13 函数递归:海盗分金问题

第 12 章 复杂检索

12.1 集合包含性检测

12.2 较大集合的包含性检测

12.3 外键映射的存在性检测

12.4 非外键的匹配性检测

12.5 非外键匹配性检测的提速

12.6 多字段外键映射的存在性检测

12.7 一个自连接简化示例

12.8 外键映射的不存在性检测

12.9 匹配的不存在性检测

12.10 简化 SQL 双重否定的一个示例

12.11 匹配的存在性检测

12.12 与子查询所有结果比较

其他资料

SPL COOKBOOK 早期版本