Deploy de Data Warehouses on premise e na cloud
Oracle DB e Amazon Redshift
Introdução
Neste post vou contar de forma resumida e passando pela etapas de um projeto de implementação de data warehouse on premise — com o Oracle DB 19c e depois passarei pelas etapas da implementação em cloud — com o Amazon Redshift.
O conteúdo que vou expor é o que aprendi no curso de Design e Implementação de Data Warehouses da Data Science Academy da Formação Engenheiro de Dados.
Ferramentas e Ambiente
On Premise
Nessa implementação, construímos uma máquina virtual para servir de guest em uma máquina host.
- Host: MacBook Pro, 2.8GHz Quad-core Intel Core i7, 16 GB RAM, 250 GB SSD.
- Guest: VM com RedHat Enterprise Linux 8 (64-bit), 4 processadores, 8 GB RAM, alocação de espaço em disco dinâmica. Virtualizado pelo Oracle VirtualBox 6.1.16.
- Banco de dados: Oracle 19c
- IDE de banco de dados: Oracle SQL Developer 20.2.0
- IDE de integração de dados: Pentaho 9.1
- Ferramenta de Self Service BI: Tableau Desktop
Cloud
- Amazon Redshift
- Amazon S3
- Ferramenta de banco de dados: SQL Workbench/J
Workflow de projeto
Apresento abaixo o workflow de projeto que seguimos em ambas implementações.
Entendimento do problema de negócios
Esse é a etapa inicial de todo projeto, não só de implementações de DWs como também de outros projetos, seja ele de UX, Data Science, Marketing, Web Development, etc. Estamos resolvendo um problema de negócio que tem como fim trazer valor, tornando-o mais eficiente e ser capaz de fornecer melhores produtos e serviços aos seus cliente e, consequentemente, aumentar os lucros da empresa.
Modelagem de Negócios
Ao entendermos os aspectos de negócios, podemos mapear seus processos, suas regras, criticidade, recursos e, assim, priorizar o que vamos fazer primeiro no projeto.
Modelagem Lógica
Fazemos os diagramas de entidades e relacionamentos entre elas — o Modelo Entidade Relacionamento (MER).
Modelagem Dimensional
Fazemos os diagramas que podem representar um Star Schema ou um Snowflake Schema.
Modelagem Física
Criamos, de fato, as tabelas e seus relacionamentos no banco de dados.
Extração, Transformação e Carga de Dados (ETL)
Extraímos os dados das fontes e os transformamos, ou seja, fazemos a limpeza e eliminamos inconsistências para garantirmos a qualidade dos dados que serão carregados no DW.
Deploy do DW e Conexão com Ferramentas de BI
Entregamos o DW em produção para que possa ser utilizado pelo time de negócios e também podemos conectar ferramentas de BI como o Tableau ou o Microsoft Power BI.
Rollout
Podemos fazer a passagem de bastão para quem vai manter o DW, orientar sobre possíveis erros que podem ocorrer e como podem ser resolvidos e finalizamos o projeto.
Premissas
Nos projetos, assumimos que as fontes de dados (schema: SOURCE) é um banco de dados no qual nós mesmos criamos as tabelas e preenchemos com dados fictícios.
No projeto da cloud, já assumimos que a limpeza dos dados foi feita e agora queremos apenas carregar os dados no data warehouse — Amazon Redshift.
Implementação On Premise
Entendimento de negócio e modelagem
Para o projeto desenhamos um cenário onde uma loja de produtos eletrônicos focado em varejo precisa ter uma visão de suas vendas, seus produtos mais vendidos e retorno de cada venda para que consigam tomar uma decisão estratégica para o próximo trimestre. Dessa forma, ao implementarmos um data warehouse e conectarmos ferramentas de BI a ele pode ajudar a empresa nesse desafio.
Fizemos as quatro modelagens: negócios, lógica, dimensional e física.
Preparação do ambiente
Como mencionado anteriormente sobre as ferramentas e ambiente, construímos uma máquina virtual usando o Oracle VirtualBox e nela instalamos o SO RedHat Enterprise Linux 8.
Depois instalamos o nosso servidor de banco de dados Oracle 19c e o Oracle SQL Developer.
Criação dos usuários e permissões
O mais recomendado é que tivéssemos três servidores cada um com seu respectivo banco de dados — fonte dos dados, staging e DW e usuários, mas devido a limitações de hardware do nosso contexto, seguimos criando três schemas diferentes cada um com seu respectivo usuário.
ETL
Criamos as tabelas no STAGE (staging area) e fizemos a extração dos dados do SOURCE (fonte de dados). É nesse momento que fizemos de duas formas: uma foi usando script SQL e rodando ele no SQL Developer e a outra foi usando o Pentaho para fazer essa integração.
Com os dados na área de staging, podemos fazer a parte de transformação. Olhando a tabela de cadastro de clientes, verificamos que há uma inconsistência na coluna EMAIL_CLIENTE.
Executamos as devidas correções, fazendo a limpeza dos dados em SQL.
Para a carga, passamos o modelo dimensional (FATO-DIMENSÃO) para o modelo físico no banco de dados do data warehouse e transportamos os dados do STAGE para DW.
Conectando ferramentas ao DW
Nesse projeto, conectamos o Tableau Desktop ao nosso DW.
Implementação na cloud
Como já passamos por todas as etapas de entendimento do problema de negócios e modelagens no projeto anterior, a implementação no Amazon Redshift foi mais focada na ferramenta e seus recursos.
Arquitetura
Nessa implementação, como queríamos explorar mais a ferramenta, montamos uma arquitetura bem simples.
Criando o cluster
Criamos um cluster (dc2.large) no free-tier de 2 meses da Amazon Redshift e uma IAM Role que poderá acessá-lo para fazermos as operações. Além disso, configuramos a VPC para receber conexões inbound a partir da nossa máquina local.
Depois, no SQL Workbench/J, conectamos ao nosso cluster e executamos nossos scripts SQL para criar as tabelas no DW.
Carregando os dados
Criamos um bucket no Amazon S3 (arquivos csv, gz e json) e carregamos os dados nele. Depois, no SQL Workbench/J, executamos os comandos de carga para popular as nossas tabelas no DW a partir dos dados que estavam no S3.
Conectando ferramentas ao DW
Nesse projeto, conforme arquitetura, conectamos o Power BI ao nosso DW no Amazon Redshift.
Considerações finais
Quando finalizamos as duas implementações, conseguimos comparar o esforço de cada uma. Na on premise, tivemos bastante trabalho (dias) de montar o servidor, instalar as ferramentas, configurá-las, criar os usuários e conceder as permissões. Já na cloud, o trabalho foi menos intenso (horas) para criar o cluster no Redshift, dar permissões, subir os arquivos no S3 e fazer as cargas. Claro, não houve a fase de transformação, mas acredito que só do fato de não ter tido o trabalho de montar o servidor e instalar as ferramentas e configurá-las, poupou bastante tempo de trabalho.
Além disso, o Amazon Redshift e Amazon S3 possuem paineis nos quais você consegue facilmente monitorar a saúde tanto do cluster quanto dos buckets, o que facilita muito a nossa vida.
E é isso! Espero que tenha curtido e que esse artigo tenha te dado uma luz sobre as duas formas de implementação de data warehouses!
Fique à vontade para me encontrar no LinkedIn para batermos um papo!
Muito obrigado!