{"id":28218817,"url":"https://github.com/esscova/ecommerce-data-pipeline","last_synced_at":"2026-05-05T21:31:43.035Z","repository":{"id":293376501,"uuid":"983842038","full_name":"esscova/ecommerce-data-pipeline","owner":"esscova","description":"Este projeto foi desenvolvido como um exercício prático e peça de portfólio, demonstrando habilidades em engenharia de dados, Python, SQL, MongoDB, PostgreSQL, Docker e modelagem de dados.","archived":false,"fork":false,"pushed_at":"2025-05-15T02:25:49.000Z","size":98,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-11T05:42:00.619Z","etag":null,"topics":["data-engineering","elt-pipeline","etl-pipeline","mongodb","pipeline","postgresql","sql"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/esscova.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-15T02:14:52.000Z","updated_at":"2025-05-15T02:27:44.000Z","dependencies_parsed_at":"2025-05-15T03:42:18.795Z","dependency_job_id":null,"html_url":"https://github.com/esscova/ecommerce-data-pipeline","commit_stats":null,"previous_names":["esscova/ecommerce-data-pipeline"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/esscova/ecommerce-data-pipeline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esscova%2Fecommerce-data-pipeline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esscova%2Fecommerce-data-pipeline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esscova%2Fecommerce-data-pipeline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esscova%2Fecommerce-data-pipeline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esscova","download_url":"https://codeload.github.com/esscova/ecommerce-data-pipeline/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esscova%2Fecommerce-data-pipeline/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32669384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-05T11:29:49.557Z","status":"ssl_error","status_checked_at":"2026-05-05T11:29:48.587Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-engineering","elt-pipeline","etl-pipeline","mongodb","pipeline","postgresql","sql"],"created_at":"2025-05-18T02:10:40.734Z","updated_at":"2026-05-05T21:31:43.021Z","avatar_url":"https://github.com/esscova.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pipeline de Dados E-commerce para Análise de Vendas\n\nEste projeto implementa um pipeline de Extração, Transformação e Carga (ETL) para processar dados de vendas de produtos de um e-commerce. Os dados são extraídos de uma API, armazenados em um formato bruto no MongoDB, transformados, e então carregados em uma tabela de staging no PostgreSQL. Subsequentemente, um Data Warehouse com um modelo Star Schema é populado a partir da tabela de staging para permitir análises de Business Intelligence.\n\nEste projeto foi desenvolvido como um exercício prático e peça de portfólio, demonstrando habilidades em engenharia de dados, Python, SQL, MongoDB, PostgreSQL, Docker e modelagem de dados.\n\n```mermaid\nflowchart TD\n    A[\"API de Produtos Externa[🌐]\"] --\u003e B[\"Script Python de Extração[🐍]\"]\n    B --\u003e C[(\"Dados Brutos\")]\n    C --\u003e D[(\"MongoDB [🍃] Armazenamento de Dados Brutos\")]\n    D --\u003e E[\"Script Python de Transformação [🐍]\"]\n    F[\"Regras de Transformação - Limpeza - Normalização - Conversão\"] -.-\u003e E\n    E --\u003e G[(\"Dados Transformados\")]\n    G --\u003e H[(\"PostgreSQL [🐘] Tabela de Staging\")]\n    H --\u003e I[\"Scripts SQL [📊]\"]\n    I --\u003e J[\"Data Warehouse Star Schema [🐘 PostgreSQL]\"]\n    J --\u003e K[\"Tabelas de Dimensão - Produtos - Clientes - Tempo - Localização\"]\n    J --\u003e L[\"Tabela Fato - Vendas\"]\n    K --\u003e M[\"Análise de BI [📈]\"]\n    L --\u003e M\n    \n    classDef api fill:#f9f9ff,stroke:#333,stroke-width:2px\n    classDef python fill:#e6f3ff,stroke:#333,stroke-width:2px\n    classDef data fill:#f9f6e5,stroke:#333,stroke-width:2px\n    classDef mongodb fill:#e6ffe6,stroke:#333,stroke-width:2px\n    classDef postgres fill:#ffe6e6,stroke:#333,stroke-width:2px\n    classDef sql fill:#f2e6ff,stroke:#333,stroke-width:2px\n    classDef bi fill:#ffe6f2,stroke:#333,stroke-width:2px\n    classDef warehouse fill:#e6ffff,stroke:#333,stroke-width:2px\n    \n    class A api\n    class B,E python\n    class C,G data\n    class D mongodb\n    class H,J,K,L postgres\n    class I sql\n    class M bi\n    class F data\n```\n\n## Funcionalidades\n\n*   **Extração de Dados:** Coleta dados de produtos de uma API REST.\n*   **Armazenamento Bruto:** Persiste os dados brutos extraídos no MongoDB.\n*   **Transformação de Dados:** Limpa, normaliza, converte e enriquece os dados.\n*   **Carga em Staging:** Carrega dados transformados em uma tabela de staging no PostgreSQL.\n*   **Criação de Data Warehouse:** Define e cria o esquema de um Star Schema no PostgreSQL.\n*   **População do Data Warehouse:** Popula as dimensões e fatos a partir da staging.\n*   **Consultas Analíticas:** Fornece exemplos de queries SQL para análise.\n*   **Configuração Centralizada:** Usa `core/config.py` para gerenciar configurações.\n*   **Modularidade:** Código organizado em módulos com responsabilidades claras.\n*   **Gerenciamento de Ambiente Dockerizado:** Utiliza Docker e Docker Compose para os serviços de banco de dados, gerenciados por um `Makefile`.\n\n## Estrutura do Projeto\n\n```\necommerce-data-pipeline/\n├── .env.template           # Template de configurações de ambiente\n├── .docker/\n│   └── compose.yml         # Arquivo Docker Compose para serviços de BD\n├── Makefile                # Comandos para gerenciar o ambiente Docker\n├── src/\n│   ├── core/               # Módulos centrais (config, DB managers)\n│   ├── pipeline/           # Módulos das etapas do ETL\n│   ├── sql/                # Scripts SQL (schema, populate, queries)\n│   └── main.py             # Orquestrador principal do pipeline\n├── requirements.txt        # Dependências Python\n└── README.md               # Este arquivo\n```\n\n## Tecnologias Utilizadas\n\n*   **Python 3.12+**\n*   **MongoDB:** Banco de dados NoSQL (dados brutos).\n*   **PostgreSQL:** Banco de dados SQL (staging e Data Warehouse).\n*   **Docker \u0026 Docker Compose:** Para containerização e gerenciamento dos serviços de banco de dados.\n*   **Make:** Para simplificar os comandos Docker Compose.\n*   **Bibliotecas Python Principais:**\n    *   `requests` (Extração da API)\n    *   `pymongo` (Driver MongoDB)\n    *   `psycopg2-binary` (Driver PostgreSQL)\n    *   `python-dotenv` (Variáveis de ambiente)\n    *   `logging` (Logs da aplicação)\n*   **SQL:** Para DDL, DML e consultas analíticas.\n\n## Configuração do Ambiente\n\n1.  **Pré-requisitos:**\n    *   Git\n    *   Python 3.12+\n    *   Pip\n    *   Docker Engine\n    *   Docker Compose (geralmente vem com o Docker Desktop ou pode ser instalado separadamente)\n    *   Make (comum em sistemas Linux/macOS; no Windows, pode ser necessário instalar via Chocolatey, MSYS2, ou usar WSL)\n\n2.  **Clone o Repositório:**\n    ```bash\n    git clone https://github.com/esscova/ecommerce-data-pipeline.git\n    cd ecommerce-data-pipeline\n    ```\n\n3.  **Crie e Ative um Ambiente Virtual Python (para rodar `main.py` localmente):**\n    ```bash\n    python3 -m venv .venv\n    source .venv/bin/activate  # Linux/macOS\n    # .venv\\Scripts\\activate   # Windows\n    ```\n\n4.  **Instale as Dependências Python:**\n    ```bash\n    pip install -r requirements.txt\n    ```\n\n## Gerenciamento do Ambiente com Makefile\n\nEste projeto utiliza um `Makefile` para simplificar a interação com os contêineres Docker Compose. Os principais comandos são:\n\n*   **Iniciar os contêineres dos bancos de dados:**\n    ```bash\n    make up\n    ```\n    Isso utiliza o arquivo `.docker/compose.yml` e as variáveis do `.env`.\n\n*   **Parar e remover os contêineres:**\n    ```bash\n    make down\n    ```\n\n*   **Acessar o shell de um contêiner:**\n    ```bash\n    make shell-mongo    # Acessa o shell bash do contêiner MongoDB\n    make shell-postgres # Acessa o shell bash do contêiner PostgreSQL\n    ```\n\n*   **Conectar diretamente aos bancos de dados:**\n    ```bash\n    make connect-mongo    # Abre o mongosh conectado ao MongoDB\n    make connect-postgres # Abre o psql conectado ao PostgreSQL (usuário 'admin', banco 'analytics')\n    ```\n\n*   **Visualizar logs dos contêineres:**\n    ```bash\n    make logs-mongo\n    make logs-postgres\n    ```\n\n*   **Limpar volumes de dados (ATENÇÃO: ISSO APAGA OS DADOS PERSISTIDOS):**\n    ```bash\n    make clean-mongo    # Para e remove o contêiner MongoDB e seu volume de dados\n    make clean-postgres # Para e remove o contêiner PostgreSQL e seu volume de dados\n    make clean          # Para e remove TODOS os contêineres e TODOS os volumes definidos no compose\n    ```\n\n*   **Ver todos os comandos disponíveis:**\n    ```bash\n    make help\n    ```\n\n## Como Executar o Pipeline ETL\n\n1.  **Inicie os Serviços de Banco de Dados:**\n    Certifique-se de que suas instâncias do MongoDB e PostgreSQL estejam rodando. Se estiver usando o Docker Compose gerenciado pelo Makefile:\n    ```bash\n    make up\n    ```\n    Aguarde alguns segundos para que os bancos de dados iniciem completamente.\n\n2.  **Execute o Orquestrador Principal:**\n    Com seu ambiente virtual Python ativado e as dependências instaladas:\n    ```bash\n    python src/main.py\n    ```\n\n3.  **Fluxo de Execução:**\n    *   **Fase 0:** Criação/verificação do esquema do Data Warehouse no PostgreSQL.\n    *   **Etapa 1:** Extração de dados da API.\n    *   **Etapa 2:** Carga dos dados brutos no MongoDB (a coleção é limpa antes).\n    *   **Etapa 3:** Extração dos dados brutos do MongoDB.\n    *   **Etapa 4:** Transformação dos dados.\n    *   **Etapa 5:** Carga dos dados transformados na tabela de staging do PostgreSQL (a tabela é truncada antes).\n    *   **Etapa 6:** População das tabelas de dimensão e fato a partir da staging.\n\n4.  **Verifique os Logs:** Acompanhe a saída no console.\n\n## Consultando o Data Warehouse\n\nApós a execução bem-sucedida do pipeline, conecte-se ao seu banco de dados PostgreSQL (você pode usar `make connect-postgres`) e execute as queries localizadas em `src/sql/queries/` para analisar os dados.\n\n## Estrutura do Data Warehouse (Star Schema)\n\n*   **Tabela Fato:** `FATO_VENDAS`\n*   **Tabelas de Dimensão:** `DIM_PRODUTO`, `DIM_VENDEDOR`, `DIM_LOCAL`, `DIM_TEMPO`, `DIM_PAGAMENTO`.\nConsulte `src/sql/schema/` para detalhes.\n\n## Autor\n[Wellington M Santos](https://www.linkedin.com/in/wellington-moreira-santos/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesscova%2Fecommerce-data-pipeline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fesscova%2Fecommerce-data-pipeline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesscova%2Fecommerce-data-pipeline/lists"}