Кто-нибудь может показать мне хороший пример преимуществ MDX по сравнению с обычным SQL при выполнении аналитических запросов? Я хотел бы сравнить запрос MDX с запросом SQL, который дает аналогичные результаты.
Хотя некоторые из них можно перевести в традиционный SQL, часто требуется синтез неуклюжих выражений SQL даже для очень простых выражений MDX.
Но нет ни цитирования, ни примера. Я полностью осознаю, что базовые данные должны быть организованы по-другому, и OLAP потребует больше обработки и хранения для каждой вставки. (Мое предложение - перейти с СУБД Oracle на Apache Kylin + Hadoop )
Контекст: я пытаюсь убедить мою компанию, что мы должны запрашивать базу данных OLAP вместо базы данных OLTP. Большинство запросов SIEM интенсивно используют группирование, сортировку и агрегирование. Помимо повышения производительности, я думаю, что запросы OLAP (MDX) были бы более краткими и более легкими для чтения / записи, чем эквивалентный OLTP SQL. Конкретный пример поможет понять, но я не эксперт по SQL, а тем более по MDX ...
Если это поможет, вот пример SQL-запроса, связанного с SIEM, для событий брандмауэра, произошедших на прошлой неделе:
SELECT 'Seoul Average' AS term,
Substr(To_char(idate, 'HH24:MI'), 0, 4)
|| '0' AS event_time ,
Round(Avg(tot_accept)) AS cnt
FROM (
SELECT *
FROM st_event_100_#yyyymm-1m#
WHERE idate BETWEEN trunc(sysdate, 'iw')-7 AND trunc(sysdate, 'iw')-3 #stat_monitor_group_query#
UNION ALL
SELECT *
FROM st_event_100_#yyyymm#
WHERE idate BETWEEN trunc(sysdate, 'iw')-7 AND trunc(sysdate, 'iw')-3 #stat_monitor_group_query# ) pm
GROUP BY substr(to_char(idate, 'HH24:MI'), 0, 4)
|| '0'
UNION ALL
SELECT 'today' AS term ,
substr(to_char(idate, 'HH24:MI'), 0, 4)
|| '0' AS event_time ,
round(avg(tot_accept)) AS cnt
FROM st_event_100_#yyyymm# cm
WHERE idate >= trunc(sysdate) #stat_monitor_group_query#
GROUP BY substr(to_char(idate, 'HH24:MI'), 0, 4)
|| '0'
ORDER BY term DESC,
event_time ASC
Кубы / базы данных OLAP имеют следующие характеристики:
MDX против SQL:
MDX предназначен для навигации по многомерным базам данных и для определения запросов по всем их объектам (измерениям, иерархиям, уровням, элементам и ячейкам), чтобы получить (просто) представление сводных таблиц.
MDX использует многие идентичны в качестве ключевых слов SQL, как
SELECT
,FROM
,WHERE
. Разница в том, что SQL создает реляционные представления, а MDX - многомерные представления данных .Разница также видна в общей структуре двух языков:
SQL-запрос:
SELECT column1, column2, ..., column FROM table
MDX-запрос:
SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube
FROM
указывает источник данных:В SQL: одна или несколько таблиц
В MDX: куб
SELECT
указывает результаты, которые нужно восстановить по запросу:В SQL:
В MDX:
Пример запроса MDX:
Меры : Цена за единицу, Количество, Скидка, SalesAmount,
Измерение фрахта :
Иерархия времени : Год> Квартал> Месяц> с членами:
Год: 2010, 2011, 2012, 2013, 2014
Квартал: Q1, Q2, Q3, Q4
Месяц: январь, февраль, март…
Измерение :
Иерархия клиентов : Континент> Страна> Штат> Город с членами:
Город: Париж, Лион, Берлин, Кельн, Марсель, Нант ...
Штат: Луара Атлантическая, Буш дю Рон, Бас Рин, Турин ...
Страна: Австрия, Бельгия, Дания, Франция, ...
Континентальный уровень: Европа, Северная Америка, Южная Америка, Азия
Измерение :
Иерархия продуктов : Категория> Подкатегория> Продукт с членами:
источник
обновление : этот пример лучше:
Цель запроса: получить объем продаж и количество единиц (в столбцах) всех семейств продуктов (в строках), проданных в Калифорнии в первом квартале 2010 года.
MDX
SQL
источник: Замечания по использованию для Modrian (который переводит запросы MDX для использования в реляционных базах данных)
Я нашел достойный пример, хотя SQL не намного сложнее (по сравнению с SaasBase вместо MDX):
источник: «OLAP» в реальном времени для больших данных (+ варианты использования) - bigdata.ro 2013
источник