SQuirreL SQL Client使用入门2---插件使用2


五、多数据源虚拟化管理插件  文档:plugins\multisource\doc\ 

Overview

    The multiple source query plugin allows SQuirreL users to create a virtual data source that may consist of multiple data sources on different servers and platforms. The user can enter one SQL query to combine and join information from multiple sources. Any database that has a JDBC driver is supported including NoSQL databases such as MongoDB.


Benefits
    -  The plugin allows SQuirreL to natively support multiple source queries.
    - No data source or server changes are required.     ---对现有数据库无任何影响
    - The plugin supports standard SQL including joins, group by, aggregation, LIMIT, and ordering where tables may come from one or more sources.     ---支持对异构数据库进行join ,group by等操作
    - The plugin will perform function translation when a user requests a function or SQL feature/syntax that is not supported by a certain source.     ---支持函数解析/转化,即使目标数据库不支持该函数。
    -  Users can export the virtualization information and use the virtualization driver in other Java programs and reporting software.


这个插件涉及的内容比较多,查看plugin下的文档,会比我解释的清楚点。
在此,看下两个最突出的特点:

1、异构数据库间联合查询

技术分享

上图中, SQL Query joining tables in MySQLMicrosoft SQL ServerOracle,PostgreSQL, and MongoDB


2、函数转化

The plugin uses features of the UnityJDBC driver to perform virtualization and translate functions that are not implemented by certain sources. For example, MSSQL does not support TRIM(), but you can do the same result using RTRIM(LTRIM()). Unity will automatically translate a TRIM() function specified in a MSSQL query to the correct syntax supported by the database.

Example TRIM() Translation for MSSQL

技术分享


    This translation is supported for common databases and can be freely extended by user-defined functions and translations for each database dialect.

    EXPLAIN can be used to understand how a SQL query is translated to queries on individual sources.


第二个例子:

我们都知道,每个数据库的分页操作各有不同。

mysql-->limit

oracle--> rownum

MSSQL-->top


但是,使用了这个插件,分页操作都是  limit  了,也就是统一了部分数据库方言。

SELECT *  FROM oracle.BASE_USER  limit  10;
***一定是在multisource下,这个语句才能执行。


3、注意事项
①、Make sure to add other database JDBC jars into the   squirrel/lib   folder or JRE classpath
②、oracle操作注意事项:
1、需要进行方案过滤,否则会加载全部的schema(启动速度很慢)
    配置别名属性:在别名(alias)导航中,右键单击已配置的别名
    技术分享

    1、刷新方案列表,这样就能获取oracle全部的schema
    2、设置所有对象不加载,这样才能配置 只加载schema aiddgl 中的表
    3、在添加到virtual manager中时, 一定得指定schema并且对业务表进行过滤。

    技术分享
    
    如果需要排除的的table太多,并且加载的分类也不是一个%号能匹配完的,可以多加载几个virtual source,连接点都是同一个Alias。

    ③、virtual manager加载数据的方式和双击alias加载数据有区别,在virtual manager加载,会只加载db url配置的目标数据库。

    ④、truncate函数不能使用,在独立连接中就可以。
    ⑤、virtual db命名时不要用 "-",会导致sql出错。可以使用"_"代替

实际操作---异构数据迁移( insert into select  ) 
INSERT into xxTest.base_user select * from oracle_dev.BASE_USER a where a.USER_ID=‘admin‘;
select * from xxTest.base_user;
select * from oracle_dev.BASE_USER;

4、存在的问题
1、 multisource无法感知virtual db的结构变化 ,如果新增了一个列,select会发现没有变化,猜测对元数据做了缓存?
删除虚拟节点,重新加载即可。

2、如何支持批量提交和事务处理---主要是为了导入的性能

3、空值转换问题
Error: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: ‘oracle.sql.TIMESTAMP@6faeeb10‘ for column ‘MODIFY_DATE‘ at row 1 
SQLState: null 
ErrorCode: 0
从oracle的 (timestamp)null 到 mysql的  (datetime)null 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。