聚合查询案例合集资料-快捷链接
聚合查询主要有两个模块组成,一个是Java服务作为接入层;另外一个是LightDB数据库作为引擎层。
聚合查询支持SQL语句中直接调用HTTP服务来获取JSON数据集。
安装HTTP插件,ssh连接在LightDB部署服务器并切换到LightDB部署用户中。
su - lightdb
这里lightdb是笔者部署LightDB的Linux用户名。使用ltsql postgres
命令进入LightDB SQL客户端。进入控制台后,执行如下命令来完成http插件安装:
create extension http;
结果输出CREATE EXTENSION表示创建成功。控制台中验证命令如下:
select status from http_get('http://www.light-pg.com/');;
结果不是提示ERROR: function http_get(unknown) does not exist则表示可以正常使用http插件。
想要在Mybatis的SQL文件中使用简写语法${http.服务别名}
来远程调用以及自动展开远程调用json结果集为二维表,需要配置服务信息。服务配置表如下:
配置表es_http_service
.
-
#
表示从根层抽取数据jsonObject
或者 jsonArray
;如果数据是[]则是 jsonArray
否则就是 jsonObject
配置表es_http_extract
text
integer
bigint
numeric
boolean
date
time
timestamp
jsonb
用户可以使用LightDB客户端ltsql、dbeaver等工具连接上LightDB后,使用insert SQL语句进行配置插入。
dbeaver下载连接见http://www.light-pg.com/downloadCate.html
mybatis mapper.xml文件中SQL简写示例如下:
上述示例中,将调用配置的别名为getExpressInfo的服务并返回json结果。
上述示例中,将调用配置的别名为getExpressInfo的服务并返回json结果,结果展开为二维表后为表取别名expressInfo,可作用于select子句中的字段或者where子句中的字段。
聚合查询支持SQL语句中直接调用JRES T3服务来获取JSON数据集。
安装T3插件,ssh连接在LightDB部署服务器并切换到LightDB部署用户中。
su - lightdb
这里lightdb是笔者部署LightDB的Linux用户名。
使用ltsql postgres
命令进入LightDB SQL客户端。进入控制台后,执行如下命令来完成http插件安装:
create extension t3sdk;
结果输出CREATE EXTENSION表示创建成功。控制台中验证命令如下:
select * from t3sdk_send('127.0.0.1:18081', '', '', '', 'getOrder', '{}');
结果不是提示ERROR: function t3sdk_send(unknown, unknown, unknown, unknown, unknown, unknown) does not exist ,则表示可以正常使用t3插件。
想要在Mybatis的SQL文件中使用简写语法${t3.服务别名.功能号}
来远程调用以及自动展开远程调用json结果集为二维表,需要配置服务信息。服务配置表如下:
配置表es_t3_service
.
-
.
-
com.hundsun.demo.order.api.OrderService
#
表示从根层抽取数据jsonObject
或者 jsonArray
;如果数据是[]则是 jsonArray
否则就是 jsonObject
配置表es_t3_extract
text
integer
bigint
numeric
boolean
date
time
timestamp
jsonb
用户可以使用LightDB客户端ltsql、dbeaver等工具连接上LightDB后,使用insert SQL语句进行配置插入。dbeaver下载连接见http://www.light-pg.com/downloadCate.html
mybatis mapper.xml文件中SQL简写示例如下:
上述示例中,将调用配置的别名为getExpressInfo的服务并返回json结果。
上述示例中,将调用配置的别名为orderApp、功能号别名为getOrder的服务并返回json结果,结果展开为二维表后为表取别名orderInfo,可作用于select子句中的字段或者where子句中的字段。
通过LightDB FDW技术,可以像访问本地表一样访问外部表。
oracle_fdw支持像访问本地表一样访问Oracle中的表。
安装Oracle插件,示例如下:
前置条件,需要确保LightDB数据库用户具备Oracle客户端的访问执行权限。下载安装好Oracle客户端后需要配置环境变量,示例如下:
export ORACLE_HOME=/home/lightdb/instantclient_19_10
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export TNS_ADMIN=/home/lightdb/instantclient_19_10
export NLS_LANG=american_america.utf-8
上述路径为笔者的环境路径,使用者需要根据自身环境情况使用自身的路径。
注意: 需确保环境变量生效后启动LightDB,如果已经启动LightDB,可以尝试重启。
安装Oracle FDW插件,语句如下:
create extension oracle_fdw;
配置Oracle,示例如下:
create server oradb foreign data wrapper oracle_fdw options (dbserver '//<地址>:<端口>/');
create user mapping for server oradb options (user '', password '');
GRANT USAGE ON FOREIGN DATA WRAPPER oracle_fdw TO CURRENT_USER;
GRANT USAGE ON FOREIGN SERVER oradb TO CURRENT_USER;
创建外部表,示例如下:
CREATE foreign table express_info (
express_id VARCHAR(64),
order_id VARCHAR(64) ,
express_no VARCHAR(64),
company VARCHAR(64) ,
create_datetime VARCHAR(14),
status VARCHAR(1)
) server oradb OPTIONS (schema '', table '' );
注意:上述示例中schema指定的名字和table指定的名字在ORACLE一般为大写。到这里,可以像访问本地表一样访问Oracle表了。
mysql_fdw支持像访问本地表一样访问mysql中的表。
安装mysql插件,示例如下:
前置条件,需要确保LightDB数据库用户具备MySQL客户端的访问执行权限。下载安装好MySQL客户端后需要配置环境变量,示例如下:
export MYSQL_HOME=/home/root/mysql/mysql
export LD_LIBRARY_PATH=$MYSQL_HOME/lib:$LD_LIBRARY_PATH
上述路径为笔者的环境路径,使用者需要根据自身环境情况使用自身的路径。
注意: 需确保环境变量生效后启动LightDB,如果已经启动LightDB,可以尝试重启。
安装MySQL FDW插件,语句如下:
create extension mysql_fdw;
配置MySQL,示例如下:
create server mysqldb foreign data wrapper mysql_fdw options (host '<地址>', port '<端口>');
create user mapping for server mysqldb options (username '', password '');
GRANT USAGE ON FOREIGN DATA WRAPPER mysql_fdw TO CURRENT_USER;
GRANT USAGE ON FOREIGN SERVER mysqldb TO CURRENT_USER;
创建外部表,示例如下:
CREATE foreign table express_info (
express_id VARCHAR(64),
order_id VARCHAR(64) ,
express_no VARCHAR(64),
company VARCHAR(64) ,
create_datetime VARCHAR(14),
status VARCHAR(1)
) server mysqldb OPTIONS (dbname 'easysearch', table_name 'EXPRESS_INFO' );
到这里,可以像访问本地表一样访问Oracle表了。
easy-search有三类API暴露,自省HTTP服务,JRES T3服务以及IAR网关的HTTP服务。下面的
均取值于MyBatis mapper文件的StatementId短名字。举个例子:
上面的SQL代码片断代表聚合服务getExpressInfo。
easy-search启动后自身会暴露一组HTTP接口服务用于聚合查询,规则如下:
http://ip:port/gateway/easysearch/
ip为easy-search所在服务地址。port为了easy-search配置文件中server.port
指定的端口。
easy-search启动后自身会暴露一组JRES T3接口服务用于聚合查询,规则如下:
接口名规则:mybatis mapper xml文件中的namespace的值
如上interfaceName是com.hundsun.easysearch.TestMapper
功能号规则:com.hundsun.easysearch.gateway.
easy-search启动后自身会暴露一组IAR HTPP接口服务用于聚合查询,规则如下:
http://ip:port/<分组>/<服务名>/<版本号>/
分组是app.group指定的值,默认为g;服务名是app.name指定的值,默认是easy-search;版本号是app.version指定的值,默认是v
链接:lightdb聚合查询