Real Time OLAP mit Mondrian
Mondrian ist ein in Java geschriebener Open-Source OLAP Server, der mittels einer XMLA Schnittstelle multidimensionale Anfragen im MDX Format erlaubt. Multidimensionale Cubes werden in Mondrian logisch definiert und auf eine relationale Datenbank als Backend abgebildet. Cubes werden in EXASolution on demand berechnet und für weitere Abfragen in Mondrian zwischengespeichert. Dadurch entfällt die aufwendige Vorberechnung von Cubes und schnelles Real Time OLAP wird in Verbindung mit EXASolution ermöglicht. Die XMLA-Schnittstelle bietet eine standardisierte Anbindung an verschiedene Reporting- und Analysetools.
Im Folgenden wird gezeigt wie ein Cube mit der Mondrian Schema Workbench definiert wird und wie dieser Cube auf dem Mondrian Server über eine XMLA-Schnittstelle publiziert wird. Ein für EXASolution vorkonfiguriertes Mondrian-Paket inklusive Tomcat können Sie hier herunterladen.

- MDX-Schnittstelle über Mondrian
Definieren eines Cubes mit Hilfe der Mondrian Schema Workbench
Die Definition einer Multidimensionalen Datenbank bestehend aus dem logischen Modell (Cubes, Hierarchies and Measures) und die Abbildung dieses Modells auf eine relationale Datenbank erfolgt bei Mondrian mit Hilfe eines Schemas, einer Beschreibung in XML.
Der Mondrian Schema Workbench ist ein grafisches Entwicklungswerkzeug für das Erstellen und Validieren eines Schemas. Das Tool überprüft auch, ob die Abbildung auf die relationale Datenbank korrekt ist. Außerdem ermöglicht es über eine einfache Schnittstelle MDX-Queries an ein erstelltes Schema abzusenden.
Laden Sie eine aktuelle Version der Workbench herunter. Außerdem benötigen Sie noch einen EXASolution JDBC-Treiber, welchen Sie im Downloadbereich finden. Weiterhin sollte auf Ihrem Rechner mindestens ein JRE 6 installiert sein. Entpacken Sie die Workbench und kopieren Sie das jdbc14.jar in den Ordner WORKBENCH_HOME/drivers.
Starten Sie nun den Workbench über das Startskript workbench.bat bzw. workbench.sh und richten Sie eine Verbindung zu EXASolution ein. Öffnen Sie dazu den Verbindungsdialog unter Options->Connection... . Wählen Sie als Connection type "generic database" aus, als Access "Native JDBC", als Custom Connection "jdbc:exa:<connection string>", als Custom Driver Class "com.exasol.jdbc.EXADriver" und den entsprechenden Benutzernamen mit Passwort. Mit dem Test-Button kann die Verbindung zu EXASolution getestet werden.
Öffnen Sie die Datei TPCH1.xml in der Schema Workbench. Dieses Beispiel basiert auf dem relationalen TPC-H Schema (dieses Schema wird für den TPC-H Benchmark verwendet) , welches Sie in unserem Demo-System finden können. Der Schema-Editor ist ein zweigeteiltes Fenster. Im linken Bereich wird eine Baumstruktur des Schemas anzeigt und im rechten Bereich die zugehörigen Attribute. Über eine Toolbar können verschiedene Objekte wie ein neuer Cube, Dimension usw. angelegt werden.
Das vordefinierte Schema besteht aus zwei Cubes: Q1 und Q2. Ein Cube besteht aus einer Faktentabelle, mehreren Dimensionen und Measures. Zum Beispiel basiert der Cube Q2 auf der Faktentabelle ORDERS und einer Dimension Customer, die als Hierarchie die Unterteilung in Regionen und Nationen definiert. Die Dimensionstabelle für diese Hierarchie ist ein verschachtelter Join (ein Standard-Mondrian-Konstrukt, siehe Screenshot) über die Tabellen CUSTOMER,NATION und REGION. Die Dimensionstabelle wird über den entsprechenden Fremdschlüssel C_CUSTKEY mit der Faktentabelle ORDERS verknüpft. Eine für OLAP typische Zeitdimension bestehend aus Jahr, Quartal, Monat können wir über eine temporäre View auf die Spalte O_ORDERDATE der Tabelle ORDER definieren:
-
- WITH ORDERDATE (FULLDATE,M,Q,Y) AS (
- SELECT
- O_ORDERDATE,
- TO_CHAR(O_ORDERDATE, 'MM') ,
- TO_CHAR(O_ORDERDATE, 'Q'),
- TO_CHAR(O_ORDERDATE, 'YYYY')
- FROM
- TPC.ORDERS
- )
- SELECT DISTINCT * FROM ORDERDATE;
Basierend auf dieser View werden die Hierarchien für Year, Quarter und Month definiert. Der Cube Q2 enthält weiterhin das Measure 'Sum TotalPrice'. Dieses Measure wird definiert über den Aggregator sum auf der Spalte O_TOTALPRICE der Faktentabelle ORDERS.
Die Workbench validiert automatisch die verwendeten Spalten und Tabellen des Schemas auf die physische Datenbank. Dadurch ist gewährleistet, dass die Abbildung auch im Produktiveinsatz korrekt ist. MDX-Queries können direkt über File->New->MDX-Query über ein einfaches Textfeld an das definierte Schema abgesetzt werden. Wir verwendet zum testen des Cubes folgende MDX-Query, welche für die Jahre 1992, 1993, 1994 und die Regionen AFRICA, ASIA und EUROPE die 'Sum TotalPrice' berechnet:
-
- SELECT {[Orderdate].[1992],
- [Orderdate].[1993],
- [Orderdate].[1994]} ON COLUMNS,
- {[Customer].[AFRICA ],
- [Customer].[ASIA ],
- [Customer].[EUROPE ]}
- ON ROWS
- FROM [Q2]
- WHERE [Measures].[SUM TotalPrice]
Zusätzliche Informationen zur Definition eines Mondrian Schemas finden Sie auf den Dokumentationsseiten von Mondrian.
Publizieren des Cubes und Einrichtung der XMLA-Schnittstelle
Falls Sie das vorkonfigurierte Tomcat/Mondrian-Paket noch nicht heruntergeladen haben, laden Sie es bitte herunter und entpacken Sie es. Dieses Paket enthält unter TOMCAT_HOME/webapps/mondrian/WEB-INF/queries das Schema TPCH1.xml, welches wir vorhin mit Hilfe der Workbench erstellt haben.
Für die Einrichtung der XMLA-Schnittstelle passen wir die Datei TOMCAT_HOME/webapps/mondrian/WEB-INF/DataSources.xml an.
In dieser Datei wird der Name der DataSource 'Provider=Mondrian;DataSource=TPCH', die URL für die XMLA Schnittstelle 'http://localhost:8080/mondrian/xmla', in dem Element 'DataSourceInfo' die JDBC-Verbindung zur EXASolution sowie der Catalog TPCH mit der URI auf die Schema-Definition TPCH1.xml definiert. Passen Sie in der DataSourceInfo den Connection-String zur EXASolution sowie Benuter und Passwort an. Die vollständige DataSources.xml sieht folgendermaßen aus:
-
- <?xml version="1.0"?>
- <DataSources>
- <DataSource>
- <DataSourceName>Provider=Mondrian;DataSource=TPCH;</DataSourceName>
- <DataSourceDescription>TPCH</DataSourceDescription>
- <URL>http://localhost:8080/mondrian/xmla</URL>
- <DataSourceInfo>Provider=mondrian;
- Jdbc=jdbc:exa:212.204.74.3..8:8563;
- JdbcUser=test;JdbcPassword=password;
- JdbcDrivers=com.exasol.jdbc.EXADriver;
- Catalog=/WEB-INF/queries/TPCH1.xml
- </DataSourceInfo>
- <ProviderName>Mondrian</ProviderName>
- <ProviderType>MDP</ProviderType>
- <AuthenticationMode>Unauthenticated</AuthenticationMode>
- <Catalogs>
- <Catalog name="TPCH">
- <Definition>/WEB-INF/queries/TPCH1.xml</Definition>
- </Catalog>
- </Catalogs>
- </DataSource>
- </DataSources>
Testen der XMLA-Schnittstelle mit JPivot
Die XMLA-Schnittstelle kann nun mit der OLAP-Webanwendung JPivot getestet werden. JPivot wird standardmäßig mit Mondrian ausgeliefert. Vor dem Test können sie die Datei TOMCAT_HOME/webapps/mondrian/WEB-INF/queries/xmla.jsp anpassen, um zum Beispiel die Beispiel-MDX-Query, die xmla-URL oder den verwendeten Catalog zu ändern. Die vollständige xmla.jsp sieht folgendermaßen aus:
-
- <%@ page session="true" pageEncoding="UTF-8" contentType="text/html; charset=ISO-8859-1" %>
- <%@ taglib uri="http://www.tonbeller.com/jpivot" prefix="jp" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
- <!--
- * Change uri attribute to your deployment of this webapp.
- * The dataSource attribute is necessary for Mondrian's XMLA.
- -->
- <jp:xmlaQuery id="query01"
- uri="http://localhost:8080/mondrian/xmla"
- dataSource="Provider=Mondrian;DataSource=TPCH;"
- catalog="TPCH">
- select {[Orderdate].[1992],[Orderdate].[1993],[Orderdate].[1994]} ON COLUMNS,
- {[Customer].[AFRICA ],
- [Customer].[ASIA ],
- [Customer].[EUROPE ]}
- ON ROWS from [Q2] where [Measures].[Sum TotalPrice]
- </jp:xmlaQuery>
- <c:set var="title01" scope="session">Accessing Mondrian powered by EXASolution by XMLA</c:set>
Setzen Sie die Umgebungsvariable JAVA_HOME auf den entsprechenden Pfad zu einem installierten JRE 6, z.B.: SET JAVA_HOME=C:\jre16 unter Windows bzw. EXPORT JAVA_HOME=/usr/bin/jre16 unter Linux. Starten Sie den Tomcat-Applicationserver mit dem Skript TOMCAT_HOME/bin/startup.sh bzw. startup.bat und gehen Sie mit einem Webbrowser auf localhost/mondrian/testpage.jsp, um die xmla-Schnittstelle über JPivot zu testen. Das Ergebnis unserer Beispiel-MDX-Query wird in Tabellenform dargestellt (siehe Screenshot).
Dadurch haben wir sichergestellt, dass die xmla-Schnittstelle korrekt funktioniert. Im nächsten Schritt können Sie ihr Reporting- bzw. Analysetool an die xmla-Schnittstelle anbinden. Wenn Sie sich mit der xmla-Schnittstelle unter 'http://localhost:8080/mondrian/xmla' verbinden, können Sie Ihr OLAP-Tool mit EXASolution als Backend verwenden und von der Performancesteigerung und Flexibilität profitieren. Ihre Cubes werden on the fly berechnet.




















