Kann mir jemand ein gutes Beispiel für die Vorteile von MDX gegenüber regulärem SQL bei analytischen Abfragen zeigen? Ich möchte eine MDX-Abfrage mit einer SQL-Abfrage vergleichen, die ähnliche Ergebnisse liefert.
Während es möglich ist, einige davon in traditionelles SQL zu übersetzen, würde es häufig die Synthese von ungeschickten SQL-Ausdrücken erfordern, selbst für sehr einfache MDX-Ausdrücke.
Aber es gibt weder ein Zitat noch ein Beispiel. Ich bin mir völlig bewusst, dass die zugrunde liegenden Daten anders organisiert sein müssen und OLAP mehr Verarbeitung und Speicherung pro Einfügung erfordert. (Mein Vorschlag ist, von einem Oracle RDBMS zu Apache Kylin + Hadoop zu wechseln. )
Kontext: Ich versuche mein Unternehmen davon zu überzeugen, dass wir eine OLAP-Datenbank anstelle einer OLTP-Datenbank abfragen sollten. Die meisten SIEM-Abfragen verwenden häufig Gruppierung, Sortierung und Aggregation. Neben der Leistungssteigerung denke ich, dass OLAP (MDX) -Anfragen präziser und einfacher zu lesen / schreiben sind als das entsprechende OLTP-SQL. Ein konkretes Beispiel würde den Punkt nach Hause bringen, aber ich bin kein SQL-Experte, geschweige denn MDX ...
Wenn dies hilfreich ist, finden Sie hier ein Beispiel für eine SIEM-bezogene SQL-Abfrage für Firewall-Ereignisse, die in der letzten Woche aufgetreten sind:
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