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以上时评级为A80以上时评级为B60以上时评级为C,否则评级为D

A8 按英语成绩升序排列

A9 先按班级号升序排列,班级内再按数学成绩降序排列

A10 按班级分组,计算各班英语最低分、语文最高分、数学平均分

A11 按班级分组,计算各班英语平均分,选出平均分低于85的班级

A12 按英语降序排列后,取出前3个英语成绩最高的同学成绩记录

A13 按班级分组,各班英语升序排列后,取出前3个最低的英语成绩去重和去重计数

A14 查出所有不重复的班级编号

A15 查出所有不重复的班级编号的个数

A16 按班级分组,查出各班所有不重复英语成绩的个数

A18 读销售数据表sales.csv为序表

A19 读产品数据表product.csv为序表,并设ID为主键

两表结构如下:

..

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

..

A21 A20中新增一列amount,其值为销售数量Quantity与产品价格Price的积,表达式ProductID.Price表示ProductID列指向的记录的Price列值

A23 重读销售数据表sales.csv为序表

A24 join函数将A23ProductIDA19中的ID进行关联(ID为主键时也可省略不写),同时引入A19NamePrice列数据。如果取出A24中部分数据,将如下图所示

..

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