技术开发 频道

Mondrian入门介绍之schema manager

  【IT168 文档olap基本概念

  联机分析处理(On Line Analytical Proccessing,简称OLAP) 概念最早由关系数据库之父E.F.Codd于1993年提出。OLAP应用是目前数据仓库上的重要应用之一,是决策分析的关键。作为数据仓库最重要的多维分析工具,OLAP利用存储在数据仓库中的数据完成各种分析操作,并以直观易懂的形式将分析结果返回给决策人员。它的目标是满足决策支持或多维环境特定的查询和报表需求,技术核心是多维分析。OLAP具有灵活的分析功能、直观的数据操作和分析结果可视化表示等突出优点,从而使用户对大量复杂数据的分析变得轻松而高效,以利于迅速做出正确的判断,辅助决策。

  相比于传统的OLTP(联机事务处理),OLAP定义了多维模型的概念辅助分析操作:

  如上图所示,这是由三个维度构成的一个OLAP立方体,立方体中包含了满足条件的cell(子立方)值,这些cell里面包含了要分析的数据,称之为度量值。显而易见,一组三维坐标就唯一确定了一个子立方。下面介绍一下多位模型的基本概念:

  立方体:由维度构建出来的多维空间,包含了所有要分析的基础数据,所有的聚合数据操作都在立方体上进行。

  维度:就是观察数据的一种角度。在这个例子中,路线,源,时间都是维度,

  这三个维度构成了一个立方体空间。维度可以理解为立方体的一个轴。要注意的是有一个特殊的维度,即度量值维度。

  维度成员:构成维度的基本单位。对于时间维,它的成员分别是:第一季度、第二季度、第三季度、第四季度。

  层次:维度的层次结构,要注意的是存在两种层次:自然层次和用户自定义层次。对于时间维而言,(年、月、日)是它的一个层次,(年、季度、月)是它的另一个层次,一个维可以有多个层次,层次可以理解为单位数据聚合的一种路径。

  级别:级别组成层次。对于时间维的一个层次(年、月、日)而言,年是一个级别,月是一个级别,日是一个级别,显然这些级别是有父子关系的。

  度量值:要分析展示的数据,即指标。如上图中一个cell中包含了两个度量值:装箱数和截至时间,可以对其进行多维分析。

  事实表:存放度量值的表,同时存放了维表的外键。所有的分析用的数据最终都是来自与事实表。

  维表:一个维度对应一个或者多个维表。一个维度对应一个维表时数据的组织方式就是采用的星型模式,对应多个维表时就是采用雪花模式。雪花模式是对星型模式的规范化。简言之,维表是对维度的描述。

  除此之外,OLAP还定义了多维模型的查询语言MDX(MDX是微软发布的多维查询语言标准),它的语法与SQL有很多相似之处:

select {[Measures].[Salary]} on columns,
      
