当需要查询的数据来自多个不同的物理库,并且数据库中的表结构也不同时,这种查询我们称为异构数据库混合查询。
下面就来介绍一下如何将两个物理库中的回款单数据做混合查询。具体步骤如下:
Mysql数据库记录的华北地区的回款单表结构:
HSQL数据库记录的华南地区的回款单表结构:
第一步,分别创建使用Mysql和HSQL数据源的元数据文件,需保证元数据中做混合查询的表结构一致
Mysql对应的元数据文件mysqldemo.lmd内容:
Hsql对应的元数据文件hsqldemo.lmd内容:
第二步,在raqsoftConfig.xml中添加Mysql和Hsql的物理数据源
<DB name="mysqldb">
<property name="url" value="jdbc:mysql://192.168.0.123:3306/dqlDB?useCursorFetch=true" />
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="type" value="10" />
<property name="user" value="root" />
<property name="password" value="root"/>
… …
</DB>
<DB name="hsqldb">
<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/dqldemo" />
<property name="driver" value="org.hsqldb.jdbcDriver" />
<property name="type" value="13" />
<property name="user" value="sa" />
<property name="password" />
… …
</DB>
第三步,部署启动DQL Server服务
(1) 将mysqldemo.lmd和hsqldemo.lmd文件放至[DQL Server服务目录]/conf下
(2) 在[DQL Server服务目录]下的service.xml中添加<MAP/>标签
<!-- DQL Server服务使用多物理库时的文件结构配置,ENTRY中未配置元数据层文件时则会采用SERVICE标签中的同名属性值。
dbName:为raqsoftConfig.xml中的物理数据源名称
dictionary: DQL Server服务的元数据层字典文件(.dtc),不是必填项,可选
logicmetadata: DQL Server服务的元数据文件(.lmd) ,不是必填项,可选
<MAP>
<ENTRY dbName="mysqldb" logicmetadata="mysqldemo.lmd" />
<ENTRY dbName="hsqldb" logicmetadata="hsqldemo.lmd"/>
</MAP>
(3) 在server.xml中添加raqsoftConfig和mdb属性
<!--raqsoftConfig: 报表配置文件raqsoftConfig.xml路径,此属性仅在使用多个物理库时有效 -->
<SERVER host="127.0.0.1" port="3366" timeout="30000" log="true" license="" raqsoftConfig="web/webapps/demo/WEB-INF/raqsoftConfig.xml" >
<!-- SERVICE:要启动的DQL Server列表,可以配置多个,多个时则需要添加多条<service/>,每个<service/>的name属性所指定的服务都必须位于[应用根目录]\services下,services目录下可以有多个DQL Server服务目录,但只有下面列出的服务才会被启动 -->
<!-- name: DQL Server的名称,且名称必须与文件夹名称一致 -->
<!-- mdb:是否使用多个物理库,缺省为false。为true时表示使用多个物理库-->
<SERVICE name="datalogics" mdb="true"/>
</SERVER>
(4) 启动DQL Server
第四步,在raqsoftConfig.xml中添加DQL Server服务类型数据源
<DB name="DataLogics">
<property name="url" value="jdbc:datalogic://127.0.0.1:3366/datalogics" />
<property name="driver" value="com.datalogic.jdbc.LogicDriver" />
<property name="type" value="16" />
<property name="user" value="root" />
<property name="password" value="root" />
<property name="batchSize" value="1000" />
<property name="autoConnect" value="false" />
<property name="useSchema" value="false" />
<property name="addTilde" value="false" />
<property name="dbCharset" value="GBK" />
<property name="clientCharset" value="GBK" />
<property name="needTransContent" value="false" />
<property name="needTransSentence" value="false" />
<property name="caseSentence" value="false" />
</DB>
第五步,启动Tomcat,访问DQL明细查询页面,进行混合查询
Hsql数据库回款单表记录:
Mysql数据库回款单表记录:
查询控件中选择使用多物理库的DQL Server服务,拖拽查询字段,做混合查询:
查询结果:
通过上图可以看出报表分析结果已经将来自异构数据库的数据做了混合查询。