MondrianSchema編寫心得

 

MondrianSchema編寫心得

1.  Mondrian是什麼?html

Mondrian是一個用Java成的OLAP引擎。它實現了MDX語言、XML解析、JOLAP規範。它從SQL和其它數據源讀取數據並把數據彙集在內存緩存中,而後通過 Java API用多維的方式對結果進行展現。java

2.  Mondrian組成與架構mysql

Mondrian又四個manager組成,見下圖:web

l  Session Manager:最爲重要的一個部分。接受MDX查詢、解析MDX,返回結果。sql

l  Schema Manager:與初始化緊密相關。主要是一些重要的數據結構如緩存池的構建以及多維模型的生成。數據庫

l  Aggregate Manager:實現了對彙集表的管理。主要是對OLAP緩存的管理,屬於性能優化的部分。編程

l  Dimension Manager:維度的管理。實現多維模型中維度和關係數據庫表中列的映射,在Schema Manager也有部分功能處理這些映射。緩存

從架構上能夠分爲四個層次:tomcat

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

相關文章
相關標籤/搜索