2021-04-11

SPL

SPL(Structured Process Language)是一种面向结构化数据计算处理的程序设计语言,SPL可以读作[sipl]。

在SPL出现之前,SQL是结构化数据查询和运算的主流程序语言,但由于其理论基础关系代数的限制,SQL在实现复杂过程式及有序运算时非常繁琐,代码非常冗长而难以维护,对于复杂运算也很难获得高性能,常常严重依赖于数据库的优化机制。而且,SQL作为关系数据库的伴生品,也继承了数据库的封闭性,很难把SQL的计算能力应用到数据库之外的数据上。为解决SQL的各项困难,自2008年起,中国润乾公司开始研究不基于关系代数的结构化数据计算体系,经过多年反复尝试,提出离散数据集模型,并基于该理论发展出SPL及采用SPL语法的计算产品集算器。

与SQL相比,SPL最大的不同是面向复杂过程式运算,而不是简单查询。其理论基础离散数据集特别强调数据离散性与集合化的统一,使得SPL很容易实现有序计算、定位计算以及更复杂的集合运算。另外,SPL还强调开放性,并不绑定在某种数据库中,而是作为一种独立的程序设计语言出来,因而可以方便地处理数据库之外的数据,如文件、互联网数据,以及跨数据库计算。与SQL类似的是,SPL也是面向结构化数据,因而在命名时也采用了和SQL类似的缩写。不过,虽然SPL可以作为SQL在复杂计算方面的进化版,但因为是面向过程运算,需要对分步及循环分支等逻辑控制有更好的支持,所以SPL没有再延用SQL类英语的语法风格,而是采用了其它高级程序设计语言的语句、函数风格语法,其代码更象是Java、Basic等语言。

一段SPL与SQL的代码对比示例:计算一支股票最长连续上涨了多少天。SQL缺乏离散性,对有序运算支持繁琐,需要多层嵌套才能完成,代码冗长难懂

SELECT max(consecutive_day-1)FROM (SELECT count(*) consecutive_dayFROM (SELECT sum(rise_or_fall) OVER(ORDER BY trade_date) day_no_gainFROM (SELECT trade_date,case when close_price>lag(close_price) OVER(ORDER BY trade_date) then 0else 1 end rise_or_fallFROM stock_price))GROUP BY day_no_gain)

SPL对离散性支持很好,代码符合常规思维,简单易懂

=stock_price.sort(trade_date)

=0

=A1.max(A2=if(close_price>close_price[-1],A2+1,0))

SPL代码习惯于被写在表格中,可以直接引用格名作为变量,也容易看出分步运算的风格。当然,SPL也可以用普通文本方式编写。

发表回复

Your email address will not be published. Required fields are marked *