<< Click to Display Table of Contents >> Script查询 |
![]() ![]() ![]() |
Script 查询提供脚本语言和数据接口的方式,实现 SQL 查询所提供的功能。但这种方式比较于 SQL 查询本身设计上的局限,又能使查询操作更加灵活自由,为专业人士提供了便利。通过在工具库里提供了一些常用 JavaScript 函数接口, Script 查询支持客户通过编程的方式进行查询。虽然这些接口被限制在设定功能范围内,但是已经能够满足现有日常的工作。
此外 Script 查询提供了 SQL 查询不支持的联合查询功能。其类似于 SQL 中的联合查询,根据客户需求,将来自不同数据表单上的数据,通过脚本 JOIN 查询方法展现在一张表单上。但 Script 查询提供了比 SQL 的联合查询提供了更为强大的功能。 SQL 联合查询的前提是所有的数据表单都来自于同一个数据库,而 Script 查询可以连接不同数据库的数据表单,例如某个公司的经营数据保存在 DB2,而其管理数据保存在 ORACLE,客户通过 Script 查询可以把他们联合在一起并组成一张新的查询表用来分析,实现了不同数据源之间的合并。
用户可以建立一个脚本查询,以便把不同数据源的数据混搭到一张查询表上。例如一个是 access 数据库的 Sql 表,一个 embed 类型的查询表,先把数据执行出来,再 Join 到一起,形成新表。
❖编辑界面
先启动编辑 Script 查询的界面,(如何启动,请参考永洪连接数据手册)。在打开的界面中,用户可编写脚本语句,来实现多表的连接。
界面中有三块区域,最上面是提供工具函数的树状结构,中间是一个供输入脚本的编辑区域;最下面是一个信息校验反馈栏。点击树节点时,会自动将点中节点的文本内容插入到脚本编辑区域 , 而且是光标所在的位置。当前编辑区域的内容会在每隔一段时间被自动校验,校验的结果显示在反馈栏里。
此编辑区间的目的是需要返回一个查询结果。中间可以有其他运行结果,但最后必须返回是一个查询结果。Script 查询的主要用途是把不同数据源的数据混搭到一张查询表上。那就需要把其他的查询先执行出来,再通过一些 Join 函数,把各表连接起来。
Script 查询可实现不同类型查询的链接,各查询的类型与对应标识显示如下图所示:
查询 |
对应标识 |
---|---|
SQL查询 |
SQL |
Excel 查询 |
EXCEL |
Script查询 |
SCRIPT |
Mongo查询 |
MONGO |
定制查询 |
CUSTOM |
数据集市查询 |
CLOUD |
内嵌数据查询 |
EMBED |
组合查询 |
COMPOSITE |
自服务数据查询 |
DATA_FLOW |
❖执行查询的函数
一个已经定义的查询,可以通过调用执行函数,返回查询的结果。
execute(Scriptable script, int type, String path, Object allCols)
• 参数:
script 是指运行此脚本的作用域,通常用 this,表示当前作用域。
type 是指查询的类型,支持的 9 种类型 :SQL, EXCEL, SCRIPT, CUSTOM, CLOUD, EMBED,COMPOSITE, MONGO, DATA_FLOW。
path 是指查询的路径及名称。如果有目录就用 '/' 连接起来。
allCols 是指当为 true 时,查询的表达式列可见,当为 false 时 , 查询的表达式列不可见。
• 返回:
一个查询的结果
• 举例:
execute(this, EMBED, "folder1/query1", true);
❖Join函数
将两个任意的查询执行后的查询结果,做联接,并返回新的查询结果。要求做映射的关键字段的数据类型要匹配。
join(Scriptable scope, int jhint, int jop, Object jleft, Object jright, Object jlkeys, Object jrkeys, Object jlcols, Object jrcols)
• 参数:
scope 是指运行此脚本的作用域,通常用 this,表示当前作用域。
jhint 是 join 的提示。 LEFT_MAIN 左表为主, RIGHT_MAIN 右表为主, FINAL_JOIN 是最终表,
TEMP_JOIN 是个临时表,会被回收的表。
jop 是连接操作符。 JOIN 是内连接; LEFT_JOIN 左连接; RIGHT_JOIN 右连接; FULL_JOIN全连接。
jleft 左表
jright 右表
jlkeys 左表的连接的字段
jrkeys 右表的连接的字段
jlcols 左表的留下哪些字段
jrcols 右表的留下哪些字段
• 返回:
一个查询的结果
• 举例:
join(this, FINAL_JOIN | LEFT_MAIN, LEFT_JOIN, query1, query2, [1], [3], [1,2], [3,1]);// 左表 query1 的第 1 列和右表 query2 的第 3 列连接,留下 query1 的 1 和 2 列, query2 的 3 和 1 列。
❖Union函数
将两个任意的查询执行后的查询结果进行合并,并返回新的查询结果。两个查询的字段个数是匹配的,而且数据类型也是匹配的。
union(Scriptable scope, Object ugrids)
• 参数:
script 是指运行此脚本的作用域,通常用 this,表示当前作用域。
ugrids 哪些表求交集。如果列不匹配会出错。此参数是个数组。
• 返回:
一个查询的结果
• 举例:
union(this, [a, b]);// 将 a 和 b 进行合并。
❖取列函数
将某些列的数据从一个查询结果里提取出来,并返回一个新的查询结果。
columns(Scriptable scope, Object cgrid, Object ccols)
• 参数:
script 是指运行此脚本的作用域,通常用 this,表示当前作用域。
cgrid 是指哪个查询结果被提取。
ccols 是指哪些列被提取。
• 返回:
一个查询的结果
• 举例:
columns(this, a, [3,1]);// 将 a 的第 3 列和第 1 列提取出现。
❖排序函数
将查询结果中的某些列做排序,并返回一个新的查询结果。
sort(Scriptable scope, Object sgrid, Object scols, Object sascs)
• 参数:
scope 是指运行此脚本的作用域,通常用 this,表示当前作用域。
sgrid 是指哪个查询结果被排序。
scols 哪些字段被排序。
sascs 各字段用什么排序类型:true( 升序 ), false (降序)。
• 返回:
一个查询的结果
• 举例:
sort(this, a, [3,1], [false, true]);// 先将 a 的第 3 列降序,再将 a 的第 1 列升序。
➢例如,希望把一个 sybase 数据库的查询结果和一个 excel 文件作为数据来源的查询结果做一个联接。假设这两个查询的关键字段的数据类型是匹配的。
var lt = execute(this, SQL, "sybase/customer"); // 左表
var rt = execute(this, SQL, "Excel_Coffee_chain"); // 右表
var lkeys = [0];// 左表的第 0 列做 join
var rkeys = [1];// 右表的第 1 列做 join
var lcols = [0, 1];// 左表保留第 0 和 1 列
var rcols = [0, 2];// 右表保留第 0 和 2 列
join(this, FINAL_JOIN, LEFT_JOIN, lt, rt, lkeys, rkeys, lcols, rcols); // 做左联接,此结果是最终结果,返回新查询结果。