Схема снежинка на Mondrian
Современные ROLAP системы поддерживают работу по схеме снежинка. Напомню, что схема снежинка является расширением схемы звезда и подразумевает использование консольных таблиц. Давайте вспомним о схеме функционирования ROLAP схемы на Mondrian. Сначала идет SQL запрос к СУБД, далее идет построение куба.
Вот надо научить систему писать правильный SQL запрос.
SQL запрос через объединение Left, right, inner или full join задается в конструкции FROM, где явно указываются правые, левые таблицы и как считать результат.
Рассмотрим ER схему:

Объединение должно происходить примерно следующим запросом через 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 запросом как сделано на аннимированой картинке:

Тег <join> можно использовать как для внутренних так и разделяемых (внешних) измерений.
Резюме
В одной картинке мне удалось отобразить, как задается вся схема. Остались некоторые вопросы которые просто необходимо исследовать это тестирования производительности на различных схемах (снежинка и звезда) на ROLAP. Займемся практикой. (Загрузка/Download)
План видео (ссылка на youtub http://youtu.be/5AeE6Kq_Jzk)
00:13 План видео
01:13 Представление схемы «снежинка» в БД.
02:19 Разбор схемы «снежинка» в Mondrian.
04:07 Развертывание проекта.
09:27 Тестирование производительности «снежинки» и «звезды».
13:28 Выводы.
Ссылки и литература:
- «Mondrian 3.0.4 Technical Guide».
- Подробности
- Опубликовано: 07 Октябрь 2014
- Просмотров: 4957