Quelqu'un peut-il me montrer un bon exemple des avantages de MDX par rapport à SQL standard lors de l'exécution de requêtes analytiques? Je voudrais comparer une requête MDX avec une requête SQL qui donne des résultats similaires.
Bien qu'il soit possible de traduire certains d'entre eux en SQL traditionnel, cela nécessiterait fréquemment la synthèse d'expressions SQL maladroites même pour des expressions MDX très simples.
Mais il n'y a ni citation ni exemple. Je suis pleinement conscient que les données sous-jacentes doivent être organisées différemment et OLAP nécessitera plus de traitement et de stockage par insertion. (Ma proposition est de passer d'un SGBDR Oracle à Apache Kylin + Hadoop )
Contexte: J'essaie de convaincre mon entreprise que nous devrions interroger une base de données OLAP au lieu d'une base de données OLTP. La plupart des requêtes SIEM font un usage intensif du regroupement, du tri et de l'agrégation. Outre l'amélioration des performances, je pense que les requêtes OLAP (MDX) seraient plus concises et plus faciles à lire / écrire que l'équivalent OLTP SQL. Un exemple concret nous ramènerait au but, mais je ne suis pas un expert en SQL, encore moins en MDX ...
Si cela peut vous aider, voici un exemple de requête SQL liée à SIEM pour les événements de pare-feu qui se sont produits la semaine dernière:
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
Les cubes / bases de données OLAP ont les caractéristiques suivantes:
MDX contre SQL:
MDX est fait pour naviguer dans les bases de données multidimensionnelles et pour définir des requêtes sur tous leurs objets (dimensions, hiérarchies, niveaux, membres et cellules) pour obtenir (simplement) une représentation des tableaux croisés dynamiques.
MDX utilise beaucoup identiques comme mots - clés SQL, comme
SELECT
,FROM
,WHERE
. La différence est que SQL produit des vues relationnelles tandis que MDX produit des vues multidimensionnelles des données .La différence est également visible dans la structure générale des deux langues:
Requête SQL:
SELECT column1, column2, ..., column FROM table
requête MDX:
SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube
FROM
spécifie la source de données:En SQL: une ou plusieurs tables
En MDX: un cube
SELECT
indique les résultats que l'on souhaite récupérer par la requête:En SQL:
Dans MDX:
Exemple de requête MDX:
Mesures : Prix unitaire, Quantité, Remise, Montant des ventes, Fret
Dimension :
Hiérarchie temporelle : Année> Trimestre> Mois> avec les membres:
Année: 2010, 2011, 2012, 2013, 2014
Trimestre: Q1, Q2, Q3, Q4
Mois: janvier, février, mars,…
Dimension :
Hiérarchie client : Continent> Pays> État> Ville avec membres:
Ville: Paris, Lyon, Berlin, Cologne, Marseille, Nantes…
Etat: Loire atlantique, Bouches du Rhône, Bas Rhin, Torino…
Pays: Autriche, Belgique, Danmark, France, ...
Niveau du continent: Europe, Amérique du Nord, Amérique du Sud, Asie
Dimension :
Hiérarchie des produits : catégorie> sous-catégorie> produit avec membres:
la source
mise à jour : Cet exemple est meilleur:
Objectif de la requête: obtenir le montant des ventes et le nombre d'unités (sur les colonnes) de toutes les familles de produits (sur les lignes) vendues en Californie au premier trimestre 2010
MDX
SQL
source: Notes d'utilisation pour Modrian (qui traduit les requêtes MDX pour une utilisation sur les bases de données relationnelles)
J'ai trouvé un bon exemple, bien que le SQL ne soit pas beaucoup plus complexe (par rapport à SaasBase au lieu de MDX):
source: «OLAP» en temps réel pour le Big Data (+ cas d'utilisation) - bigdata.ro 2013
la source