Czy ktoś może mi pokazać dobry przykład przewagi MDX nad zwykłym SQL podczas wykonywania zapytań analitycznych? Chciałbym porównać zapytanie MDX z zapytaniem SQL, które daje podobne wyniki.
Chociaż niektóre z nich można przetłumaczyć na tradycyjny SQL, często wymagałoby to syntezy niezgrabnych wyrażeń SQL, nawet w przypadku bardzo prostych wyrażeń MDX.
Ale nie ma ani cytatu ani przykładu. Jestem w pełni świadomy, że podstawowe dane muszą być zorganizowane inaczej, a OLAP będzie wymagał więcej przetwarzania i przechowywania na wkładkę. (Moja propozycja to przejście z Oracle RDBMS do Apache Kylin + Hadoop )
Kontekst: Próbuję przekonać moją firmę, że powinniśmy sprawdzać bazę danych OLAP zamiast bazy danych OLTP. Większość zapytań SIEM korzysta z grupowania według, sortowania i agregacji. Oprócz zwiększenia wydajności, myślę, że zapytania OLAP (MDX) byłyby bardziej zwięzłe i łatwiejsze do odczytu / zapisu niż równoważne SQL OLTP. Konkretny przykład doprowadziłby do sedna sprawy, ale nie jestem ekspertem od SQL, a tym bardziej MDX ...
Jeśli to pomaga, oto przykładowe zapytanie SQL związane z SIEM dotyczące zdarzeń zapory, które miały miejsce w ostatnim tygodniu:
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
Kostki / bazy danych OLAP mają następujące cechy:
MDX a SQL:
MDX służy do nawigacji po wielowymiarowych bazach danych i definiowania zapytań na wszystkich ich obiektach (wymiarach, hierarchiach, poziomach, elementach i komórkach) w celu uzyskania (po prostu) reprezentacji tabel przestawnych.
MDX wykorzystuje wiele identyczny jak SQL słów kluczowych, takich jak
SELECT
,FROM
,WHERE
. Różnica polega na tym, że SQL tworzy widoki relacyjne, podczas gdy MDX tworzy wielowymiarowe widoki danych .Różnicę widać także w ogólnej strukturze dwóch języków:
Zapytanie SQL:
SELECT column1, column2, ..., column FROM table
zapytanie MDX:
SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube
FROM
określa źródło danych:W SQL: jedna lub więcej tabel
W MDX: kostka
SELECT
wskazuje wyniki pożądane do odzyskania przez zapytanie:W SQL:
W MDX:
Przykład zapytania MDX:
Miary : Cena jednostkowa, Ilość, Rabat, Kwota sprzedaży, Fracht
Wymiar :
Hierarchia czasu : Rok> Kwartał> Miesiąc> z członkami:
Rok: 2010, 2011, 2012, 2013, 2014
Kwartał: Q1, Q2, Q3, Q4
Miesiąc: styczeń, luty, marzec,…
Wymiar :
Hierarchia klientów : Kontynent> Kraj> Stan> Miasto z członkami:
Miasto: Paryż, Lyon, Berlin, Köln, Marsylia, Nantes…
Państwo: Loire atlantique, Bouches du Rhône, Bas Rhin, Torino…
Kraj: Austria, Belgia, Dania, Francja, ...
Poziom kontynentu: Europa, Ameryka Północna, Ameryka Południowa, Azja
Wymiar :
Hierarchia produktów : Kategoria> Podkategoria> Produkt z elementami:
źródło
aktualizacja : ten przykład jest lepszy:
Cel zapytania: Uzyskaj kwotę sprzedaży i liczbę jednostek (w kolumnach) wszystkich rodzin produktów (w wierszach) sprzedanych w Kalifornii w pierwszym kwartale 2010 r.
MDX
SQL
źródło: Uwagi dotyczące użytkowania Modriana (które tłumaczy zapytania MDX do stosowania w relacyjnych bazach danych)
Znalazłem dobry przykład, chociaż SQL nie jest o wiele bardziej złożony (w porównaniu do SaasBase zamiast MDX):
źródło: „OLAP” w czasie rzeczywistym dla Big Data (+ przypadki użycia) - bigdata.ro 2013
źródło