sybn sybn-util 项目说明文档 - 基于java的跨数据库联合查询

dynamicSourceQuery 向临时数据源发起链接

2022-11-23
sybn

某些场景下,需要临时连接到,未提前定义的或者随时变更的数据库。

在 mysql 中可以创建远程表 (federated engine) 来实现.

本工具提供了类似的实现方案, 无需建虚拟表可直接链接临时数据源.

语法

  • SQL
dynamicSourceQuery(select * from xxx) on url='jdbc:sqlite:/usr/local/junit/data/sqlite_3.db'
  • 语法

dynamicSourceQuery(要执行的sql) on url=’jdbc:xxx://127.0.0.1’ and user=’xxx’ and password=’xxx’ and driver=’xxx’

  • 参数 V:0.3.25
参数 必填 默认值 举例 说明
source_type jdbc jdbc, sysql, http 如果为jdbc则直接查询不使用连接池
url 1 jdbc:sqlite:sqlite.db 数据源jdbc链接
user - root 数据库账户
password - root 数据库账户
driver 根据url自适应 com.mysql.jdbc.Driver 数据库驱动
retry 1 3 查询失败时自动重试的次数
  • 注意
  1. 默认不开启 sysql 的语法验证和语法修正, 要执行的 sql 会直接发给数据源执行.
  2. 与 mysql 的 federated 功能一样, 出于安全考虑 dynamicSourceQuery 功能默认不启用, 需要在程序中手动注册此命令才能启用.
  3. 默认不启用连接池, 因此请注意目标服务器连接数限制.
  • 关于超时

可以使用 jdbc 的超时参数

jdbc:mysql://127.0.0.1/test?connectTimeout=2000&socketTimeout=30000

http 查询样例

-- 将百度IP归属地接口当初虚拟表做查询
dynamicSourceQuery(select 'baidu' s, `$.data.OriginQuery` ip, `$.data.location` addr from list) 
on source_type='http' and url='https://opendata.baidu.com/api.php?query=36.110.32.12&co=&resource_id=6006&oe=utf8'

http返回值:

{"status":"0","t":"","set_cache_time":"","data":[{"ExtendedLocation":"","OriginQuery":"36.110.32.12","appinfo":"","disp_type":0,"fetchkey":"36.110.32.12","location":"北京市北京市 电信","origip":"36.110.32.12","origipquery":"36.110.32.12","resourceid":"6006","role_id":0,"shareImage":1,"showLikeShare":1,"showlamp":"1","titlecont":"IP地址查询","tplt":"ip"}]}

sql返回值:

s ip addr
baidu 36.110.32.12 北京市北京市 电信

Similar Posts

Comments

暂不开放评论! 可微信联系