Схема снежинка на Mondrian

Современные ROLAP системы поддерживают работу по схеме снежинка. Напомню, что схема снежинка является расширением схемы звезда и подразумевает использование консольных таблиц. Давайте вспомним о схеме функционирования ROLAP схемы на Mondrian. Сначала идет SQL запрос к СУБД, далее идет построение куба.

Вот надо научить систему писать правильный SQL запрос.

SQL запрос через объединение Left, right, inner или full join задается в конструкции FROM, где явно указываются правые, левые таблицы и как считать результат.
Рассмотрим ER схему:

ER snowflake schema

Объединение должно происходить примерно следующим запросом через inner join:

SELECT *
FROM
 	( test.dim_product_group as product_group
            	inner join  test.dim_product as product  on  product.product_group_id = product_group.product_group_id
         	)
  inner join test.fact_sale on product.id_dim_product = fact_sale.id_dim_product
  inner join test.dim_time on dim_time.id_dim_time = fact_sale.id_dim_time;

Вот тут то и нужны знания SQL. Для того что бы описать на языке схем Mondrian вводят тег <join>. Для определенности будем считать, что Right таблица может самостоятельно соединяться с таблицей фактов, тогда как Left таблица не может. Приведем схему:

<Dimension type="StandardDimension" visible="true" highCardinality="false" name="product_snowflake" caption="product_snowflake">
  <Hierarchy name="product_snowflake" visible="true" hasAll="true" primaryKey="id_dim_product" primaryKeyTable="product">
     <Join leftAlias="product_group" leftKey="product_group_id" rightAlias="product" rightKey="product_group_id">
       <Table name="dim_product_group" schema="test" alias="product_group" />
       <Table name="dim_product" schema="test" alias="product" />
     </Join>
   <Level name="group_name" visible="true" table="product_group" column="product_group_name" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" caption="group_name" />
   <Level name="Product_name" visible="true" table="product" column="product_name" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never" />
  </Hierarchy>
</Dimension>

Для объяснения лучше сравнить схему с SQL запросом как сделано на аннимированой картинке:

snowflake_animation

Тег <join> можно использовать как для внутренних так и разделяемых (внешних) измерений.

Резюме

В одной картинке мне удалось отобразить, как задается вся схема. Остались некоторые вопросы которые просто необходимо исследовать это тестирования производительности на различных схемах (снежинка и звезда) на ROLAP. Займемся практикой. (Загрузка/Download)

План видео (ссылка на youtub http://youtu.be/5AeE6Kq_Jzk)
00:13 План видео
01:13 Представление схемы «снежинка» в БД.
02:19 Разбор схемы «снежинка» в Mondrian.
04:07 Развертывание проекта.
09:27 Тестирование производительности «снежинки» и «звезды».
13:28 Выводы.

Ссылки и литература:

  1. «Mondrian 3.0.4 Technical Guide».