文档章节

MondrianSchema编写心得

仔仔1993
 仔仔1993
发布于 2018/04/26 21:16
字数 1762
阅读 101
收藏 3

 

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

 

© 著作权归作者所有

仔仔1993
粉丝 8
博文 62
码字总数 66371
作品 0
武汉
后端工程师
私信 提问
lua package编写

之前因为工作的需要学习了lua,在使用的过程中发现Lua挺好用的,故决定把这门语言好好学习一下。这段时间一直在学习Lua,也一直在使用Lua,但是因为工作忙的关系,都没有时间把这些学习的心得...

kaedehao
2015/10/01
228
0
项目简要回顾和未来计划

回顾: 2016年08月20日,项目意向,了解哈项目方面的信息。 2016年08月24日,简要写一个方案设计+原型设计。 2016年08月25日,到社区调研需求,并讲解系统设计和架构。 2016年09月07日,根据...

雄宗舜
2016/09/22
4
1
哇,今天才发现eoLinker这个接口管理神器!

摘要:API接口在设计时往往需要编写大量的文档,而且编写完成后往往需要根据实际情况,经常改动文档,文档编写维护工作量相对较大,有点头疼。由于我们项目还经常会因为交付周期的原因,需要...

api123
2018/04/27
0
0
Selenium的网友评论

Selenium 是 thoughtworks公司的一个集成测试的强大工具。最近参与了一个系统移植的项目,正好用到这个工具,把一些使用心得分享给大家,希望大家能多多使 用这样的强大的,免费的工具,来保证...

红薯
2009/12/11
859
1
html/css,与你同行的第30天。

这是我在朗沃学习的第三十天,不知不觉,都有一个月有余了,现在进入到我们关键的课程,也就是WEB前端的两大利器,Html和css。于是,我想着随手写一点东西,把我的学习效果以及遇到的问题记录...

小猫丶钓鱼
2014/07/15
70
1

没有更多内容

加载失败,请刷新页面

加载更多

linux 磁盘不足异常

linux 报 No space left on device 异常 ,则是磁盘不足 ,导致异常 运行 df -h 命令查询磁盘使用率,如果有100%,则查找目录大日志文件删除 1.磁盘不足导致系统应用写入文件失败,如系统日志...

zaolonglei
20分钟前
2
0
即学即用的 30 段 Python 实用代码

☞ 分享:最全最新的Python学习大礼包 ☜ 点击查看 编译:Pita & AI开发者,作者:Fatos Morina Python是目前最流行的语言之一,它在数据科学、机器学习、web开发、脚本编写、自动化方面被许...

Object_Man
20分钟前
3
0
The server time zone value 'EDT' is unrecognized or represents more than one time zone.

2019-10-14 18:07:43.714 ERROR 74363 --- [Druid-ConnectionPool-Create-1855026648] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://10.30......

yizhichao
33分钟前
8
0
html加载顺序以及影响页面二次渲染额的因素

本文转载于:专业的前端网站➱html加载顺序以及影响页面二次渲染额的因素 浏览器请求发往服务器以后,返回HTML页面,页面内容开始渲染,具体的执行顺序为: 1. 浏览器开始载入html代码,发现<...

前端老手
36分钟前
9
0
BeginnersBook JSP、JSTL、Servlet 教程

来源:ApacheCN BeginnersBook 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并...

ApacheCN_飞龙
48分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部