Este projeto foi desenvolvido como parte de um desafio técnico para tratar dados musicais. O objetivo central é demonstrar a ingestão, limpeza, modelagem e análise de uma base de dados musical contendo milhares de faixas, utilizando as melhores práticas de banco de dados relacional.
A solução projetada engloba todo o ciclo do dado: desde tratamento prévio de inconsistências do arquivo bruto, até a arquitetura de tabelas normalizadas e consultas analíticas avançadas no banco de dados.
A pipeline de processamento e a modelagem utilizaram as seguintes tecnologias:
- Python & Pandas: Extração, verificação e limpeza dos dados originais corrompidos/desformatados antes da carga.
- PostgreSQL: Banco de dados relacional e escalável escolhido para a modelagem física e relacional dos dados.
- SQL: Criação das estruturas tabulares e construção das queries de análise de resposta .
Para evitar redundância de dados e otimizar as consultas analíticas, a base bruta foi separada e normalizada em um modelo padronizado:
- Fato:
fact_streams(Métricas de reprodução, referenciando diretamente os IDs dimensionais). - Dimensões:
dim_artist(Cadastro único de artistas) edim_genre(Cadastro único de gêneros).
Todos os desafios propostos no Business Case foram técnica e perfeitamente solucionados dentro dos scripts SQL (04_queries.sql):
- Importe o arquivo para o SQL: Solucionado com a criação de uma tabela bruta (
01_create_staging.sql) e ingestão otimizada nativa (03_import_data.sql). - Crie tabelas dimensão a partir desse arquivo: Estrutura relacional baseada em chaves primárias e estrangeiras criadas com sucesso (
02_create_dimensions.sql). - Total de streams por gênero (Q3): Query de agregação gerando a listagem completa de volumetria.
- Média de streams por gênero (Q4): Query analítica apontando o desempenho médio dos ritmos.
- Total de streams por artista em cada ano (Q5): Agrupamento temporal multidimensional cruzando quem cantou e quando.
- Realize uma consulta anonimizando artista e gênero (Q6): Junção da base unificada mascarando informações sensíveis e expondo apenas as chaves identificadoras (IDs).
1. Preparação e Limpeza da Base Bruta
Antes de inserir no banco, execute a rotina de limpeza desenvolvida em Python para tratar e higienizar o documento original .csv:
python clean_data.py(As inconsistências serão eliminadas, gerando o arquivo tratado Music_Test_clean.csv na estrutura de pastas local).
2. Fluxo Estrutural e Arquivos SQL
Em uma IDE compatível (recomenda-se SQLTools nativo do VSCode) conectada ao banco isolado PostgreSQL (musicdb), execute obrigatoriamente nesta ordem:
01_create_staging.sql02_create_dimensions.sql03_import_data.sql04_queries.sql
⚠️ IMPORTANTE: Antes de executar passo final de ingestão (03_import_data.sql), lembre-se de consultar e alterar a linha do comandoCOPY, apontando corretamente o caminho absouto de origem onde foi salvo oMusic_Test_clean.csvna sua infraestrutura/máquina.