Criando e alimentando um cubo OLAP físico no MySQL
Aprenda a criar um cubo OLAP físico no MySQL e deixe tudo pronto para conectar qualquer ferramenta de análise de dados.
PUBLICADO POR AYLTON INACIO
Tutoriais e Artigos > Gerenciamento de dados
E aí pessoal, bora lá pra mais um tutorial! Hoje eu vou mostrar como criar um cubo OLAP físico no MySQL, através de um exemplo bem tranquilo de trabalhar, pra você entender bem como isso funciona e alguns conceitos relacionados.
A ideia é mostrar qual o objetivo de um cubo OLAP na prática, montando no MySQL, mas tudo que vou mostrar vai servir também pra você montar um cubo em qualquer ferramenta, deixando tudo certinho pra depois só "brincar" com a análise de dados, também em qualquer ferramenta.
O que é um cubo OLAP?
Um cubo OLAP é uma estrutura de dados montada de forma multidimensional, e que proporciona uma rápida análise de valores quantitativos ou medidas relacionadas com determinado assunto, sob diversas perspectivas diferentes.
A ideia deste tutorial não é falar sobre os conceitos relacionados com cubos OLAP, ou seja, eu imagino que você já conhece o assunto. Se você não conhece, acesse aqui mesmo no meu site esse artigo que fala sobre sobre OLAP, OLTP e cubos analíticos, conseguindo assim a base teórica necessária.
O banco de dados MySQL
Pra gente montar um cubo analítico, físico ou virtual, é necessário ter dados! Esses dados podem estar em vários lugares, sendo mais comum encontrar em um data warehouse, modelado de forma dimensional, ou então em um banco relacional, que é o nosso caso.
Então o primeiro passo pra seguir o tutorial é criar o banco de dados. A ideia é criar um cubo analítico de pedidos realizados em um e-commerce focado para o atacado, então vamos criar um banco de dados chamado loja_virtual
, com as tabelas clientes
,produtos
,pedidos
e pedidos_has_produtos
.
Você pode baixar o script SQL aqui já com o banco pronto e dados cadastrados.
A tabela de clientes
deve ter os campos id
, nome
, sexo
e idade
, como na imagem a seguir.
A tabela de produtos
deve ter os campos id
, nome
, preco
e qtde
, como na imagem a seguir.
A tabela de pedidos
deve ter os campos id
, data
, id_cliente
e status
, como na imagem a seguir.
A tabela pedidos_has_produtos
deve ter os campos id
, id_pedido
, id_produto
, qtde
e valor
, como na imagem a seguir.
Mais uma vez, vou dando sequência imaginando que você já tem um conhecimento de banco de dados. Se não tiver, você pode acompanhar somente a lógica da criação de cubo, pois funciona da mesma forma para todas as situações.
Neste ponto, você pode "brincar" com o banco, cadastrando alguns registros e entendo melhor a lógica. O ponto de atenção fica para a tabela pedidos_has_produtos
, que armazena todos os produtos relacionados com os pedidos, lembrando que um pedido pode conter diversos produtos.
Criando o cubo analítico
Somente para reforçar, um cubo pode ser físico ou virtual, sendo que o virtual é montado na memória do computador através de consultas realizadas na fonte de dados, normalmente um data warehouse.
Já um cubo físico, que é a ideia aqui do tutorial, é um "tabelão" já com as dimensões e medidas montadas e armazenadas no disco, precisando apenas que seja alimentada e atualizada através de algum processo de ETL.
Essa abordagem de cubo físico é menos comum e muitos podem até dizer que é errada, mas tudo depende da quantidade de dados que você trabalha e regra de negócio, além de ferramentas e estrutura de pessoal disponíveis. Sendo assim, imagine um ambiente com pouca regra de negócio, poucas métricas e dimensões para analisar e pouco investimento em análise de dados, cenário em que o cubo físico funciona e muito bem.
Como dito anteriormente, o cubo físico é uma tabela com as dimensões e medidas. Ela será chamada de cubo_pedidos
com os campos abaixo:
Repare que a tabela possui dados sobre o tempo, cliente e produto, além da medida princial chamada total
, que armazena o valor pago pelo item de pedido, já calculado através da multiplicação da quantidade comprada pelo valor pago pela unidade.
Um outro ponto interessante é sobre os campos de tempo, onde a data do pedido foi quebrada em uma hierarquia com ano, mês, dia e hora, além do complemento informando o dia da semana.
A imagem a seguir ilustra o cubo pronto e alimentado, de acordo com o script SQL que você rodou e disponível para download aqui mesmo no meu site.
Com o cubo pronto e alimentado, você pode conectar qualquer ferramenta OLAP para fazer a análise dos dados, até mesmo o Excel, por exemplo, e criar tabelas dinâmicas.
Sobre a análise de dados, fique atento aqui no meu site que falo muito sobre isso, mas através de artigos e tutoriais específicos sobre o assunto e que dependem também disso aqui que você viu hoje.
Como alimentar o cubo dinamicamente?
Ao fazer um cubo analítico físico, você vai precisar fazer a atualização de registros com frequência, e com certeza essa atualização tem que ser automática através de um processo de ETL.
O processo de ETL, é um campo de estudo da ciência de dados que serve para extrair dados brutos da fonte de origem, fazer transformações e carregar os dados tratados em uma nova base de dados, normalmente em um data warehouse com modelagem dimensional.
No caso de um cubo analítico físico, você pode utilizar a mesma abordagem, mas os dados serão tratados e quebrados em novos campos, de acordo com a estrutura física da tabela do cubo.
A solução para fazer isso acontecer é utilizar scripts SQL e colocar toda a rotina em uma procedure. Depois, essa procedure pode ser executada uma vez por dia para atualizar o cubo, através de eventos do MySQL ou outras formas de automatização.
Quer aprender? Fique atento aqui no meu site que vou colocar um tutorial sobre como fazer esse miniprocesso de ETL para alimentar um cubo.
Então é isso, eu espero que você tenha gostado desta publicação. Fique à vontade para compartilhar nas suas redes sociais para ajudar na divulgação e crescimento do site.
Aproveite para se inscrever no meu canal do YouTube e também na News do site pra ficar por dentro das novidades em artigos, tutoriais e cursos online.
Abraço e até a próxima!