Схема снежинка на 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
- Просмотров: 4638