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个):
对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅
嗯,还不太了解好多乾?