1. 背景说明
存在数据库包含很多分区表,如客户主副表有上百万的表,在数据源管理的时候,加载卡顿或者失败(后端获取大概7s,前端渲染50多s,有些还加载不出来),导致用户无法自助分析库中的数据.实际上客户需要分析的主表数量只有其中的少部分,提供该接口给到定制,进行个性化过滤需要添加的表对象.
2. 接口设计
- BaseDataSourceDialect新增处理表、视图、存储过程过滤方法filterTables,可以方便扩展.
方法说明:
获取表、视图、存储过程过滤处理 。true 过滤通过,正常添加;否则不加入到业务库管理中处理
参数及说明
名称 | 说明 | 数据类型 | 备注 |
ds | 业务库对象 | DataSource | |
catalog | 数据库获取表的当前catalog | String | 数据库默认值 |
数据库catalog | 数据库获取表的当前schema | String | |
tableName | 表等对象名 | String | 通过驱动rs.getString("TABLE_NAME")获取 |
Type | 待判断对象类型 | String | TABLE 表 VIEW 视图 PROC 存储过程 |
- 新增BaseDataSourceDialect的getTableFieldsBatch方法,可以方便扩展当一次性添加业务库的表超过100 ,是否开启批量获取获取表字段
参数:
名称 | 说明 | 数据类型 | 备注 |
ds | 业务库对象 | DataSource |
说明:返回true,一次性添加业务库的表超过100时开启批量获取获取表字段
- smartbi/freequery/basicdata/IDataSourceDialectListener.java
监听器接口类添加支持上面的处理方法
- smartbi/oltp/FreeQueryModule.java设置和获取定制监听
3. 定制开发流程及参考样例
- 需要定制扩展包添加业务库继承IDataSourceDialectListener的监听器接口实现类listener,处理业务逻辑
a. 实现方法filterTables进行处理表、视图、存储过程过滤;符合添加的对象返回true;不符合返回false;
b. 实现方法getTableFieldsBatch,对需要开启表对象过滤的业务库类型,需要返回false;即不开启批量获取表字段
参考样例(类\方法名有出入,参照上面接口说明定义即可):
- 定制扩展包中新建IModule实体类,并在activate方法注册上面实现类的监听器:
FreeQueryModule.getInstance().addDataSourceDialectListener(IDataSourceDialectListener)
参考样例(类\方法名有出入,参照上面接口说明定义即可):
- 配置实体类,项目启动就自动加载执行
参考样例(类\方法名有出入,参照上面接口说明定义即可):