ETL (Extract, Transform and Load)
Published: 2022-04-25 10:09:06

O mundo actual é movido a dados. Diariamente são são gerados grandes quantidades de dados através de Sensores, Sistemas de Apoio a Decisão, ERPs, CRMs e muitos outros meios. O tratamento correcto destes dados pode gerar informações importantes para qualquer tipo de negócio. 

**ETL:** é o processo de extração, transformação conforme regras de negócios e o carregamento dos dados geralmente para um Data Mart ou Data Warehouse, bem como enviar os dados para um determinado sistema da organização.

**Ferramentas de ETL:** são ferramentas utlizadas para automação do processo de ETL. Essas ferramentas permitem extrair dados de várias fontes, aplicar trandormações sobre os dados e conectar a base de dados. 
As ferramentas também o oferecem Toolbox, opções de conexão com diferentes bases de dados e  visualização do fluxo de execução do ETL. As ferramentas de ETL mostraram-se mais eficientes do que a excessiva intevenção dos usuários na transformação dos dados.

O ETL tem as seguintes fases:
- Exctract: Extração de dados de fontes externas;
- Transform: Transformação para atender às necessidades de negócios;
- Load: Carga dos dados dentro do Data Warehouse ou Data Mart.

Vantagens do ETL:
- Fluxo Visual do processo;
- Fácil de usar;
- Melhora a inteligência de negócios;
- Mais performance e menos tempo na transformação em relação aos usuários;
- Melhora a limpeza de dados.

**Sugestão:** Além da criação de Data Warehouse e projectos de Business Intelligence, o processo de ETL pode ser aproveitado para integração de sistemas. No final todos os dados transformados, deverão estar num Banco de dados.

Existem muitas ferramentas proprietárias e Open Source.

Ferramentas Proprietárias:
- SQL Server Integration Services (Microsft);
- Oracle Data Integrator (Oracle);
- Data Integrator and Data Services (SAP);
- IBM Infosphere Information Server (IBM);
- Talend Open Studio (Talend).

Ferramentas Open Source:
- Pentaho;	
- Stitch;
- Apache Camel;
- Scriptella;
- KETL Tool;
- Apatar.

**Observação:** Na fase de carregamento ou  inserção no destino é importante verfificar a ordem de inserção na base destino. Verficar a estrutura das tabelas, constraints (foreign keys, primary, unique keys) ajuda a prevenir erros de inserção. Se necessário, desabilita os triggers e índices, temporáriamente.

Ao carregar os dados no Data Warehouse é aconselhavel limpar as tabelas do datawarehouse e se possível criar Stored Procedures para inserir dados nas tabelas do Data Warehouse.

**Exemplo:** Neste exemplo vamos fazer o processo de ETL para um Data Warehouse de Venda de Produtos. As fontes de dados serão: base de dados operacional e arquivos CSV com dados de vendas. 
SGBD:  SQL Server 19, rodando no Docker.
Ferramenta ETL: SQL Server Integration Services
Geração de dados no CSV: Python.

ETL do Problema
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rpkerwufn550rpc9gign.jpg)

Fluxo de Dados
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/71a9lo3927o09ixgt0k8.jpg)

Base de dados **bd_venda_produto**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nrg2oyo05bub5eluharl.jpg)

Registos na tabela **tb_venda**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8c0z45kbffzw8znyqx6.jpg)

Registos da tabela **tb_item_venda**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7py5lll6e17xfdvdgr8t.jpg)

Ficheiro CSV **item_venda**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/snpevu5ep2ehc6yuylva.jpg)

Data Warehouse **DW_venda_produto**
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wi8gk8qs6zgyg1l5clod.jpg)

Stored Procedure para carregar a tabela facto sp_inserir_fac_venda
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5gtzqsegvjm4aev72dgh.jpg)

Registos da tabela fac_venda_produto
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gc5awrll2aic81weqne7.jpg)

Base de dados no container
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iz9x6tobambrh0pn8bts.jpg)