¿Alguien puede mostrarme un buen ejemplo de las ventajas de MDX sobre SQL normal al hacer consultas analíticas? Me gustaría comparar una consulta MDX con una consulta SQL que dé resultados similares.
Si bien es posible traducir algunos de estos al SQL tradicional, con frecuencia requeriría la síntesis de expresiones SQL torpes incluso para expresiones MDX muy simples.
Pero no hay ni una cita ni un ejemplo. Soy plenamente consciente de que los datos subyacentes deben organizarse de manera diferente, y OLAP requerirá más procesamiento y almacenamiento por inserción. (Mi propuesta es pasar de un RDBMS de Oracle a Apache Kylin + Hadoop )
Contexto: estoy tratando de convencer a mi empresa de que deberíamos consultar una base de datos OLAP en lugar de una base de datos OLTP. La mayoría de las consultas SIEM hacen un uso intensivo de agrupar, ordenar y agregar. Además del aumento de rendimiento, creo que las consultas OLAP (MDX) serían más concisas y más fáciles de leer / escribir que el SQL OLTP equivalente. Un ejemplo concreto llevaría el punto a casa, pero no soy un experto en SQL, mucho menos MDX ...
Si ayuda, aquí hay una consulta SQL de muestra relacionada con SIEM para eventos de firewall que ocurrieron la semana pasada:
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
Los cubos / bases de datos OLAP tienen las siguientes características:
MDX versus SQL:
MDX está hecho para navegar por las bases de datos multidimensionales y para definir consultas en todos sus objetos (dimensiones, jerarquías, niveles, miembros y celdas) para obtener (simplemente) una representación de tablas dinámicas.
MDX utiliza muchos idéntica como palabras clave de SQL, como
SELECT
,FROM
,WHERE
. La diferencia es que SQL produce vistas relacionales, mientras que MDX produce vistas multidimensionales de datos .La diferencia también se ve en la estructura general de los dos idiomas:
Consulta SQL:
SELECT column1, column2, ..., column FROM table
consulta MDX:
SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube
FROM
especifica la fuente de datos:en SQL: una o más tablas
en MDX: un cubo
SELECT
indica los resultados que desea recuperar mediante la consulta:En SQL:
En MDX:
Ejemplo de consulta MDX:
Medidas : Precio unitario, Cantidad, Descuento, Monto de ventas,
Dimensión de flete :
Jerarquía de tiempo : Año> Trimestre> Mes> con miembros:
Año: 2010, 2011, 2012, 2013, 2014
Trimestre: Q1, Q2, Q3, Q4
Mes: enero, febrero, marzo, ...
Dimensión :
Jerarquía del cliente : Continente> País> Estado> Ciudad con miembros:
Ciudad: París, Lyon, Berlín, Colonia, Marsella, Nantes ...
Estado: Loire atlantique, Bouches du Rhône, Bas Rhin, Torino ...
País: Austria, Bélgica, Dinamarca, Francia, ...
Nivel continente: Europa, América del Norte, América del Sur, Asia
Dimensión :
Jerarquía del producto : Categoría> Subcategoría> producto con miembros:
fuente
actualización : este ejemplo es mejor:
Objetivo de consulta: obtener la cantidad de ventas y el número de unidades (en columnas) de todas las familias de productos (en filas) vendidas en California durante el primer trimestre de 2010
MDX
SQL
fuente: Notas de uso para Modrian (que traduce consultas MDX para su uso en bases de datos relacionales)
Encontré un ejemplo decente, aunque el SQL no es mucho más complejo (en comparación con SaasBase en lugar de MDX):
fuente: "OLAP" en tiempo real para Big Data (+ casos de uso) - bigdata.ro 2013
fuente