浅解比SQL更好用的SPL

从 SQL 到集算器的基本查询语法迁移(一)单表操作

浅解比SQL更好用的SPL

数据库和数据分析领域,有一个强大的存在,大名 SQL,全名结构化查询语言 (Structured Query Language)。从字面上看,这个语言的目标就是把数据“查询”出来,而查询这个词给人的感觉并不是很难。但实际上,为了支持貌似简单的查询,需要进行大量的计算动作,甚至整个过程就是一个多步骤的计算,前后步骤之间还有很强的依赖关系,前面计算的结果要被后面使用,而后面的输出有可能需要我们对前面的计算进行调整。

打个比方,这有点类似于去各类网点办事,填表递交后,相关办事人员开始在窗口后忙忙碌碌,时不时还会甩回来几个问题要求澄清,等到最后拿到回复,还有可能根本不是自己期望的结果!这时候,坐在办事窗口外的我们,抓狂之余,往往会产生一个念头,如果我们能够看到,甚至参与到过程中,应该能够大大地提高办事效率。

没错,你应该能想到,下面要介绍的集算器,和 SQL 相比对于我们这些过程控来说,就是一个可以轻松把玩和控制的计算(不止是查询)工具。

我们要做的,就是“照猫画虎”地把习惯中的 SQL 操作迁移到集算器中,用小小的习惯改变,换来大大的效益提升。

首先,我们需要把数据从传统的数据源中“搬迁”到集算器中,这样后续的操作就可以完全在集算器中进行了。

我们最常用的数据源一般就是关系数据库 RDB。这里使用的样例数据,就是数据库中的两个数据表:

订单信息表(order,主键 orderId),包括订单编号orderId、客户代码customerId、雇员编号employeeId、订单日期orderDate、发送日期sendDate以及金额money****:

orderId customerId employeeId orderDate sendDate money
10248   VINET   2   2011-02-04   2011-02-16   440  
10249   TOMSP   9   2011-02-05   2011-02-10   1863  
10250   HANAR   9   2011-02-08   2011-02-12   1813  
10251   VICTE   9   2011-02-08   2011-02-15   670  

订单明细表(orderDetail,主键 orderId,productId),包括订单编号orderId、产品编号productId、价格price、数量amount、折扣discount

orderId productId price amount discount
11059   17   39   12   0.85  
11059   60   34   35   0.9  
11060   60   34   4   1  
11060   77   13   10   0.95  

“搬迁”,或者说导入数据的过程非常简单,如下图所示:

集算器A
1   =connect(“hsqlDB”)  
2   =A1.query(“select * from order”)  
3   >A1.close()  

首先建立数据库连接(网格 A1),然后直接通过单表全量查询的 SQL 语句从数据库中读取数据(网格 A2),最后清理现场,关闭数据库连接(网格 A3)。

在执行了脚本后,我们可以选中网格 A2,在结果区中看看搬过来的数据,同时,order 表在集算器中也换了个身份,我们称之为“序表”,用网格名称 A2 代表。序表是集算器中一个非常重要的概念,现在我们可以简单地把它理解成对应数据库中的一张表:

浅解比SQL更好用的SPL

其实,在集算器中,任何一个有计算结果的网格(一般是用等号“=”开始),都可以在执行脚本后,随时选中并查看结果,并通过网格名称 A7、B8 等随时引用,从而满足我们随时监控的欲望……

接下来,我们以 SQL 中 select 语句的各个子句为线索,看看集算器中是如何操作的:

第一个:SELECT 子句

用来选择需要查询的字段,也可以通过表达式来对字段进行计算,或者重命名字段。与之对应的,集算器里有 new、derive、run 三个函数。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。