Alguém pode me mostrar um bom exemplo das vantagens do MDX sobre o SQL regular ao fazer consultas analíticas? Gostaria de comparar uma consulta MDX com uma consulta SQL que fornece resultados semelhantes.
Embora seja possível traduzir alguns deles em SQL tradicional, isso frequentemente exigiria a síntese de expressões SQL desajeitadas, mesmo para expressões MDX muito simples.
Mas não há citação nem exemplo. Estou plenamente 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 Apache Kylin + Hadoop )
Contexto: Estou tentando convencer minha empresa de que devemos consultar um banco de dados OLAP em vez de um banco de dados OLTP. A maioria das consultas SIEM faz uso intenso de agrupamento, classificação e agregação. Além do aumento de desempenho, acho que as consultas OLAP (MDX) seriam mais concisas e fáceis de ler/gravar do que o SQL OLTP equivalente. Um exemplo concreto deixaria claro, mas não sou especialista em SQL, muito menos em MDX...
Se ajudar, aqui está um exemplo de consulta SQL relacionada ao SIEM para eventos de firewall que aconteceram 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
MDX
eSQL
não são de forma alguma os mesmos, e muitas vezes nem mesmo comparáveis, pois estão consultandomultidimensional
erelational databases
respectivamente. Você não pode consultar seu banco de dados relacional existente com MDX.A principal vantagem de usar um modelo multidimensional e usar MDX para consultá-lo é que você está consultando dados pré-agregados e que o MDX é otimizado para consultar de maneira estatística em vez de relacional. Você não consulta mais linhas e tabelas para produzir um conjunto de resultados simples, mas está usando tuplas e conjuntos para segmentar e agregar um cubo multidimensional.
Pense assim: se você usar uma consulta SQL para obter o valor total das vendas de um determinado grupo de itens, precisará escrever uma consulta que resuma todas as linhas da fatura de todos os itens do grupo de itens. Se você estiver usando um cubo e tiver agregações no nível do grupo de itens, o resultado será calculado durante o processamento e as agregações serão armazenadas para cada grupo de itens, tornando as consultas instantâneas.
Multidimensional e MDX é um conceito totalmente diferente do SQL baseado em conjunto relacional.
Seu exemplo pode se tornar muito mais simples porque você faria as transformações, como a análise de data durante o processo de carregamento de dados e sua comparação do último mês poderia ser um arquivo
calculated measure
. Sua média de Seul e hoje pode sercalculated members
Se seus cubos forem bem projetados para seus requisitos, acredito que você poderia fatiar e dividir o conjunto de dados de seu exemplo sem precisar escrever consultas, mas faça isso em uma tabela dinâmica ou outra ferramenta de análise.
Então, novamente, não há "apenas reescrever SQL em MDX". Requer um pouco de conhecimento para fazer isso direito e uma mentalidade diferente. Pense em diagramas de Venn em vez de conjuntos de resultados.
Para fornecer um exemplo usando o banco de dados adventureworks, imagine a necessidade de listar o número de pedidos de vendas por cliente na categoria bicicletas.
Se você fizesse isso usando SQL, precisaria escrever uma consulta que contasse o número de pedidos de vendas contendo uma linha com um produto que por acaso é da categoria bicicletas e associá-la à tabela de clientes, de modo que se tornaria uma consulta bastante complexa .
No MDX (desde que seu cubo seja bem projetado para esse requisito), você pode apenas escrever porque a lógica e a complexidade foram movidas para outro lugar:
Os cubos/bancos de dados OLAP possuem as seguintes características:
MDX versus SQL:
O MDX é feito para navegar em bancos de dados multidimensionais e definir consultas sobre todos os seus objetos (dimensões, hierarquias, níveis, membros e células) para obter (simplesmente) uma representação de tabelas dinâmicas.
O MDX usa muitas palavras-chave SQL idênticas, como
SELECT
,FROM
,WHERE
. A diferença é que o SQL produz exibições relacionais enquanto o MDX produz exibições multidimensionais de dados .A diferença também é vista na estrutura geral das duas línguas:
Consulta SQL: Consulta
SELECT column1, column2, ..., column FROM table
MDX:
SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube
FROM
especifica a fonte de dados:Em SQL: uma ou mais tabelas
Em MDX: um cubo
SELECT
indica os resultados desejados para recuperar pela consulta:Em SQL:
Em MDX:
Exemplo de consulta MDX:
Medidas : Preço unitário, Quantidade, Desconto, Valor de vendas, 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 do cliente : Continente > País > Estado > Cidade com membros :
Cidade: Paris, Lyon, Berlim, Köln, Marselha, Nantes…
Estado: Loire atlantique, Bouches du Rhône, Bas Rhin, Torino…
País: Áustria, Bélgica, Dinamarca, França, ...
Nível do continente: Europa, América do Norte, América do Sul, Ásia
Dimensão :
Hierarquia do produto : Categoria > Subcategoria > produto com membros :
atualização : Este exemplo é melhor:
Objetivo da consulta: obter o valor das vendas e o número de unidades (em colunas) de todas as famílias de produtos (em linhas) vendidas na Califórnia durante o primeiro trimestre de 2010
MDX
SQL
fonte: Notas de uso para 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