[Employee].[employeeId].members on rows from CubeTest

  对于这条语句,COLUMNS 和 ROWS都代表查询轴,其中COLS代表列轴,ROWS代表行轴。COLUMNS又可以写成0,ROWS又可以写成1,当只有两个查询轴时,可以理解为结果的展现格式是一个平坦二维表。这条语句的含义就是查询名字为CubeTest的立方体,列显示Measures维度的salary,行显示Employee维度employeeId级别的所有成员,那么得出的结果就是employeeId所有成员的salary,也就是所有员工的薪酬。由jpivot(jpivot会在后面介绍)展现的结果下图所示:

   开源OLAP引擎-Mondrian

  OLAP引擎实现了除多维数据展示外的所有数据分析功能:包括建立多维模型、解析MDX语句、返回分析结果。国外传统数据库厂商都推出了自己的OLAP分析工具,微软发行了MDX语言标准,SQL SERVER Analysis Service是其商业化OLAP引擎。

  开源社区OLAP产品主要是Mondrian OLAP引擎。Mondrian是开源项目Pentaho的一部分,是一个用Java写成的OLAP引擎。它实现了MDX语言、XML解析、JOLAP规范。它从SQL和其它数据源读取数据并把数据聚集在内存缓存中,然后经过Java API用多维的方式对结果进行展示,同时可以不写SQL就能分析存储于SQL 数据库的庞大数据集,可以封装JDBC数据源并把数据以多维的方式展现出来。JPivot是Mondrian默认的表现层工具,它是一个JSP 自定制的标签库,可以绘制OLAP分析图表。用户可以执行典型的OLAP导航,如下钻、切片。JPivot使用Mondrian作为它的OLAP服务器但也支持XML/A数据源访问。它使用WCF (Web Component Framework)框架,基于XML/XSLT来渲染Web UI组件。

  Mondrian支持的数据库或数据仓库主要有:LucidDb、Oracle、 Access、Mysql、Sybase、Ingres、Postgres、Hypersonic、Teredata、

  Mondrian主要特点是对立方体进行了缓存,众所周知,缓存庞大的立方体对性能有很大的影响,但是Mondrian利用java语言的特点对这一点进行了很好的控制。其次由于Mondrian基于java语言,所以它能运行在不同的平台之上,这也是其流行的主要原因之一,例如花旗银行就在其数据仓库项目中用Mondrian作为它的OLAP引擎。Mondrian是开源项目,为开发人员和数据分析人员提供了深入研究OLAP技术的机会,同时这也为优化Mondrian总体性能提供了可能。

  Mondrian体系结构浅析

  3.1 Mondrian 总体结构

  Mondrian体系结构如下图所示:

  整体的架构图将Mondrian分成了四个大部分Schema manager、Session Manager、Dimension Manager、Aggregate Manager,而实际上各个部分有着更为紧密的联系。对于Dimensional Layer、Star Layer和SQL Layer的划分,更多是处于总体逻辑分层的考虑,具体在源码中,逻辑分层的概念比较模糊。

  下面简单介绍下各个Manager的大致功能,在后续文章会分开详细介绍:

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

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

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

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

  3.2 Mondrian Schema Manager分析

  3.2.1 准备工作

  Mondrian的结果展示分为两种形式:一是利用jpivot展现层在web页面上展示,一种是调用Mondrian api在控制台显示。在分析Mondrian的过程中,后一种方式有利于对结果封装格式的研究以及程序的调试。所以采取后一种方式来对Mondrian进行分析。分析之前要做一些必要的准备工作。

  分析环境为:

  (1)Window2003

  (2)Tomcat5.0

  (3)mysql5.0.37

  (4)java 1.6.0

  (5)Mondrian3.0.3.11016

  1 正确配置Mondrian源码

  (1)在eclipse中构建一个空的java工程(Mondrian3.0工程);

  (2)将Mondrian3.0.3的源码压缩包解压,将其内容全部拷贝到Mondrian3.0工程中;

  (3)在工程属性中指定源代码目录为src/main;

  (4)ant运行build.xml文件的prepare,parser,generate.resources,def四个目标过程, 按顺序运行;

  (5)将mondrian.war发布包中的WEB-INF/lib中的jar包全部拷贝到Mondrian3.0.工程的lib目录中;

  (6)根据提示的异常导入必要的jar包文件;

  在这个过程中需要注意的是:最后执行ant完成对工程进行清理处理;如果一切正常,之后则不需要用mondrian.jar文件,可以依此为标准检测是否构建成功。

  2 数据库建表

  在数据库中建立如下三张表:

create table tb_employee(employee_id int,
employee_name
int
)
create table tb_time(time_id int,
time_year
int,
time_month
int)
create table tb_salary(employee_id int,
time_id
int
salary
int)

  插入适当的数据。

  3 编写Schema文件test.xml

  在利用Mondrian进行多维分析过程中需要十分注意Schema文件的编写。Schema文件是对数据库中表的多维模型定义,所以有些选项要和数据库中表的定义保持一致,更为重要的是Schema文件的设计的好坏直接影响到多维查询的效率,Mondrian在schema文件定义的过程中提供了很多

1
相关文章