esProc SPL 在结构化文本文件上的常规运算
esProc SPL在结构化文本文件上的常规运算
结构化文本文件是指以tab分隔的TXT文件或是逗号分隔的csv文件,这类文件可以看成是数据表。使用esProc SPL能够很方便地对这类文件进行常见的SQL式运算。
这里假定文件第一行是字段标题。
A  |  
   B  |  
  |
1  |  
   =T("scores.txt")  |  
   |
2  |  
   =A1.select(CLASS==2)  |  
   // filter  |  
  
3  |  
   =A1.avg(Chinese)  |  
   |
4  |  
   =A1.max(Math)  |  
   |
5  |  
   =A1.sum(English)  |  
   |
6  |  
   =A1.derive(English+Chinese+Math:total_score)  |  
   // derive a total_score column  |  
  
7  |  
   =A1.derive(if(Chinese>=90:"A",Chinese>=80:"B",Chinese>=60:"C";"D"):Chinese_evaluation)  |  
   // evaluate Chinese score  |  
  
8  |  
   =A1.sort(English)  |  
   |
9  |  
   =A1.sort(CLASS,-Math)  |  
   |
10  |  
   =A1.groups(CLASS;min(English),max(Chinese),avg(Math))  |  
   |
11  |  
   =A1.groups(CLASS;avg(English):avg_En).select(avg_En<85)  |  
   |
12  |  
   =A1.top(-3;English)  |  
   // Top 3 high English students  |  
  
13  |  
   =A1.groups(CLASS;top(3,English))  |  
   // Top 3 low English value in CLASS  |  
  
14  |  
   =A1.id(CLASS)  |  
   // distinct CLASS  |  
  
15  |  
   =A1.icount(CLASS)  |  
   // count distinct CLASS  |  
  
16  |  
   =A1.groups(CLASS;icount(English))  |  
   // count distinct English every CLASS  |  
  
17  |  
   ||
18  |  
   =T("sales.csv")  |  
   |
19  |  
   =T("product.csv").keys(ID)  |  
   // ID as key  |  
  
20  |  
   =A18.switch(ProductID,A19:ID)  |  
   // ProductID join ID  |  
  
21  |  
   =A20.derive(Quantity*ProductID.Price:amount)  |  
   |
22  |  
   ||
23  |  
   =T("sales.csv")  |  
   |
24  |  
   =A23.join(ProductID,A19:ID,Name,Price)  |  
   // import Name, Price join on ProductID=ID  |  
  
25  |  
   =A24.derive(Quantity*Price:amount)  |  
   
https://try.esproc.com/splx?2Xx
A1 读学生成绩表scores.txt数据为序表,文件中第一行是列名,第二行开始是数据,如下图所示。

A2 选出班级为2的数据记录
A3 计算语文平均分
A4 计算数学最高分
A5 计算英语总分
A6 在A1中新增一列total_score,其值为英语、语文、数学3列之和
A7 在A1中新增一列Chinese_evaluation,当语文成绩在90以上时评级为A,80以上时评级为B,60以上时评级为C,否则评级为D。
A8 按英语成绩升序排列
A9 先按班级号升序排列,班级内再按数学成绩降序排列
A10 按班级分组,计算各班英语最低分、语文最高分、数学平均分
A11 按班级分组,计算各班英语平均分,选出平均分低于85的班级
A12 按英语降序排列后,取出前3个英语成绩最高的同学成绩记录
A13 按班级分组,各班英语升序排列后,取出前3个最低的英语成绩去重和去重计数
A14 查出所有不重复的班级编号
A15 查出所有不重复的班级编号的个数
A16 按班级分组,查出各班所有不重复英语成绩的个数
A18 读销售数据表sales.csv为序表
A19 读产品数据表product.csv为序表,并设ID为主键
两表结构如下:

A20 用switch函数将A18中ProductID与A19中的ID进行关联(ID为主键时也可省略不写),此时ProductID列转换成了指向与它对应的产品记录。如果从A20中取出部分数据,将如下图所示

A21 A20中新增一列amount,其值为销售数量Quantity与产品价格Price的积,表达式ProductID.Price表示ProductID列指向的记录的Price列值
A23 重读销售数据表sales.csv为序表
A24 用join函数将A23中ProductID与A19中的ID进行关联(ID为主键时也可省略不写),同时引入A19中Name、Price列数据。如果取出A24中部分数据,将如下图所示

A25 A24中新增一列amount,其值为销售数量Quantity与产品价格Price的积
            
        

英文版