集算器程序之序列与序表(2)

2、序表是有结构的序列

集算器继承了关系数据库中的数据表概念,称为序表。与关系数据库的概念一致,每个序表也有其自身的数据结构,由若干字段构成。序表的成员被称为记录。

2.1有结构的二维数据对象

序列的成员可以是任意数据类型,比如普通类型、其他序列或者记录。而序表的成员一定是记录,且每条记录的结构相同。比如,下面的数据对象就是序表:

因为是有结构的二维数据对象,所以序表通常生成自SQL、文本文件、二进制文件、Excel文件,也可以由空白序表创建而来。下面的A1,B1,C1就是序表:

A1从文本文件生成序表,获得的结果就是上面的序表。B1通过SQL生成序表,C1指定字段名创建空序表。B1和C1中的数据如下:

序表支持大量的结构化数据算法,包括查询、排序、求和,平均值,合并重复记录等。比如:

A2中查询出Amount字段大于等于20000,Date是5月的记录:

A3将记录按照SalesID字段升序排列,SalesID一样时将按Date降序排列:

A4按SalesID和月份,对每一组数据的Amount求和,并计算该组订单计数:

2.2序表是特殊的序列

序表仍然属于序列,序列的集合性、有序性及其相关的函数都适用于序表。对于泛型性,由于序表的成员必然是同结构的记录,序列意义上的泛型不再支持,不过记录的字段取值可以是泛型数据,可以说是另一种意义的泛型性。因为这些特性,序表比传统程序语言更擅长处理复杂的计算问题。

比如利用有序性解答:每个月的销售额比上个月增长了百分之几。序表的算法如下:

A2中先统计出每月的总销售额:

A3中计算出最终结果如下:

利用集合性:假设业务上将订购数量大于1000的订单称为大订单,单价大于10000的订单称为重要合同,请找出:①既是大订单又是重要订单的订单;②以及除此之外的其他订单:

先在B2中选出大合同,再在B3中选出重要合同。A4中计算出2种合同的交集,就是问题①的答案:

B4中,用全部的订单与问题①的结果做差集,即可得到问题②的答案:

注意,上述代码中的A1中是序表,而B2,B3,A4和B4中,都是由序表派生出的排列,两者的区别和联系将在下面讲。

时间: 2024-08-27 16:25:31

集算器程序之序列与序表(2)的相关文章

集算器程序之序列与序表(1)

序列.序表.排列是集算器中最常用的数据类型,本文将阐明它们之间的关系和各自的特性. 1.序列是有序的泛型集合 1.1集合性 序列由多个数据构成, 这些数据被称为序列的成员, 成员可以是任意数据类型,比如字符串.数字.浮点.日期,序列成员还可以为空.序列具有集合的一般特性,可以进行集合运算.如: 上面网格中,A1,A2和A3中的值如下: 它们都是序列,其中,A1中为空序列:A2序列中的成员都是整数,也称作数列:A3的值是成员为字符串的序列. A4中用表达式计算序列,和A3中的常数序列不同,表达式中

集算器对数据库的操作

集算器可以从数据库中读取数据,可以将数据写入数据库,也可以调用数据库的存储过程.基于这三种基本操作,集算器可以应用在多种数据库相关的场景任务: 1.  数据分析和展现任务,其过程是: 通过sql或者存储过程,从数据库读入数据. 从其他数据源(其他数据库.文件.hdfs.nosql数据库.http数据源.json数据源等)读入数据. 将异构数据统一进行处理 提供给应用程序或者报表展现. 2.  类似ETL的批处理任务. 过程和分析展现任务类似,所不同的是最后一步数据不是用来展现,而是写入其他数据库

集算器协助java处理多样性数据源之JSON

Java的json开源包一般只能解析json数据,没有运算功能.程序员自己写通用的程序来实现分组.排序.过滤.连接这些计算,相当麻烦.例如:用java写json文件条件过滤程序时,当条件表达式发生变化时就需要改写代码.如果要实现象SQL那样灵活的条件过滤,则需要自己实现动态表达式解析和求值,编程工作量非常大. 集算器是支持动态表达式的,可以嵌入到Java中写出通用的json计算程序.下面我们通过例子来看一下具体作法.待处理字符串是json格式的员工信息,包含EID.NAME.SURNAME.GE

