BI前端实践 13:语义层把多库联合起来做多维分析

实践目标

大数据时,可能被分割开存入多个数据库中以分摊计算量,这些数据库可能因为设计作用不同(比如是当期库和历史数)而导致其数据结构不一定完全相同。用元数据可以把它们统一映射成一个逻辑表,DQL Server将实时向各个分库发出SQL执行,取得结果数据再联合起来,给前端多维分析提供数据。

多版本迭代的项目数据

一个长期运营的项目,数据结构会存在迭代现象。比如不再发生变动的历史数据用另外的数据库存储;又或者数据结构随业务发生了变动或更换了数据库,用新结构的数据库存储以后的数据。

新版本数据结构的命名规则也可能变化,字段含义相同,但字段名不同。

尽管不同版本存在着异名、异库的情况,但多个版本的数据仍然是一个整体,做多维分析时。要么通过ETL预先的把数据整理到一起;要么通过程序动态的汇总数据;基于DQL语义层的多库多维分析,采用后一种方案。

下面是测试数据,来自历史库historyDb的ordershistory表/来自当前运营库orders的orders表,它们的订单数据范围不同,字段命名也不同:

用元数据规范多库不同版本的表

一个元数据文件描述一个实体数据库,下面用orders.lmd描述orders库,用ordersHis.lmd描述historyDb库,订单表在两个库中的表名(orders/ordershistory)、字段名(如orderId/order_id)不相同,但在两个元数据中都规范成了相同的名称,比如订单ID(orderId/order_id)。

多库表元数据组合成一个DQL服务

在DQL Server中,可以把上面两个元数据(多个同结构的元数据也行)部署成一个DQL服务。在{润乾报表根目录}/report/services/server.xml中通过设置mdb=”true”表明这是一个多库服务,raqsoftConfig是运行环境配置文件:

raqsoftConfig.xml配置文件中配置两个实体数据库的JDBC连接ordersHisJDBC、ordersJDBC(这里用的两个示例库都是mysql的,根据润乾官网文档的说明,把其中一个换成oracle也能支持):

然后配置这个多库DQL服务的配置文件{润乾报表根目录}/report/services/orders/service.xml,在MAP节点下配置每个实体数据库及其元数据文件,ordersJDBC连接的orders库对应orders.lmd,ordersHisJDBC连接的historyDb库对应ordersHis.lmd(元数据文件都在……/conf/目录下);

这样多库DQL服务就配置好了,保存配置后重启,这个多库DQL服务orders就可以用于多维分析了,而前端的多维分析不需知道orders服务是不是多库的。

基于多库表DQL服务做多维分析

多维分析中的订单表的数据,已经是两个库的合集了:

做分组汇总,也是两个库的合集数据(每个库表11个订单,一共22个):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值