集算器实现外键功能的代码示例

如果字段或字段组合k是表M的主键,而k也同时存在于表B,则k就是B的外键。外键维系着表之间的关联关系,是结构化数据计算最重要的概念之一。集算器可以通过对象引用方便地实现外键功能,下面用几个例子来说明:

   例1 关联主子表1

   订单表(order)是子表,员工表(emp)是主表,请将emp关联到order中,显示emp中的Name、Gender、Salary字段以及order中的OrderID,Amount字段。

说明:本例只用到emp和order,之后的例子还要用到部门表(dep),三者外键关系如下。

数据可以来自于数据库或文本,比如:

order=esProc.query("selectOrderID,SellerId,Amount,OrderDate from sales")

emp=esProc.query("selectEId,Name,Gender,Birthday,Dept,Salary from emp")

dep=esProc.query("select* from department")

集算器代码

A3=order.switch(SellerId, emp:EId)

A4=order.new(OrderID,Amount,SellerId.Name,SellerId.Gender,SellerId.Salary)

计算结果

代码解读

A3:将order中的SellerID替换成emp中对应的记录,建立两者的外键关系。

A4:取order中的OrderID、Amount字段,通过关联引用取emp中的Name、Gender、Salary字段。可以看到,用对象引用可以从order直接访问emp中的字段,省去了复杂难懂的join语句。

2按照主表条件查询子表

找出薪水大于10000的女性销售签下的订单。

集算器代码:

A3=order.switch(SellerId, emp:EId)         /同上一个例子

A5=order.select(SellerId.Salary>10000&& SellerId.Gender=="F")

计算结果

点击上述蓝色超链接,可以看到对应的员工信息为:

3:按照主表分组

计算各部门的销售额。

集算器代码:

A3=order.switch(SellerId, emp:EId)         /同上一个例子

A5=order.groups(SellerId.Dept;sum(Amount))

计算结果:

可以给字段改名,比如order.groups(SellerId.Dept:dt;sum(Amount):amt),改名后的效果如下:

4:较复杂的多表关联

对于销售额超50000的部门,请找出其部门经理的名字。

集算器代码:

A3=order.switch(SellerId,emp:EId)

A4=dep.switch(Manager,emp:EId)

A5=emp.switch(Dept,dep:DeptNo)

A6=order.groups(SellerId.Dept:dt;sum(Amount):amt)

A7=A6.select(amt<=50000).(dt).(Manager).(Name)

计算结果:

代码解读:

A3,A4,A5:建立完整的外键关系。

A6: 计算各部门的销售额(见上一例子)。即:

A7:使用对象引用直观求解。表达式A6.select(amt<=50000).(dt).(Manager).(Name)可以根据句号分解为四步,即:

1、从A6中找出销售额超50000的记录。

2、取得dt字段对应的记录(在dep表中)。

3、取得Manager字段对应的记录(在emp表中)。

4、取得Name字段。

具体如下:

A6.select(amt<=50000) 

.(dt)                                      

.(Manager)                      

.(Name)                       

集算器实现外键功能的代码示例

时间: 2024-08-28 06:12:06

集算器实现外键功能的代码示例的相关文章

报表工具的二次革命之集算器的作用

之前的文章已经大致给大家介绍过大数据计算引擎-润乾集算器了.想必很多人心里还是存在疑惑,集算器作为大数据分析系统,到底它能做些什么?这篇文章,就为大家详细介绍. 降低报表开发难度 降低开发难度从而提高开发效率是集算器的设计初衷,是最容易理解的作用,前面已有粗略介绍. 这方面的细节内容太多,我们会再做一个专门话题详细讲述集算器如何解决报表开发中的各种具体难题以及与常规手段的对比.在这里只做总结性地阐述. 比Java和SQL更易写 如前所述,集算器的设计目标是为了解决报表的数据准备,而目前这个工作一

集算器协助java处理结构化文本之数据读入

