diff --git a/README.md b/README.md index 35d5dee..eba3480 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ Um modelo genérico de E-commerce para validação de conhecimentos da matéria Essas instruções permitirão que você obtenha uma cópia do projeto em operação na sua máquina local para fins de desenvolvimento e teste. -Consulte **[Implantação](#-implanta%C3%A7%C3%A3o)** para saber como implantar o projeto. ## Desenho de Arquitetura @@ -16,16 +15,20 @@ Consulte **[Implantação](#-implanta%C3%A7%C3%A3o)** para saber como implantar ## Pré-requisitos Para que o projeto funcione devidamente é necessário que seja instalado em um computador com as seguintes configurações: + +``` Memoria Ram: 16gb -Processador: Intel core i5 6gh ou superior +Processador: Intel Core i5 6gh ou superior Espaço em disco: 6gb +``` -Além disto é necessário a previa instalação e configuração do docker: +Além disto é necessário a prévia instalação e configuração do Docker: https://docs.docker.com/engine/install/ ## Instalação -Para realizar a instalação é rode o comando +Para realizar a instalação, rode o comando + ```bash docker compose up ``` @@ -33,14 +36,16 @@ Este comando irá subir todos os containers que farão o processo funcionar devi ## Implantação -Após instalado, será necessário a configuração das conexões do apache spark e do banco base postreSql. Esta configuração poderá ser feita dentro da aba de conexões do apache airflow. Localizada em: +Após instalado, será necessário a configuração das conexões do Apache Spark e do banco base PostgreSql. Esta configuração poderá ser feita dentro da aba de conexões do Apache Airflow, localizada em: + > admin > Connections ## Ferramentas utilizadas
-# [![Postgres](https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge&logo=postgresql&logoColor=white)](https://www.postgresql.org/) [![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/) [![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://www.docker.com/) [![Spark](https://img.shields.io/badge/Apache%20Spark-E25A1C?style=for-the-badge&logo=apache-spark&logoColor=white)](https://spark.apache.org/) [![AirFlow](https://img.shields.io/badge/Airflow-017CEE?style=for-the-badge&logo=Apache%20Airflow&logoColor=white)](https://airflow.apache.org/) [![Visual Studio Code](https://img.shields.io/badge/Visual_Studio_Code-0078D4?style=for-the-badge&logo=visual%20studio%20code&logoColor=white)](https://code.visualstudio.com/) ![MiniO](https://img.shields.io/badge/MinIO--pink?style=for-the-badge&logo=MinIO) +# [![Postgres](https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge&logo=postgresql&logoColor=white)](https://www.postgresql.org/) [![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/) [![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://www.docker.com/) [![Spark](https://img.shields.io/badge/Apache%20Spark-E25A1C?style=for-the-badge&logo=apache-spark&logoColor=white)](https://spark.apache.org/) [![AirFlow](https://img.shields.io/badge/Airflow-017CEE?style=for-the-badge&logo=Apache%20Airflow&logoColor=white)](https://airflow.apache.org/) [![Visual Studio Code](https://img.shields.io/badge/Visual_Studio_Code-0078D4?style=for-the-badge&logo=visual%20studio%20code&logoColor=white)](https://code.visualstudio.com/) [![Astro CLI](https://img.shields.io/badge/Astro%20CLI---?style=for-the-badge&color=%235468ff)](https://www.astronomer.io/docs/astro/cli/overview) [![MinIO](https://img.shields.io/badge/MinIO---?style=for-the-badge&logo=MinIO&color=rgb(199%2044%2072))](https://min.io/) +
diff --git a/docs/arquitetura.md b/docs/arquitetura.md index e69de29..674e27a 100644 --- a/docs/arquitetura.md +++ b/docs/arquitetura.md @@ -0,0 +1,32 @@ +# Arquitetura do Projeto + +
+ +![System Architecture](./assets/architecture.png "Arquitetura do Sistema") + +
+ +--- + +## Banco relacional + +A ingestão de dados é feita a partir de um banco de dados relacional, onde são armazenados os dados brutos do sistema de E-commerce. + +## ETL + +Fluxo da pipeline explicado em [ETL](./etl.md) + + +## Ferramentas + +Para saber mais sobre as ferramentas utilizadas no projeto, acesse [Ferramentas](./ferramentas.md) + +## Banco dimensional + +O banco dimensional é o responsável por armazenar os dados de forma otimizada para a realização de consultas analíticas. O mesmo possui as seguintes tabelas: + +- **Dimensão de Categorias de Produtos** +- **Dimensão de Localização** +- **Dimensão de Vendedores** +- **Dimensão de Clientes** +- **Fato de Vendas** diff --git a/docs/assets/architecture.png b/docs/assets/architecture.png new file mode 100644 index 0000000..0cb91aa Binary files /dev/null and b/docs/assets/architecture.png differ diff --git a/docs/dashboard.md b/docs/dashboard.md index 8a5b047..cedcec8 100644 --- a/docs/dashboard.md +++ b/docs/dashboard.md @@ -61,7 +61,4 @@ Artigos e Blogs: - **"10 Tips for Creating Effective Power BI Dashboards" (Microsoft Power BI Blog)**: Dicas práticas para criar dashboards eficientes e informativos. - **"Data Visualization Best Practices in Power BI" (SQLBI)**: Melhores práticas para visualização de dados utilizando Power BI. -
- -## Conclusão -A criação de um dashboard no Power BI, suportada por uma pipeline de dados robusta, permite uma visualização clara e interativa das métricas e KPIs relevantes. A utilização de recursos adicionais, como vídeos e artigos, contribui para a entrega de um produto final de alta qualidade, alinhado às melhores práticas do mercado. \ No newline at end of file +
\ No newline at end of file diff --git a/docs/etl.md b/docs/etl.md new file mode 100644 index 0000000..e2fec75 --- /dev/null +++ b/docs/etl.md @@ -0,0 +1,24 @@ +# ETL + +## Introdução +O Processo de ETL consiste em enviar dados de uma base para outra (ou para um data lake) da forma mais otimizada possível e realizando as devidas formatações e transformações. + +## Ferramentas + +- Apache Airflow - Ferramenta de orquestração de pipelines +- Apache Spark - Ferramenta de processamento de dados +- PySpark - Biblioteca Python para processamento de dados +- MiniO - Object Storage +- PostgreSql - Banco de dados relacional + +## Passos Executados + +1. Através do Apache Airflow nós realizamos a chamada de uma Dag (processo de pipeline que neste caso será utilizado para realizar o envio de dados de uma base de dados de Ecommerce para uma base de dados dimensional), possibilitando assim, melhor análise dos dados. A Dag ETL (Dag configurada no Airflow para realizar esta operação) realizará a chamada do processo **etl_get_data** que tem como objetivo buscar os dados do banco PostgreSql e criar arquivos `.csv` contendo 1000 dados cada, facilitando assim a leitura destes. + +2. Após o processo **etl_get_data** ser concluido, realizamos a chamada do processo **etl_leading**, que tem como objetivo ler os arquivos `.csv` contendo os dados do banco e enviar eles para o **MiniO** que neste contexto servirá como Object Storage. Estes arquivos são salvos no MiniO no formato `parquet`. + +3. Sendo concluido o processo da camada leading, o Airflow realiza a chamada do processo **etl_bronze** que tem como objetivo ler os arquivos `parquet` e criar uma **Delta Table** destes, otimizando assim as consultas subsequentes. + +4. Posteriormente, será chamado o processo **etl_silver** que será responsável pela transformação dos dados nos padrões necessários + +5. Último processo dentro da arquitetura medalhão, o **etl_gold**, que enviará os dados que estão nas tabelas delta para o banco dimensional **PostgreSql**. \ No newline at end of file diff --git a/docs/ferramentas.md b/docs/ferramentas.md new file mode 100644 index 0000000..864004d --- /dev/null +++ b/docs/ferramentas.md @@ -0,0 +1,63 @@ +# Ferramentas + +--- + +## Introdução + +Este documento descreve as ferramentas utilizadas no projeto, incluindo as tecnologias de banco de dados, linguagens de programação, ferramentas de orquestração de pipelines e armazenamento de objetos. + +Utilizamos as seguintes ferramentas: + +- **PostgreSQL** - Banco de dados relacional +- **Python** - Linguagem de programação utilizada para criar os scripts de extração, transformação e carga de dados +- **Docker** - Containerização de aplicações +- **Apache Spark** - Processamento de dados em larga escala +- **Apache Airflow** - Orquestrador de tarefas +- **Visual Studio Code** - Editor de código +- **Astro CLI** - Ferramenta de linha de comando para gerenciamento de infraestrutura +- **Minio** - Armazenamento de objetos + +## Descrição + +
+ +**PostgreSQL** + +O PostgreSQL é um sistema de gerenciamento de banco de dados relacional de código aberto e amplamente utilizado. Ele oferece suporte a recursos avançados de SQL e é conhecido por sua confiabilidade, escalabilidade e extensibilidade. + +**Python** + +Python é uma linguagem de programação de alto nível, interpretada e de propósito geral. É amplamente utilizada em ciência de dados, desenvolvimento web, automação de tarefas e muito mais. No projeto de Ecommerce, utilizamos Python para criar scripts de ETL e outras tarefas de processamento de dados. + +**Docker** + +Docker é uma plataforma de código aberto que facilita a criação, implantação e execução de aplicativos em contêineres. Ele permite que os desenvolvedores empacotem uma aplicação com todas as suas dependências em um contêiner, garantindo que ela funcione de forma consistente em qualquer ambiente. + +**Apache Spark** + +Apache Spark é um framework de processamento de dados em larga escala, conhecido por sua velocidade e facilidade de uso. Ele oferece suporte a várias linguagens de programação, incluindo Python, e é amplamente utilizado para análise de dados, machine learning e processamento de streaming. + +**Apache Airflow** + +Apache Airflow é uma plataforma de orquestração de pipelines de dados, que permite agendar, monitorar e executar tarefas de forma automatizada. Ele oferece suporte a fluxos de trabalho complexos e é altamente configurável, tornando-o uma escolha popular para a automação de processos de ETL e análise de dados. + +**Visual Studio Code** + +Visual Studio Code é um editor de código leve, poderoso e altamente personalizável, desenvolvido pela Microsoft. Ele oferece suporte a várias linguagens de programação e possui uma ampla variedade de extensões que facilitam o desenvolvimento de aplicativos e scripts. + +**Astro CLI** + +Astro CLI é uma ferramenta de linha de comando para gerenciamento de infraestrutura, desenvolvida pela Astronomer. Ela simplifica a implantação e o gerenciamento de pipelines de dados baseados em Apache Airflow, permitindo que os usuários criem, execute e monitorem tarefas de forma eficiente. + +**Minio** + +Minio é um serviço de armazenamento de objetos de código aberto, compatível com o Amazon S3. Ele oferece escalabilidade, alta disponibilidade e segurança para o armazenamento de dados não estruturados, como imagens, vídeos e arquivos de log. + + +## Instalação + +Para instalar as ferramentas utilizadas no projeto, basta ir na raiz do projeto e executar o comando: + +```bash +docker compose up +``` diff --git a/mkdocs.yml b/mkdocs.yml index d95fef9..d02d783 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,12 +2,9 @@ site_name: Eccomerce-ED nav: - Home: index.md - Padrões do Projeto: padroes.md + - Ferramentas: ferramentas.md - Arquitetura: arquitetura.md - - Ferramentas: - - Apache Spark: componentes/apache_spark.md - - Apache Airflow: componentes/apache_airflow.md - - MinIO: componentes/minio.md - - Pipeline de Dados: pipeline.md + - ETL: etl.md - Dashboard: dashboard.md theme: name: dracula diff --git a/presentation/Engenharia de Dados.pdf b/presentation/Engenharia de Dados.pdf new file mode 100644 index 0000000..05480e1 Binary files /dev/null and b/presentation/Engenharia de Dados.pdf differ diff --git a/presentation/README.md b/presentation/README.md new file mode 100644 index 0000000..e770b7f --- /dev/null +++ b/presentation/README.md @@ -0,0 +1 @@ +[Link da apresentação no Canva](https://www.canva.com/design/DAGJdL3BhgE/kQi-wUCPOrfQJElrjXXcVg/edit?utm_content=DAGJdL3BhgE&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) \ No newline at end of file