Praticando
Como prática, iremos implementar um pipeline de ETL para um Data Warehouse.
Nosso desafio será construir um processo que extrai dados da aplicação de vendas e os carrega no Data Warehouse.
Este será o fluxo de dados:
flowchart LR
subgraph App_vendas["App vendas"]
A[(PostgreSQL)]
end
A --> B[ELT]
subgraph Warehouse["Warehouse"]
C[(PostgreSQL)]
end
B --> C
N[Analytics]
C --> N
Exercise
Answer
O PostgreSQL da aplicação de vendas.
Exercise
Answer
O PostgreSQL do Data Warehouse.
Exercise
Answer
O PostgreSQL é um OLTP, ou seja, um sistema de gerenciamento de banco de dados otimizado para transações rápidas e consultas em tempo real (mais adequado para sistemas comerciais onde ACID é importante).
Entretanto, o PostgreSQL também pode ser utilizado como um repositório de dados para análise (data warehouse), embora não seja sua principal função.
Info
Por enquanto, manteremos o PostgreSQL para simplificar nossa arquitetura e posteriormente estudaremos soluções nativamente OLAP.
Sistema de vendas
Iremos trabalhar em um cenário semelhante ao apresentado na introdução. Suponha que um sistema de vendas esteja em operação, tratando dados de vendas, clientes e produtos.
O banco de dados da aplicação de vendas é um PostgreSQL e o seguinte diagrama do modelo relacional representa a estrutura dos dados armazenados:
Simulador de vendas
Para termos um ambiente de testes, iremos criar um simulador de vendas que irá gerar dados fictícios para nossa aplicação. Esse simulador irá inserir dados aleatórios nas tabelas do banco de dados da aplicação de vendas, permitindo que possamos testar nosso pipeline de ETL.
Exercise
Atenção
Execute os próximos exercícios a partir da pasta 01-vendas
.
Exercise
Answer
O arquivo sql/0001-ddl.sql
contém as instruções DDL (Data Definition Language) para criar as tabelas do banco de dados da aplicação de vendas.
Exercise
Answer
O arquivo sql/0002-dml-base.sql
contém as instruções DML (Data Manipulation Language) para inserir dados fictícios nas tabelas do banco de dados da aplicação de vendas.
Assim, inicializaremos o simulador com dados de clientes, produtos e cidades.
Exercise
Answer
O arquivo src/init_database.py
contém o código para inicializar o banco de dados da aplicação de vendas, executando as instruções DDL e DML contidas nos arquivos SQL.
O arquivo src/db_utils.py
contém funções utilitárias para interagir com o banco de dados, como executar consultas e manipular dados.
Exercise
Answer
O arquivo src/sales_simulator.py
contém o código para simular vendas na aplicação. Ele gera dados fictícios e os insere nas tabelas do banco de dados da aplicação de vendas.
As principais características do simulador de vendas são: - Geração de dados aleatórios para simular vendas e itens de vendas. - Inserção dos dados gerados nas tabelas do banco de dados.
Exercise
Answer
São iniciados dois serviços:
postgres-app
: O banco de dados PostgreSQL OLTP (aplicação de vendas).-
python-app
: O simulador de vendas, que irá fazer o papel de aplicação (serviço que produz dados). A sequência de comandos é:- Instala dependências (
pip install -r /app/requirements.txt
). - Inicializa o banco (
python src/init_database.py
). - Inicia o simulador de vendas (
python src/sales_simulator.py
).
- Instala dependências (
Exercise
Exercise
Exercise
DBeaver
Vamos instalar um cliente de banco de dados chamado DBeaver, que é uma ferramenta gráfica para gerenciar bancos de dados.
Info
Caso você já tenha instalado um cliente que suporte PostgreSQL, você pode utilizá-lo para se conectar ao banco de dados da aplicação de vendas e ignorar a instalação do DBeaver.
Para instalar o DBeaver, siga as instruções para o seu sistema operacional:
Para mais detalhes, consulte a página oficial.
Após a instalação, abra o DBeaver e crie uma nova conexão com o banco de dados PostgreSQL da aplicação de vendas utilizando as informações configuradas no .env
.
Exercise
Question
Answer
Não. Não foi criado nenhum volume para isto. Mas isto não é problema nesta aula pois estamos apenas simulando um ambiente.
ETL
Agora que a aplicação de vendas está em funcionamento e os dados estão sendo gerados, vamos implementar um pipeline de ETL para extrair esses dados e carregá-los no Data Warehouse.
Atenção
Execute os próximos exercícios a partir da pasta 02-etl
do repositório base.
Exercise
Exercise
Answer
Não. O schema do Data Warehouse deve ser otimizado para análises, então você pode querer ajustar os tipos de dados, remover constraints de chave estrangeira, obrigatoriedade de preenchimento das colunas, remover colunas desnecessárias, remover triggers de atualização automática ou criar índices para melhorar a performance das consultas.
Exercise
Exercise
Exercise
Exercise
Exercise
Exercise
Exercise
Dashboard
Agora que você já possui os dados no Data Warehouse, é hora de consumir!
Um dashboard é uma ferramenta de visualização de dados que permite acompanhar métricas e indicadores de desempenho. Para simular esta funcionalidade, iremos utilizar um Jupyter Notebook.
Exercise
Para finalizar
Exercise
Answer
O ETL deve ser projetado para lidar com atualizações, entretanto, nosso ETL atual não considera essas mudanças e supõe que os dados são sempre novos (incrementais).
Para lidar com isso, precisaríamos implementar uma lógica de atualização que identificasse registros existentes no Data Warehouse e os atualizasse conforme necessário.