Este projeto demonstra um fluxo de exploração e limpeza de dados do conjunto SuperStore em PostgreSQL, com consultas SQL para análise e qualidade de dados. Inclui o diagrama ER, um dicionário de dados resumido e consultas exportadas como arquivos .sql.
- Padronizar tipos e preparar consultas analíticas em Postgres.
- Disponibilizar consultas reutilizáveis para:
- Ranking de produtos por categoria (Top 5 por vendas).
- Imputação de
quantityausente a partir de preço unitário observado.
- Tabelas principais:
orders,products,returned_orders,people(schemapublic). - Relacionamentos (conforme diagrama):
orders.product_id→products.product_id(Produto da linha).orders.order_id→returned_orders.order_id(Devoluções por pedido/linha).orders.region→people.region(Crédito de vendas por região do vendedor).
- Observações de tipos (conforme dicionário no notebook):
orders.order_date: armazenado comoTEXT(recomenda-se converter paraDATE).- Métricas em
orders(sales,profit,quantity,discount):DOUBLE PRECISION.
- PostgreSQL instalado e acessível (local ou remoto).
- As quatro tabelas carregadas em
publiccom as colunas esperadas. - Um usuário com permissão de
SELECTpara executar as consultas.
Você pode executar os arquivos .sql diretamente no psql ou no seu cliente SQL preferido.
Exemplo com psql (ajuste DB_NAME, HOST, USER se necessário):
psql -U USER -h HOST -d DB_NAME -f sql/analysis/top_five_products_each_category.sql
psql -U USER -h HOST -d DB_NAME -f sql/cleaning/impute_missing_quantity.sqlsql/analysis/top_five_products_each_category.sql: retorna o Top 5 de produtos por categoria ordenado por vendas, com lucro agregado.sql/cleaning/impute_missing_quantity.sql: calcula umacalculated_quantitypara linhas comquantitynula, usando preço unitário derivado porproduct_id+discount.
- Datas em
TEXT: para usar datas em filtros/agrupamentos, converta comTO_DATE/TO_TIMESTAMP, por exemplo:TO_DATE(order_date, 'YYYY-MM-DD'). - Formatos reais: se seus dados tiverem outro formato de data, ajuste a máscara.
- Agregações numéricas: onde for necessário arredondamento para apresentação, use
ROUND(CAST(... AS NUMERIC), 2)conforme feito nas consultas.
- Criar
VIEW/MATERIALIZED VIEWpara materializar os resultados de ranking. - Normalizar tipos na origem (e.g., migrar
order_dateparaDATE). - Adicionar testes simples de consistência (contagens,
NOT NULL, chaves).
Realizado por Gerson Ramos - LinkedIn
