Script查询

<< Click to Display Table of Contents >>

当前位置:  脚本 

Script查询

Previous pageReturn to chapter overviewNext page

Script 查询提供脚本语言和数据接口的方式,实现 SQL 查询所提供的功能。但这种方式比较于 SQL 查询本身设计上的局限,又能使查询操作更加灵活自由,为专业人士提供了便利。通过在工具库里提供了一些常用 JavaScript 函数接口, Script 查询支持客户通过编程的方式进行查询。虽然这些接口被限制在设定功能范围内,但是已经能够满足现有日常的工作。

此外 Script 查询提供了 SQL 查询不支持的联合查询功能。其类似于 SQL 中的联合查询,根据客户需求,将来自不同数据表单上的数据,通过脚本 JOIN 查询方法展现在一张表单上。但 Script 查询提供了比 SQL 的联合查询提供了更为强大的功能。 SQL 联合查询的前提是所有的数据表单都来自于同一个数据库,而 Script 查询可以连接不同数据库的数据表单,例如某个公司的经营数据保存在 DB2,而其管理数据保存在 ORACLE,客户通过 Script 查询可以把他们联合在一起并组成一张新的查询表用来分析,实现了不同数据源之间的合并。

用户可以建立一个脚本查询,以便把不同数据源的数据混搭到一张查询表上。例如一个是 access 数据库的 Sql 表,一个 embed 类型的查询表,先把数据执行出来,再 Join 到一起,形成新表。

 

编辑界面

先启动编辑 Script 查询的界面,(如何启动,请参考永洪连接数据手册)。在打开的界面中,用户可编写脚本语句,来实现多表的连接。

script1

界面中有三块区域,最上面是提供工具函数的树状结构,中间是一个供输入脚本的编辑区域;最下面是一个信息校验反馈栏。点击树节点时,会自动将点中节点的文本内容插入到脚本编辑区域 , 而且是光标所在的位置。当前编辑区域的内容会在每隔一段时间被自动校验,校验的结果显示在反馈栏里。

此编辑区间的目的是需要返回一个查询结果。中间可以有其他运行结果,但最后必须返回是一个查询结果。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); // 做左联接,此结果是最终结果,返回新查询结果。