集算器JDBC的集成与使用方法

集算器JDBC 类似一个不完整的数据库JDBC驱动,它不带物理表,可将集算器视为只有存储过程的数据库(较强的计算能力,较弱的存储机制).与使用数据库JDBC非常类似,可以像调用存储过程一样调用集算器程序.不同的是,集算器JDBC是个完全嵌入式计算引擎,所有运算都在这个嵌入包中完成,而不象数据库那样还有一个独立的服务器来实施计算. 1.加载驱动jar 集算器JDBC所需jar包括:dm.jar.poi-3.7-20101029.jar.log4j_128.jar.icu4j_3_4_5.jar.d

集算器访问数据库的配置

集算器支持包括数据库在内的多种异构数据源.这里,我们通过例子来看一下集算器访问数据库的方法. 集算器可以连接数据库的jdbc驱动,也可以通过jdbc-odbc桥连接数据库.由于版权的原因,使用集算器的程序员需要自行准备数据库的jdbc或者odbc驱动.Jdbc驱动jar包准备好之后,需要放入集算器IDE安装目录的/common/jdbc中,例如:C:\Program Files (x86)\MicroInsight\common\jdbc目录中. 集算器集成开发环境的ODBC配置界面如下: 集算

集算器管理数据库事务的代码示例

集算器可以向数据库写入数据,支持数据库事务管理.这里通过例子来看一下控制事务提交和回滚等等的编程方法. 1.自动提交事务 集算器可以方便的实现增删改,最简单的写法如下: 上图中的A2到A4分别实现了插入.修改和删除.每条sql执行之后自动提交.需要说明的是: 1.3条语句提交了3次,对数据库操作比较频繁. 2.三条sql没有事务关系,后续的sql如果执行失败,并不影响前面的sql. 下面介绍结合序表批量提交事务,以及多条sql组成一个事务的编程例子.     2.批量提交事务 从students

集算器协助Java处理结构化文本之条件过滤

直接用Java实现文本文件中数据按条件过滤会有如下的麻烦: 1.文件不是数据库,不能用SQL访问.当过滤条件变化时需要改写代码.如果要实现象SQL那样灵活的条件过滤,则需要自己实现动态表达式解析和求值,编程工作量非常大. 2.文件太大时不能一次性装入内存处理,而采用逐步读入方式在考虑到性能时又会涉及到文件缓冲区管理.拆行计算等复杂编程. 使用集算器来辅助Java编程,这些问题都不需要自己写代码解决.下面我们通过例子来看一下具体作法. 文本文件employee.txt中保存了员工数据.我们要读取员

集算器与BIRT的集成过程

集算器提供了标准JDBC与报表工具集成,可以方便地与BIRT集成web端部署过程.下面就开发环境和WEB应用环境分别说明集成过程. 1. 开发环境下集成 1.1.创建配置文件 创建集算器JDBC必须的两个配置文件config.xml和dfxConfig.xml. 1.1.1. config.xml <?xml version="1.0"encoding="UTF-8"?> <Config Version="1"> <

集算器如何优化SQL计算(3)序运算

跨行引用 早期SQL不直接支持跨行引用,要生成序号后再JOIN,极其繁琐困难.引入窗口函数后的SQL能够较方便地引用其它行数据,但写法仍不简洁,有多个跨行引用项时代码会很长.而且如前所述,窗口函数在其它运算结果集基础上再实施,对窗口函数计算值的再引用就要写成子查询的形式,仍然繁琐. MySQL不支持窗口函数,但支持在SQL中使用变量,可以引用到前面的行,但无法引用到后面的行. 集算器提供了方便自然的跨行引用语法. 各产品月销售表结构为:产品.月份.销量:现要找出销量比上月多10%的记录. A 1