JAVA只提供了指定分割符等最基本的数据读入功能,而其他常见功能都需要自己从底层去实现,比如:按列名读入指定列.指定列的次序.指定数据类型.无分割符等等.JAVA实现这类功能虽然不难,但代码很繁琐,很容易出错. 使用集算器来辅助Java编程,这些问题都不需要自己写代码解决.下面我们通过例子来看一下具体作法. 文本文件data.txt是tab分割的文本文件,有30个列,第一行是具有业务意义的列名,现在需要按列名读入这几列:ID.x1Shift.x2Shift.radio,并按业务公式“((x1Sh

集算器如何优化复杂报表计算(2)格式布局及过程计算

布局格式 横向分栏 大多数报表工具都支持纵向分栏,但几乎没有报表工具支持横向分栏,我们可以用集算器把数据集事先摆好. A B C 1 =db.query("select a,b,c from T ") 2 =A1.step(3,1) =A1.step(3,2)|[null] =A1.step(3,3)|[null] 3 =A2.derive(B2(#).a:a2,B2(#).b:b2,B2(#).c:c2,C2(#).a:a3,C2(#).b:b3,C2(#).c:c3) 这段代码将3

集算器调用数据库存储过程的代码示例

集算器可以方便的调用数据库的存储过程,这里通过例子来看一下具体的程序写法. 调用无返回值的存储过程 用oracle的存储过程为例,存储过程只有一个输入参数,没有输出参数: create orreplace procedure pro1 (pid IN VARCHAR) as begin insert into emp values(pid,'mike'); update emp set name='rose' where id=pid; commit; end; 在集算器中可以使用execute

集算器(仓库版)发布,黑科技获得用户好评

2018年5月16日,集算器(仓库版)携带多项黑科技正式发布. 在发布之前的应用验证中,仓库版就已经用实力赢得了用户的好评.北京银行用户在评价仓库版时表示:在数据分析实践中,高并发访问.大数据量计算造成的系统响应时间过长的问题,始终没有得到很好的解决.集算器(仓库版)的出现,彻底解决了这个难题!用集算器将高频次热点数据前置,构建数据计算中间层,可以说是最佳解决方案,在很多场景下要优于价值百万的数据库产品! 实际的测试也证明,集算器(仓库版)确实表现优异!以性能指标为例,测试目标是高频热点数据,单

集算器实现报表中零散的不规则计算

报表中存在的不规则计算往往给报表开发带来很大的困难,使用报表工具往往很难甚至无法直接实现.这里的不规则计算是指报表中存在特殊条件的统计项(计算),如:销售订单金额统计中计算前5名销售金额的合计和占比:学生成绩统计中总成绩排名前10的学生中语数外都超过90分的人数:用户充值统计中充值金额超过充值总额一半的用户数量等. 通过集算器可以很方便完成这类报表的开发,我们通过两个例子来了解一下具体的做法. 1.实例一 1.1 .报表描述 根据员工与订单表统计各销售人员的销售情况,并在报表中计算列出订单总额.

集算器如何处理类文本数据计算

json Java有足够多的类库用于解析和生成json,但缺乏后续计算能力.集算器支持多层结构数据,可以不丧失信息地将json解析成可计算的内存数据表进一步处理. 设有如下格式的json数据: { “order”:[ { “client”:”北京润乾软件”, “date”:”2015-6-23”, “item” : [ { “product”:”HP笔记本”, “number”:4, “price”:3200 }, { “product”:”DELL服务器”, “number”:1, “pric

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

MongoDB不支持join,其官网上推荐的unity jdbc可以把数据取出来进行二次计算实现join运算,但这些join.group.函数.表达式等高级功能都是收费版才有,而且即使是收费版本,对子查询.窗口函数等复杂SQL运算仍不支持.其他免费的jdbc drive就只能支持最基本的SQL语句了. 用免费的esProc配合MongoDB,可以实现上述结构化(半结构化)复杂计算.这里以join为例说明一下具体作法. MongoDB中的文档orders保存了订单数据,employee保存了员工数

集算器是什么?

集算器是一种程序设计语言,专注于(半)结构化数据计算与处理,提供了丰富的此类运算的类库.集算器不是面向对象的程序设计语言,没有复杂的继承和重载概念,引入对象概念仅仅是为了更方便地描述与对象相关的方法,有BASIC这类初级程序设计水平的程序员都能很快掌握.集算器是基于Java解释执行的动态语言,可以在运行过程中拼出代码执行,这样可以获得更大的灵活性,进一步降低程序设计的复杂度. 集算器定位为(半)结构化数据处理,没有直接提供统计分析.数据挖掘和机器学习等算法,也不擅长处理媒体和地图类数据. 与Ja