Este projeto consiste em um pipeline de Engenharia de Dados (ETL) desenvolvido em Python para automatizar o tratamento de planilhas de log e viabilizar a inserção eficiente em um banco de dados SQL Server.
O script extrai dados de arquivos Excel, realiza limpeza e transformações (como conversão de formatos de tempo). Além disso, padroniza o schema das colunas de forma dinâmica, exporta um arquivo CSV local para auditoria (camada Staging) e realiza a inserção direta no banco de dados via rede utilizando abstração ORM.
Durante a integração entre o ambiente de processamento (Linux) e o banco de dados (SQL Server / Windows), surgiram desafios específicos de formatação e performance que foram solucionados neste projeto:
- Vetorização com Pandas: A planilha original possuía mais de 40 colunas de tempo no formato
HH:MM:SS. Para garantir alta performance, a transformação de horas para segundos foi feita utilizando operações vetorizadas do Pandas, evitando loops lentos. - Tratamento de Dados Ausentes: Valores inválidos (como
---) foram tratados e convertidos para0, garantindo a integridade dos tipos numéricos no banco de dados. - Padronização de Schema: Os cabeçalhos originais em Excel possuíam espaços e pontos que quebravam a inserção no SQL Server. Foi implementada uma limpeza via Expressões Regulares (Regex) para substituir esses caracteres por underline (
_), garantindo compatibilidade total. - Inserção Segura via Rede (Linux -> SQL Server): Configuração robusta dos drivers Microsoft ODBC 17 no Linux, integrados com SQLAlchemy e
pyodbc. Validação de certificados SSL flexibilizada (TrustServerCertificate=yes), eliminando a necessidade de transferir arquivos físicos para o servidor do banco.
O projeto adota uma arquitetura modular para facilitar a manutenção e escalabilidade:
├── data/
│ ├── data_example/ # Amostra de dados fictícios para teste do script
│ ├── raw/ # Arquivos brutos antes de serem tratados
│ └── processed/ # Arquivos processados(tratados)
├── src/
│ ├── main.py # Orquestrador do pipeline (Entrypoint)
│ ├── extract.py # Módulo responsável pela leitura do Excel
│ ├── transform.py # Módulo de limpeza de dados e regras de negócio
│ ├── load.py # Módulo de salvamento em disco (Staging CSV)
│ └── database.py # Módulo de conexão segura e inserção no banco de dados
├── .env.example # Template de configuração de variáveis de ambiente
├── .gitignore # Arquivos ignorados (dados reais, logs, cache, .env)
├── pyproject.toml # Configurações e dependências (Poetry)
├── poetry.lock # Trava de versões das dependências
└── README.md # Documentação do projeto
Nota: Os dados originais são confidenciais e foram inseridos no
.gitignore. Para rodar o projeto, utilize o arquivo de testes na pastadata_example/.
- Linguagem: Python
- Manipulação de Dados: Pandas, OpenPyXL
- Gerenciamento de Ambiente: Poetry, python-dotenv
- Banco de Dados & ORM: Microsoft SQL Server, SQLAlchemy, pyodbc
- Ambiente de Execução: Linux
- Certifique-se de ter o Python (3.14+) e o Poetry instalados em sua máquina.
- É obrigatório possuir o pacote
msodbcsql17(Microsoft ODBC Driver 17 for SQL Server) eunixodbc-devinstalados no sistema operacional Linux.
Duplique o arquivo .env.example, renomeie-o para .env e insira as credenciais reais do seu banco de dados:
DB_SERVER=seu_servidor_ou_ip
DB_NAME=seu_banco_de_dados
DB_USER=seu_usuario
DB_PASS=sua_senha_super_secreta
DB_TABLE=sua_tabela
DB_SCHEMA='dbo'Clone este repositório e instale as dependências executando o comando abaixo na raiz do projeto:
poetry installPara iniciar o pipeline, que fará a extração, transformação e a carga direta (via ORM) no banco de dados, execute o módulo principal:
poetry run python src/main.pyO histórico de execução (terminal) exibirá feedbacks visuais de progresso e o arquivo processado será gerado automaticamente na pasta data/processed/.
Desenvolvido por Edgar Andrade