/roxproject

Projeto de engenharia e análise de dados, criação de infraestrutura cloud na AWS e ETL de dados armazenados na S3 para Data Warehouse Redshift

Primary LanguageJupyter Notebook

RoxProject

Projeto de engenharia e análise de dados de empresa de produção de bicicletas visando a criação de infraestrutura cloud na AWS e o carregamento dos dados armazenados na S3 para Data Warehouse Redshift.

airflow dag execution

objetivos:

  • Fazer a modelagem conceitual dos dados;
  • Criação da infraestrutura necessária;
  • Criação de todos os artefatos necessários para carregar os arquivos para o banco criado;
  • Desenvolvimento de SCRIPT para análise de dados;
  • (opcional) Criar um relatório em qualquer ferramenta de visualização de dados.

Desenvolvimento

O desenvolvimento da solução foi feito, em sua maioria, utilizando Programação Interativa em Jupyter Notebooks em um ambiente Anaconda com Python 3.9.4. Parte do código utilizado, como funções específicas, foi retirado das documentações da AWS ou dos pacotes utilizados.

Todo o código pode ser analisado e executado diretamente nos notebooks e os scripts de criação da infraestrutura cloud na AWS e migração de dados podem ser exportados para serem executados diretamente no terminal.

A criação do ambiente cloud na AWS e a conexão com bancos de dados locais dependem das variáveis salvas no arquivo dwh.cfg. No repositório foi disponibilizado um dwh.cfg.modelo para que seja editado com a KEY e SECRET do usuário da AWS. As demais variáveis do arquivo foram mantidas como exemplo.

Para a resolução dos desafios apresentados foram utilizadas as seguintes ferramentas:

Apache Spark Pandas Dataframe PostgresSQL Infraestrutura cloud da AWS Apache Airflow Jupyter Notebook

Como Utilizar

Jupyter Notebooks

Para executar o código disponibilizado nos notebooks é necessário que se tenha o pacote Jupyter instalado no ambiente Python. A maneira mais conveniente de ter vários ambientes virtuais python é com o pacote Anaconda ou com pyenv. Já com o ambiente ativado é só executar o comando jupyter notebook ou jupyter lab e entrar com endereço apresentado no terminal pelo browser. Os notebooks devem ser executados célula a célula sequencialmente e de acordo com as instruções disponibilizadas nos mesmos.

Apache Airflow

O processo de criação das tabelas no Data Warehouse e o carregamento dos dados foi automatizado em um Dag do Airflow. Para utilizar é preciso entrar na pasta airflow pelo terminal, executar docker-compose up para que com containers Docker sejam iniciados e entrar na interface web para executar o Dag stage_rox_bike_tables.

Python Scripts (TODO)

O repositório do projeto foi configurado com o pacote nbdev que gera os scripts python automativamente de acordo com marcações nas células. Esta atualização dos notebooks e a geração dos scripts é o próximo passo no desenvolvimento do projeto.

Roteiro de Desenvolvimento

Os notebooks foram numerados de acordo com uma ordem lógica de execução. No entando, o desenvolvimento dos mesmos não foi linear. Apenas como exemplo, o primeiro notebook criado foi o analise_dados_spark.ipynb já que o Apache Spark permite a importação dos arquivos CSV e a execução de queries SQL nos Dataframes gerados diretamente dos arquivos de texto.

├── 00_criacao_infra_aws.ipynb
├── 01_prepacacao_dados_pandas.ipynb
├── 02_envio_arquivos_s3.ipynb
├── 03_criacao_tablelas_redshift.ipynb
├── 04_analise_dados_spark.ipynb
├── 05_criacao_tabelas_postgres.ipynb
├── 06_analise_dados_postgres.ipynb

00_criacao_infra_aws.ipynb

Código para a criação do banco de dados no Redshift, o Bucket no S3 e Permissões necessárias para a troca de dados e o acesso externo aos serviços da Amazon.

01_prepacacao_dados_pandas.ipynb

Notebook usado para a preparação dos arquivos CSV com tipos compatíveis com o Schema para a importação. Durante o desenvolvimento deste notebook foram também criadas as queries de criação das tabelas com os tipos e relacionamentos apresentados no notebook 03.

02_envio_arquivos_s3.ipynb

Código para o upload dos arquivos CSV preparados para o bucket do projeto, criado no notebook 01, utilizando o cliente Python do S3.

03_criacao_tablelas_redshift.ipynb

Notebook para a execução dos códigos SQL para criação das tabelas no Redshift e o carregamento dos dados armazenados no S3 utilizano o comando SQL COPY.

04_analise_dados_spark.ipynb

Importação dos dados em CSV para Dataframes Spark para a realização das consultas solicitadas. Neste notebook estão disponíveis as queries e os resultados como respostas para os questionamentos apresentados no arquivo de apresentação do projeto.

05_criacao_tabelas_postgres.ipynb

Notebook utilizado para o desenvolvimento dos Schemas das tabelas do banco de dados. Como o Redshift é baseado no PostgresSQL a utilização de um ambiente local compatível é mais rápido e econômico.

06_analise_dados_postgres.ipynb

Foram executadas as mesmas consultas do notebook Spark mas agora nas tabelas criadas com base nos arquivos CSV. O objetivo dessa segunda execução foi realizar o nos dados após tratamento para identificar eventuais diferenças. Também apresenta as respostas para as questões do arquivo de apresentação do projeto.

Objetivos

Além do desenvolvimento em notebooks, foi também incluido no repositório a pasta airflow/ com o docker-compose.yaml para a criação da infraestrutura necessária para a automação dos processos. Foi criado DAG para criação da tabelas no Redshift e o carregamento dos dados dos arquivos CSV de forma automática. Foram criados também Operators com o objetivo de deixar o código do DAG mais limpo mas esse acabou não sendo usado na execução teste.

airflow dag execution

Com o objetivo de testar os dados e a integração dos serviços AWS foi criado um dashboard para a visualização dos dados de total de vendas por dia demonstrado no print abaixo.

quicksight dashboard

Conclusão

Os objetivos o projeto exigiram o uso de uma gama variada de tecnologias de engenharia e análise de dados, computação na nuvem e automação. No entanto, a solução entregue, com o devido tempo, pode ser melhorada. As tabelas no Data Warehouse, por exemplo, podem ser modificadas para uma estrutura de Fatos e Dimensões e a distribuição pode ser modificada para melhorar a velocidade das queries. A automação desenvolvida utilizando o Airflow pode incluir o processamento e transformação dos dados para as novas tabelas, além de todo o tratamento dos arquivos CSV.

Outro ponto de melhora seria a entrega um dashboard interativo como o demonstrado acima ou utilizando ferramentas open source como o Graphana.

Como citado anteriormente, a atualização dos notebooks para a geração automática dos scripts python é o próximo passo natural para o projeto.

O projeto foi um ótimo exercício. Espero que gostem!