MondrianSchema编写心得

匆匆过客 提交于 2019-12-13 18:52:40

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

 

MondrianSchema编写心得

1.  Mondrian是什么?

Mondrian是一个用Java成的OLAP引擎。它实现了MDX语言、XML解析、JOLAP规范。它从SQL和其它数据源读取数据并把数据聚集在内存缓存中,然后经过 Java API用多维的方式对结果进行展示。

2.  Mondrian组成与架构

Mondrian又四个manager组成,见下图:

l  Session Manager:最为重要的一个部分。接受MDX查询、解析MDX,返回结果。

l  Schema Manager:与初始化紧密相关。主要是一些重要的数据结构如缓存池的构建以及多维模型的生成。

l  Aggregate Manager:实现了对聚集表的管理。主要是对OLAP缓存的管理,属于性能优化的部分。

l  Dimension Manager:维度的管理。实现多维模型中维度和关系数据库表中列的映射,在Schema Manager也有部分功能处理这些映射。

从架构上可以分为四个层次:

l  计算层:分析,验证,执行MDX语句。先计算坐标轴,然后再计算每个单元格的值,从效率上的考虑,计算曾批量的从聚合层获取单元格数据集合。

l  聚合层:聚合层中缓存了多维查询结果,即单元格的数据集合,如果计算层所需要的数据不在缓存中,从存储层中进行查询获取数据并缓存。

l  存储层:一般使用关系数据库实现,一般采用星型结构,提供事实表,维度表和聚合表。

l  表现层:一般使用Saiku或者PentahoBI-server。

系统部署结构上,可以分三层结构分开部署,将表现层部署在一台机器上,计算层和聚合层部署在第二台,存储层部署在第三台。

3.  MondrianSchema版本

需要注意的是MondrianSchema3.0和4.0的版本区别,升级过后SchemaXML的写法发生了比较大的变化。支持Schema3.0的写法,且shema4.0必须加上metamodelVersion='4.0'属性。

l  Schema3.0支持的主要elements

立方体:<Cube>

维度:<Dimension>

层级:<Hierarchy>

级别:<Level>

度量:<Measure>

维表关联:<Join>

视图:<View>

虚拟立方体:<VirsualCube>

聚合表:<AggregateTbale>

计算成员:<CalculateMember>

l  Schema4.0支持的主要elements

立方体:<Cube>

物理模型:<PhysicalSchema>

关联:<Link>:定义数据库物理表之间的关联关系

层级组:<Hierarchies>

层级:<Hierarchy>

级别:<Level>

维度组:<Dimensions>

维度:<Dimension>

维度属性:<Attribute>

度量组:<MeasureGroups>

度量维度关联:(事实表和维度表的关联)<DimensionLinks>

查询:<Query>:等同View

计算成员:<CalculateMember>

聚合表:<AggregateTable>

Schema3.0

Schema4.0

立方体:<Cube>

立方体:<Cube>

维度:<Dimension>

维表关联:<Join>雪花模型

维度组:<Dimensions>

维度:<Dimension>

维度属性:<Attribute>

层级:<Hierarchy>

级别:<Level>

层级组:<Hierarchies>

层级:<Hierarchy>

级别:<Level>

度量:<Measure>

度量组:<MeasureGroups>

度量维度关联:(事实表和维度表的关联)<DimensionLinks>

视图:<View>

查询:<Query>:等同View

计算成员:<CalculateMember>

计算成员:<CalculateMember>

虚拟立方体:<VirsualCube>

 

聚合表:<AggregateTable>

聚合表:<AggregateTable>

 

物理模型:<PhysicalSchema>

关联:<Link>:定义数据库物理表之间的关联关系

4.  多维数据分析平台构建

调研了两种个架构:

1.  mysql(Kylin)+Mondrian+Mondrian workbench+Saiku

2.  mysql+Mondrian+Pentaho Business intelligence server Community Edition

此例子使用第一种框架作为测试平台。平台框架如下:

