- Carolina Suelen Attili 10369043
- Davi Santos Messias 10444890
- Aline Couto 10206399
- Cristian Barros 10444616
Este projeto foi desenvolvido como parte da disciplina Data Prep & Transformation no MBA de Engenharia de Dados da Universidade Mackenzie. O objetivo é criar um fluxo completo de preparação e transformação de dados brutos de um e-commerce brasileiro, transformando-os em dados especialistas para análise. Abaixo estão as respostas detalhadas para as perguntas do caso de uso.
O banco de dados transacional foi implementado com base nos dados disponíveis no Kaggle (Brazilian E-Commerce Public Dataset). Foi utilizado o SQL Server como SGBD, e as tabelas principais foram importadas no esquema transacional conforme os dados originais.
Estrutura Implementada:
- Tabelas:
olist_ordersolist_order_itemsolist_productsolist_customersolist_sellers- Entre outras auxiliares.
O carregamento foi realizado utilizando scripts SQL para criar as tabelas e importar os arquivos CSV disponíveis no Kaggle.
Foram implementados dois modelos analíticos diferentes:
O Star Schema foi modelado com as seguintes características:
- Tabelas Dimensionais:
dim_products: Contém informações sobre produtos.dim_customers: Contém informações sobre clientes.dim_sellers: Contém informações sobre vendedores.
- Tabela Fato:
fact_orders_star: Agrega os dados transacionais no grão de ano e mês das vendas.
A Wide Table foi modelada unificando todas as dimensões e fatos em uma única tabela ampla, com as colunas relevantes de produtos, clientes, vendedores e pedidos.
Grão do Modelo: Ano e mês das vendas.
O fluxo de transformação foi implementado utilizando Python, com foco em eficiência e automação. Abaixo estão os principais passos:
-
Carregamento dos Dados Brutos:
- Utilizando
pyodbcpara conectar ao banco transacional e carregar tabelas (olist_orders,olist_order_items, etc.).
- Utilizando
-
Transformação Incremental:
- Apenas os dados novos ou alterados desde a última execução são processados. Uma tabela de controle (
sync_control) foi criada para armazenar a data/hora da última sincronização. - Dados incrementais são filtrados com cláusulas
WHERE.
- Apenas os dados novos ou alterados desde a última execução são processados. Uma tabela de controle (
-
Criação do Star Schema:
- Construção de tabelas dimensionais e agregação dos dados na tabela fato no grão de ano e mês utilizando
pandas.
- Construção de tabelas dimensionais e agregação dos dados na tabela fato no grão de ano e mês utilizando
-
Criação da Wide Table:
- Junção de tabelas transacionais para formar uma tabela ampla com todas as informações necessárias.
-
Carregamento nos Bancos Analíticos:
- Utilizando
to_sqldopandase SQLAlchemy para carregar os dados processados nos bancos analíticos (Star Schema e Wide Table).
- Utilizando
-
Automação:
- Após o processamento, a tabela de controle é atualizada para permitir a próxima execução incremental.
Tecnologias Utilizadas:
- Python (
pandas,pyodbc,SQLAlchemy) - SQL Server (Banco Transacional e Bancos Analíticos)
A abordagem escolhida foi Batch Processing (Processamento em Lote). Abaixo estão os motivos para essa escolha:
-
Volume de Dados:
- O conjunto de dados tem aproximadamente 100 mil registros, suficiente para processamento em lote.
-
Frequência das Atualizações:
- Os dados são históricos (2016-2018), e não há necessidade de processamento em tempo real.
-
Simplicidade e Custo:
- A abordagem em lote é mais simples de implementar e mantém os custos baixos em comparação a Micro-Batch ou Stream Processing.
-
Requisitos Analíticos:
- O foco é na análise agregada no grão de ano e mês, que não exige baixa latência.
-
Escalabilidade:
- A abordagem é escalável e pode ser ajustada para volumes maiores no futuro.
scripts/: Contém os scripts Python para transformação dos dados.sql/: Scripts SQL para criação das tabelas transacionais e analíticas.README.md: Este documento.
- Python 3.8+
- Bibliotecas Python:
pandaspyodbcsqlalchemy
- SQL Server com os dados do Kaggle carregados.
- Clone este repositório.
- Configure o banco de dados transacional conforme o esquema fornecido.
- Execute os scripts Python para processar os dados incrementais:
python transform_data.py