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💦!
Abaixo está a representação gráfica da arquitetura deste projeto:
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.
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.
- 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.
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.
- DAGs: As DAGs (Directed Acyclic Graphs) são definidas dentro da pasta
airflow/dags/
. O arquivo principal é odag_main.py
, que orquestra diferentes tarefas. - Tasks: As tarefas são modularizadas dentro da pasta
airflow/tasks/
. Um exemplo é otask_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/
.
- 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
.
- 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
.
- 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
.
- Clone o repositório:
git clone https://github.com/wuldson-franco/breweries_case.git
- Navegue até o diretório do projeto:
cd breweries_case
- Suba os containers com Docker:
docker-compose up -d
- Acesse o Airflow na URL e inicie as DAGs conforme necessário.
http://localhost:8080
- Apague os containers Docker:
docker-compose down -v
- Documentação Oficial do Airflow
- Documentação Oficial do Docker
- Documentação Oficial do MinIO
- Documentação Oficial do Metabase
Contribuições e dúvidas são bem-vindas, qualquer coisa manda msg!
Este projeto está licenciado sob a MIT License.