MondrianSchema没有一个比较好的图形化编程工具,workbench只是一个这种的工具,且目前只找到3.0版本的。所以一般为手写。

Mysql和mondrian的安装就不做过多的介绍,mysql本地安装,mondrian下载最先的4.0版本的jar包即可。重点介绍一下Saiku的安装。

Saiku下载地址:http://community.meteorite.bi/,下载在最新的saiku-latest.zip解压。自带mysql驱动所以不需要导入mysql驱动包,只需要将下载的mondrian-4.0的jar包复制到server/tomcat/webapps/saiku/WEB-INF/lib/下面集成Mysql+mondrian+Saiku的三层数据分析系统。

启动Saiku,访问http://localhost:8080,注意安装在本机所以是localhost。默认用户名和密码是admin/admin。初次登录提示需要从http://licensing.meteorite.bi/网站获取一个免费的证书。并且上传到http://localhost:8080/upload/html,照做即可。

登录进Saiku之后,在控制台-Datasourcemanager-add data source添加本地数据库连接信息即可。至此mysql-mondrian-saiku的三层多维数据分析平台构建完成。

5.  仿真数据集的准备

本例采用网络上的销售-产品数据集作为多维数据分析的数据源。数据结构为雪花模型。由一张事实表sale,三张维度表product,producttye,Customer三张维度表构成。包含customer和product两个维度,其中product的外键proTypeId指向ProductType的主键proTypeId构成雪花模型。包含单价unitPrice和销售量number两个度量。具体数据结构见下图。

建表和数据装在的构成就不在做过多的介绍。

6.  Mondrian schema3.0/4.0demo演示

结合saiku界面的实例和遇到的大坑演示。

7.  使用过程遇到的坑

l  查看mondrian生成的mysql语句需要配置

default-storage-engine=INNODB

general_log=on

general_log_file=D:\mysql-5.6.34-winx64\data\mysql.log

 

l  mondrain schema4.0特性重点分析

1.  元素<physicalShema>必须要有:指定cube涉及到设事实表和维表的key和关联关系,但是physicalSchema下面的table必须要:指定cube需要的事实表和维度表,link不是必须,可由<Dimension>下面的<Join>属性,<MeasureGroups>下面的<DimensionLinks>下面的<ForeignKeyLink>代替。

2.  <Dimension>下面的<Join>属性也不是必须要有:指定雪花模型的维度表之间的关联关系。可在<physicalSchema>下的<link>中指定维表之间的关联关系。

3.  <MeasureGroups>下面的<DimensionLinks>下面的<ForeignKeyLink>必须要有:指定事实表里面的measures(度量)和维表之间的关联关系。也就是事实表和维度表之间的关联关系。

4. <View>(3.0)和<Query>(4.0)的区别:<Query>和<View>功能上一样,但是Query的语法和官网上有点区别,推荐用View。

5. 使用<View>报错:Caused by: java.sql.SQLException: No suitable driver found for jdbc.mysql://localhost:3306/test

解决:链接写错了。

6.使用<Query>报错:Caused by: org.eigenbase.xom.XOMException: In Schema: In PhysicalSchema: In Query: Attribute 'alias' is unset and has no default value。

解决:name改alias(与官网有区别)。

7.将<Query>的name属性改为alias报错:Caused by: java.sql.SQLException: No suitable driver found for jdbc.mysql://localhost:3306/test

解决:链接写错了。

8. mondrainShema的大坑

(1) 错误:Caused by:com.mysql.jdbc.exceptions.jdbc4. MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group by `producttype`.`proTypeName` order by ISNULL(`producttype`.`proTypeName`' at line 1。

解决:解决:physicalSchema中涉及的要用到的表的定义中有个单词写错了,(Column)写成了Cloumn。

(2) 错误:定义了Hierarychy,却说attribute必须要有一个Hierarchy,

解决:physicalSchema中涉及的要用到的表的定义中有个单词写错了,(Column)写成了Cloumn。

8.  虚拟立方体visualCube(3.0)

 

9.  性能优化aggregateTable

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!