Alguém pode me mostrar um bom exemplo das vantagens do MDX sobre o SQL comum ao fazer consultas analíticas? Eu gostaria de comparar uma consulta MDX com uma consulta SQL que fornece resultados semelhantes.
Embora seja possível converter alguns deles em SQL tradicional, seria necessário a síntese de expressões SQL desajeitadas, mesmo para expressões MDX muito simples.
Mas não há citação nem exemplo. Estou ciente de que os dados subjacentes devem ser organizados de maneira diferente e o OLAP exigirá mais processamento e armazenamento por inserção. (Minha proposta é passar de um Oracle RDBMS para o Apache Kylin + Hadoop )
Contexto: estou tentando convencer minha empresa de que deveríamos consultar um banco de dados OLAP em vez de um banco de dados OLTP. A maioria das consultas SIEM faz uso pesado de agrupar por, classificar e agregar. Além do aumento de desempenho, acho que as consultas OLAP (MDX) seriam mais concisas e mais fáceis de ler / gravar do que o SQL OLTP equivalente. Um exemplo concreto levaria o ponto para casa, mas eu não sou especialista em SQL, muito menos MDX ...
Se ajudar, aqui está um exemplo de consulta SQL relacionada ao SIEM para eventos de firewall que ocorreram na semana passada:
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
Os cubos / bancos de dados OLAP têm as seguintes características:
MDX versus SQL:
O MDX é criado para navegar nos bancos de dados multidimensionais e definir consultas em todos os seus objetos (dimensões, hierarquias, níveis, membros e células) para obter (simplesmente) uma representação de tabelas dinâmicas.
MDX usa muitos idêntica como palavras-chave SQL, como
SELECT
,FROM
,WHERE
. A diferença é que o SQL produz visualizações relacionais enquanto o MDX produz visualizações multidimensionais de dados .A diferença também é vista na estrutura geral dos dois idiomas:
Consulta SQL:
SELECT column1, column2, ..., column FROM table
Consulta MDX:
SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube
FROM
especifica a fonte de dados:No SQL: uma ou mais tabelas
No MDX: um cubo
SELECT
indica os resultados desejados para recuperar pela consulta:No SQL:
No MDX:
Exemplo de consulta MDX:
Medidas : Preço unitário, quantidade, desconto, valor da venda, frete
Dimensão :
Hierarquia de tempo : Ano> Trimestre> Mês> com membros:
Ano: 2010, 2011, 2012, 2013, 2014
Trimestre: Q1, Q2, Q3, Q4
Mês: janeiro, fevereiro, março,…
Dimensão :
Hierarquia de clientes : Continente> País> Estado> Cidade com membros:
Cidade: Paris, Lyon, Berlim, Köln, Marselha, Nantes…
Estado: Loire atlantique, Bocas do Ródano, Baixo Reno, Turim…
País: Áustria, Bélgica, Danmark, França, ...
Nível de continente: Europa, América do Norte, América do Sul, Ásia
Dimensão :
Hierarquia do produto : Categoria> Subcategoria> produto com membros:
fonte
update : Este exemplo é melhor:
Objetivo da consulta: obter o valor das vendas e o número de unidades (nas colunas) de todas as famílias de produtos (nas linhas) vendidas na Califórnia durante o primeiro trimestre de 2010
MDX
SQL
fonte: notas de uso do Modrian (que traduz consultas MDX para uso em bancos de dados relacionais)
Encontrei um exemplo decente, embora o SQL não seja muito mais complexo (comparado ao SaasBase em vez do MDX):
fonte: “OLAP” em tempo real para Big Data (+ casos de uso) - bigdata.ro 2013
fonte