Skip to content

Latest commit

 

History

History
117 lines (91 loc) · 6.86 KB

README.md

File metadata and controls

117 lines (91 loc) · 6.86 KB

BEES Data Engineering

🍺 Data Project – Breweries Case

Este repositório contém a estrutura de um projeto de dados, tendo por objetivo a avaliação das habilidades em consumir dados de uma API, transformando-os e persistindo-os em um data lake seguindo a arquitetura medalhão com três camadas: dados brutos(Bronze), dados selecionados particionado por localização(Silver) e uma camada analítica agregada(Gold). Integrando o Apache Airflow, Minio, Postgres e Metabase. Utilizando uma infra-estrutura de conteinerização(Docker), boas práticas de programação(Python) e Documentação, além da criação de repositório e versionamento do mesmo.

Bons estudos e bebam água💦!

📊 Arquitetura da Pipeline

Abaixo está a representação gráfica da arquitetura deste projeto:

Desenho Arquitetura

Nesta arquitetura, os dados são extraídos de uma única fonte(API), contendo dados semi-estruturados. Os dados serão transformados e carregados em um Data Lake, e finalmente consumidos por ferramentas de visualização como o Metabase.

📂 Estrutura do Projeto

A estrutura do projeto está organizada da seguinte maneira:

/BREWERIES_CASE
│
├── analises/                            # Nessa pasta existe os arquivos que utilizei para exploração dos dados inicialmente, e tratamentos realizados em Spark.
│   ├── bs_bronze.parquet
│   └── bs_silver.parquet
│   └── explo.ipynb
│   └── trf_bs_bronze_to_bs_silver.ipynb
├── airflow/
│   ├── config_airflow/
│   │   └── airflow.Dockerfile           # Dockerfile customizado para o Airflow
│   ├── dags/
│   │   └── dag_main.py                  # Arquivo principal da DAG contendo as extrações e as transformações em dbt.
│   ├── tasks/
│   │   ├── task_bronze.py               # Arquivo de task contendo a extração dos dados vindos da API <https://api.openbrewerydb.org/breweries>, salvando-os na camada bronze.
│   │   └── task_silver.py               # Arquivo de task contendo os dados coletados na camada_bronze, transformações e particionamentos, salvando os dados na camada silver.
│   │   └── task_gold.py                 # Arquivo de task contendo dos dados coletados em silver, com resposta a pergunta feita no projeto. 
├── docker-compose.yaml                  # Estrutura e requisitos iniciais em container do projeto.
├── .gitgnore                            # Arquivo .git para ignorar arquivos e diretórios que não são necessários para utilização do projeto.
├── requirements.txt                     # Responsavel pelas lib's principais para a criação do projeto.
├── README.md                            # Documentação do projeto, utilizada para o entendimento e funcionamento do mesmo.

🛠️ Tecnologias Utilizadas

  • API: Dados semi-estruturados, utilizados na prática do projeto.
  • Apache Airflow: Para orquestração de workflows e automação de tarefas.
  • Docker: Para conteinerização de serviços, garantindo um ambiente isolado e reprodutível.
  • MinIO: Comparado ao S3 da AWS, servirá para o armazenamento oferecendo escalabilidade, disponibilidade dos dados, segurança e performance.
  • Postgres: Banco de dados utilizado como Data Lake para armazenar as tabelas nas suas diferentes camadas.
  • Metabase: Ferramenta de BI para visualização e análise dos dados armazenados no Data Warehouse.

🐳 Docker

O projeto está configurado para rodar em um ambiente Docker. O docker-compose.yaml e o Dockerfile na raiz do projeto são usados para configurar o ambiente de desenvolvimento e execução dos serviços. Além disso, o Airflow possui um Dockerfile customizado para garantir que todas as dependências específicas sejam atendidas.

docker

airflow2 Airflow

  • DAGs: As DAGs (Directed Acyclic Graphs) são definidas dentro da pasta airflow/dags/. O arquivo principal é o dag_main.py, que orquestra diferentes tarefas.
  • Tasks: As tarefas são modularizadas dentro da pasta airflow/tasks/. Um exemplo é o task_nome_camada.py, que pode conter lógica para processar arquivos parquet.
  • Configurações: Todas as configurações e customizações específicas do Airflow estão na pasta airflow/config_airflow/.

airflow

s3 MinIO

  • Armazenamento: Utilização e armazenamento dos dados na utilização dos buckets bronze, silver e gold. Atendendo aos requisitos solicitados no escopo do projeto.
  • Medalhão: Padrão de design de dados usado em um data lake, com o objetivo de melhorar incremental e progressivamente a estrutura e qualidade das camadas(Bronze ⇒ Silver ⇒ Gold) da arquitetura.
  • Configurações: Todas as configurações e customizações específicas do Metabase estão no arquivo docker-compose.yml.

minio

postgres Postgres

  • Data-Viz: Criação e disponibilidade dos dados, atendendo aos mais diversos tipos de consumidores.
  • Configurações: Todas as configurações e customizações específicas do Metabase estão no arquivo docker-compose.yml.

bd

metabase Metabase

  • Data-Viz: Criação e disponibilidade de visualização de dados, conexão com o postgres, atendendo assim aos mais diversos tipos de consumidores.
  • Users: Configuração de controle de acesso às camadas e tabelas por grupo de usuários.
  • Configurações: Todas as configurações e customizações específicas do Metabase estão no arquivo docker-compose.yml.

dashboard

🚀 Como iniciar

  1. Clone o repositório:
    git clone https://github.com/wuldson-franco/breweries_case.git
  2. Navegue até o diretório do projeto:
    cd breweries_case
  3. Suba os containers com Docker:
    docker-compose up -d
  4. Acesse o Airflow na URL e inicie as DAGs conforme necessário.
    http://localhost:8080
  5. Apague os containers Docker:
    docker-compose down -v

📚 Documentação

📋 Contribuições e Dúvidas

Contribuições e dúvidas são bem-vindas, qualquer coisa manda msg!

📝 Licença

Este projeto está licenciado sob a MIT License.