Page 1
CIn/UFPE – Integração de Dados e Data Warehouse
Page 2
CIn/UFPE – Integração de Dados e Data Warehouse
Ferramentas de ETL
Por:Ellison Siqueira (erms)
Page 3
CIn/UFPE – Integração de Dados e Data Warehouse
Ferramentas de ETL
• Fonte dos dados: Banco de Dados de Exemplo do MS Acess Formato:
• Access (.mdb) Nome do Banco
• Northwind Descrição da base
• A base contém dados fictícios de uma empresa onde são registradas informações sobre vendas e estoque de produtos.
• Ferramentas DTS (Microsoft) – Data Transformation Services Kettle (Pentaho)
Page 4
CIn/UFPE – Integração de Dados e Data Warehouse
Ferramentas de ETL
• Destino dos Dados: DW em MS SQL Server Nome do Banco
• DWNorthwind Descrição
• Base de dados no modelo estrela. Os assuntos do modelo são Vendas e Estoque
• Objetivos Extrair os dados da base Access, aplicar transformações e
carregá-las no banco SQL Server
Page 5
CIn/UFPE – Integração de Dados e Data Warehouse
Modelo Northwind
Page 6
CIn/UFPE – Integração de Dados e Data Warehouse
Modelo Estrela Vendas
Page 7
CIn/UFPE – Integração de Dados e Data Warehouse
Modelo Estrela Estoque
Page 8
CIn/UFPE – Integração de Dados e Data Warehouse
Modelos SQL
• Este Slide possui um comentário que contém o Script de criação da base de dados do DW.
Ellison Siqueira
CREATE TABLE [dbo].[dim_clientes] ([CódigoDoCliente] [nvarchar] (5) COLLATE Latin1_General_CI_AS NOT NULL ,[CódigoLocalizacao] [int] NULL ,[NomeDaEmpresa] [nvarchar] (40) COLLATE Latin1_General_CI_AS NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[dim_fornecedor] ([CódigoDoFornecedor] [int] NOT NULL ,[NomeDaEmpresa] [nvarchar] (40) COLLATE Latin1_General_CI_AS NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[dim_funcionario] ([CódigoDoFuncionário] [int] NOT NULL ,[Nome] [nvarchar] (30) COLLATE Latin1_General_CI_AS NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[dim_mini_cliente] ([CódigoLocalizacao] [int] IDENTITY (1, 1) NOT NULL ,[País] [nvarchar] (15) COLLATE Latin1_General_CI_AS NULL ,[Cidade] [nvarchar] (15) COLLATE Latin1_General_CI_AS NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[dim_produtos] ([CódigoDoProduto] [int] NOT NULL ,[StatusProduto] [nvarchar] (50) COLLATE Latin1_General_CI_AS NULL ,[NomeDaCategoria] [nvarchar] (15) COLLATE Latin1_General_CI_AS NULL ,[NomeDoProduto] [nvarchar] (40) COLLATE Latin1_General_CI_AS NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[dim_tempo] ([Data] [datetime] NOT NULL ,[Ano] [numeric](18, 0) NULL ,[Semestre] [varchar] (20) COLLATE Latin1_General_CI_AS NULL ,[Mes] [varchar] (20) COLLATE Latin1_General_CI_AS NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[dim_transportadoras] ([CódigoDaTransportadora] [int] NOT NULL ,[NomeDaEmpresa] [nvarchar] (40) COLLATE Latin1_General_CI_AS NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[fato_estoque] ([CódigoDoProduto] [int] NOT NULL ,[CódigoDoFornecedor] [int] NOT NULL ,[PreçoUnitário] [money] NULL ,[UnidadesEmEstoque] [smallint] NULL ,[ValorEstoque] [money] NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[fato_vendas] ([NúmeroDoPedido] [int] NOT NULL ,[CódigoDoProduto] [int] NOT NULL ,[CódigoDoCliente] [nvarchar] (5) COLLATE Latin1_General_CI_AS NOT NULL ,[CódigoLocalizacao] [int] NOT NULL ,[CódigoDoFuncionário] [int] NOT NULL ,[CódigoDoFornecedor] [int] NOT NULL ,[CódigoDaTransportadora] [int] NOT NULL ,[DataDoPedido] [datetime] NULL ,[DataDeEntrega] [datetime] NULL ,[DataDeEnvio] [datetime] NULL ,[Frete] [money] NULL ,[PreçoUnitVenda] [money] NULL ,[Quantidade] [smallint] NULL ,[Desconto] [real] NULL ,[PreçoUnitCompra] [money] NULL ) ON [PRIMARY]GOALTER TABLE [dbo].[dim_clientes] WITH NOCHECK ADD CONSTRAINT [PK_dim_clientes] PRIMARY KEY CLUSTERED ([CódigoDoCliente]) ON [PRIMARY] GOALTER TABLE [dbo].[dim_fornecedor] WITH NOCHECK ADD CONSTRAINT [PK_dim_fornecedor] PRIMARY KEY CLUSTERED ([CódigoDoFornecedor]) ON [PRIMARY] GOALTER TABLE [dbo].[dim_funcionario] WITH NOCHECK ADD CONSTRAINT [PK_dim_funcionario] PRIMARY KEY CLUSTERED ([CódigoDoFuncionário]) ON [PRIMARY] GOALTER TABLE [dbo].[dim_mini_cliente] WITH NOCHECK ADD CONSTRAINT [PK_dim_mini_cliente] PRIMARY KEY CLUSTERED ([CódigoLocalizacao]) ON [PRIMARY] GOALTER TABLE [dbo].[dim_produtos] WITH NOCHECK ADD CONSTRAINT [PK_dim_produtos] PRIMARY KEY CLUSTERED ([CódigoDoProduto]) ON [PRIMARY] GOALTER TABLE [dbo].[dim_tempo] WITH NOCHECK ADD CONSTRAINT [PK_dim_tempo] PRIMARY KEY CLUSTERED ([Data]) ON [PRIMARY] GOALTER TABLE [dbo].[dim_transportadoras] WITH NOCHECK ADD CONSTRAINT [PK_dim_transportadoras] PRIMARY KEY CLUSTERED ([CódigoDaTransportadora]) ON [PRIMARY] GOALTER TABLE [dbo].[fato_estoque] WITH NOCHECK ADD CONSTRAINT [PK_fato_estoque] PRIMARY KEY CLUSTERED ([CódigoDoProduto],[CódigoDoFornecedor]) ON [PRIMARY] GOALTER TABLE [dbo].[fato_vendas] WITH NOCHECK ADD CONSTRAINT [PK_fato_vendas] PRIMARY KEY CLUSTERED ([NúmeroDoPedido],[CódigoDoProduto],[CódigoDoCliente],[CódigoLocalizacao],[CódigoDoFuncionário],[CódigoDoFornecedor],[CódigoDaTransportadora]) ON [PRIMARY] GOALTER TABLE [dbo].[dim_clientes] ADD CONSTRAINT [FK_dim_clientes_dim_mini_cliente] FOREIGN KEY ([CódigoLocalizacao]) REFERENCES [dbo].[dim_mini_cliente] ([CódigoLocalizacao])GOALTER TABLE [dbo].[fato_estoque] ADD CONSTRAINT [FK_fato_estoque_dim_fornecedor] FOREIGN KEY ([CódigoDoFornecedor]) REFERENCES [dbo].[dim_fornecedor] ([CódigoDoFornecedor]),CONSTRAINT [FK_fato_estoque_dim_produtos] FOREIGN KEY ([CódigoDoProduto]) REFERENCES [dbo].[dim_produtos] ([CódigoDoProduto])GOALTER TABLE [dbo].[fato_vendas] ADD CONSTRAINT [FK_fato_vendas_dim_clientes] FOREIGN KEY ([CódigoDoCliente]) REFERENCES [dbo].[dim_clientes] ([CódigoDoCliente]),CONSTRAINT [FK_fato_vendas_dim_fornecedor] FOREIGN KEY ([CódigoDoFornecedor]) REFERENCES [dbo].[dim_fornecedor] ([CódigoDoFornecedor]),CONSTRAINT [FK_fato_vendas_dim_funcionario] FOREIGN KEY ([CódigoDoFuncionário]) REFERENCES [dbo].[dim_funcionario] ([CódigoDoFuncionário]),CONSTRAINT [FK_fato_vendas_dim_mini_cliente] FOREIGN KEY ([CódigoLocalizacao]) REFERENCES [dbo].[dim_mini_cliente] ([CódigoLocalizacao]),CONSTRAINT [FK_fato_vendas_dim_produtos] FOREIGN KEY ([CódigoDoProduto]) REFERENCES [dbo].[dim_produtos] ([CódigoDoProduto]),CONSTRAINT [FK_fato_vendas_dim_tempo] FOREIGN KEY ([DataDoPedido]) REFERENCES [dbo].[dim_tempo] ([Data]),CONSTRAINT [FK_fato_vendas_dim_tempo1] FOREIGN KEY ([DataDeEntrega]) REFERENCES [dbo].[dim_tempo] ([Data]),CONSTRAINT [FK_fato_vendas_dim_tempo2] FOREIGN KEY ([DataDeEnvio]) REFERENCES [dbo].[dim_tempo] ([Data]),CONSTRAINT [FK_fato_vendas_dim_transportadoras] FOREIGN KEY ([CódigoDaTransportadora]) REFERENCES [dbo].[dim_transportadoras] ([CódigoDaTransportadora])GO
Page 9
CIn/UFPE – Integração de Dados e Data Warehouse
Ferramentas ETL
• Considerações A validação de chaves do banco de dados do DW não será
desativada Assim, o processo primeiro deve ser aplicado as
Dimensões e, depois, aos Fatos
Page 10
CIn/UFPE – Integração de Dados e Data Warehouse
Ferramentas ETL
Microsoft DTS
Page 11
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• É disponibilizado através do SQL Server Enterprise Manager
• Exige a “presença” de um servidor SQL Server ativo, mesmo que o Processo de ETL não envolva bases SQL Server
• A Ferramenta aplica o conceito de pacotes. Atividades do processo de ETL são agrupadas nestes pacotes.
Page 12
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
Page 13
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Criar um novo pacote e inserir as conexões
Page 14
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Conexões Acces e SQL Server
Page 15
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Criação das transformações
Page 16
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Criação das transformações
Page 17
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Criação das transformações
Page 18
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Auxílio na seleção dos dados na fonte
Page 19
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Criação das transformações
• Tipos de Transformações
Page 20
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Transformação ActiveX Script
Page 21
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Transformação ActiveX Script
Page 22
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Transformação ActiveX Script
Page 23
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Transformações - Dimensões Clientes Fornecedores Funcionários Transportadoras Produtos Tempo
Obs: Este Slide contém comentários com os comandos SQL de seleção das fontes e os scripts ActiveX das dimensões, quando o script for necessário
Ellison Siqueira
SELECT CódigoDoCliente , NomeDaEmpresa, Cidade, PaísFROM Clientes
Ellison Siqueira
SELECT CódigoDoFornecedor, NomeDaEmpresaFROM Fornecedores
Ellison Siqueira
SELECT CódigoDoFuncionário, Nome, SobrenomeFROM Funcionários
Ellison Siqueira
'**********************************************************************' Visual Basic Transformation Script'************************************************************************' Copy each source column to the destination columnFunction Main()DTSDestination("Nome") = DTSSource("Nome") + " " + DTSSource("Sobrenome")Main = DTSTransformStat_OKEnd Function
Ellison Siqueira
SELECT CódigoDaTransportadora, NomeDaEmpresaFROM Transportadoras
Ellison Siqueira
SELECT P.CódigoDoProduto, P.Descontinuado, C.NomeDaCategoria, P.NomeDoProdutoFROM Produtos P INNER JOIN Categorias C ON P.CódigoDaCategoria = C.CódigoDaCategoria
Ellison Siqueira
'**********************************************************************' Visual Basic Transformation Script'************************************************************************' Copy each source column to the destination columnFunction Main()If DTSSource("Descontinuado").value = true thenDTSDestination("StatusProduto") = "Inativo"ElseDTSDestination("StatusProduto") = "Ativo"End IfMain = DTSTransformStat_OKEnd Function
Ellison Siqueira
select p.datadopedido as datafrom pedidos pwhere p.datadopedido is not nullunionselect p.datadeenvio as datafrom pedidos pwhere p.datadeenvio is not nullunionselect p.datadeentrega as datafrom pedidos pwhere p.datadeentrega is not null
Ellison Siqueira
'**********************************************************************' Visual Basic Transformation Script'************************************************************************' Copy each source column to the destination columnFunction Main()DTSDestination("Data") = DTSSource("data")DTSDestination("Ano") = Year(DTSSource("data"))DTSDestination("Mes") = Month(DTSSource("data"))if (Month(DTSSource("data")) <= 6) thenDTSDestination("Semestre") = "1º Semestre"elseDTSDestination("Semestre") = "2º Semestre"end ifMain = DTSTransformStat_OKEnd Function
Page 24
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Criação das transformações - salvar Pacote
Page 25
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Criação das transformações Repetir o mesmo para os Fatos
• Vendas• Estoque
Este Slide também possui comentários com instruções SQL
e Scripts ActiveX
Ellison Siqueira
SELECT [Detalhes do Pedido].NúmeroDoPedido, [Detalhes do Pedido].CódigoDoProduto, Pedidos.CódigoDoCliente, Pedidos.CódigoDoFuncionário, Produtos.CódigoDoFornecedor, Transportadoras.CódigoDaTransportadora, Pedidos.DataDoPedido, Pedidos.DataDeEntrega, Pedidos.DataDeEnvio, Pedidos.Frete, [Detalhes do Pedido].PreçoUnitário as PreçoUnitVenda, [Detalhes do Pedido].Quantidade, [Detalhes do Pedido].Desconto, Produtos.PreçoUnitário as PreçoUnitCompraFROM Transportadoras INNER JOIN (Produtos INNER JOIN (Pedidos INNER JOIN [Detalhes do Pedido] ON Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido) ON Produtos.CódigoDoProduto = [Detalhes do Pedido].CódigoDoProduto) ON Transportadoras.CódigoDaTransportadora = Pedidos.Via;
Ellison Siqueira
SELECT Produtos.CódigoDoProduto, Produtos.CódigoDoFornecedor, Produtos.PreçoUnitário, Produtos.UnidadesEmEstoqueFROM Produtos;
Ellison Siqueira
'**********************************************************************' Visual Basic Transformation Script'************************************************************************' Copy each source column to the destination columnFunction Main()DTSDestination("ValorEstoque") = DTSSource("UnidadesEmEstoque") * DTSSource("PreçoUnitário")Main = DTSTransformStat_OKEnd Function
Page 26
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Criação de Pacote para automação do processo O pacote deve
• (1) Excluir os dados do DW; • (2) Exportar os dados das tabelas de dimensão; e,• (3) Exportar os dados das tabelas de fato
É necessário• (1) A criação de uma conexão com a base SQL Server para
possibilitar apagar os dados;• (2) Um script SQL que apegue os dados;• (3) Em caso de sucesso na eliminação dos registros, chamar o
pacote de extração dos dados das dimensões; e,• (4) Em caso de sucesso na extração dos dados das tabelas de
dimensão, chamar o pacote de extração dos dados das dimensões.
Page 27
CIn/UFPE – Integração de Dados e Data Warehouse
Microsoft DTS
• Criação de Pacote para automação do processo
Aqui tem um comentário com o SQL para eliminar os dados das tabelas de
fato e dimensão
Ellison Siqueira
delete from fato_estoquedelete from fato_vendasDELETE FROM DIM_PRODUTOSDELETE FROM dim_clientesdelete from dim_transportadorasdelete from dim_fornecedordelete from dim_funcionario
Page 28
CIn/UFPE – Integração de Dados e Data Warehouse
Ferramentas ETL
Kettlehttp://kettle.pentaho.org/
Page 29
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Ferramentas Spoon Pan Chef Kitchen
Page 30
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Welcome to Spoon
Page 31
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Spoon
Page 32
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Mais opções ao usuário
Page 33
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• TransformaçõesPrimeiro é necessário criar
conexões ODBC para as bases de dados de entrada e saída
Page 34
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Assistente para conexão - Access
Page 35
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Assistente para conexão - Access
Page 36
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Assistente para conexão – SQL Server
Page 37
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Assistente para conexão – SQL Server
Page 38
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Conexões criadas e Transformação salva
Page 39
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• ETL Mini Dimensões
Page 40
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• ETL Dimensões
Page 41
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Componentes utilizados Input -> Input table Transform -> Select values Output -> Insert/Update Scripting -> Java Script Value Transform -> Calculator Join -> Database Join
Page 42
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Input Table
• Script SQL para Dimensões Cliente Fornecedor Funcionário Transportadora Produto Tempo
Informar a conexão
Este Slide possui os scripts SQL em
comentários
Ellison Siqueira
select * from clientes
Ellison Siqueira
select * from Fornecedores
Ellison Siqueira
select * from Funcionários
Ellison Siqueira
select * from transportadoras
Ellison Siqueira
select P.CódigoDoProduto, P.Descontinuado, C.NomeDaCategoria, P.NomeDoProdutoFROM Produtos P,Categorias Cwhere P.CódigoDaCategoria = C.CódigoDaCategoria
Ellison Siqueira
select p.datadopedido as datafrom pedidos pwhere p.datadopedido is not nullunionselect p.datadeenvio as datafrom pedidos pwhere p.datadeenvio is not nullunionselect p.datadeentrega as datafrom pedidos pwhere p.datadeentrega is not null
Page 43
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Select Values
Page 44
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Criar Relação entre componentes
Page 45
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Insert/Update
Page 46
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Java Script Value
• Script Java Script para Nome + Sobrenome Status Produto Manipula Datas
Este slide contém os scripts dentro de comentários
Ellison Siqueira
nome_completo = Nome.getString() + " " + Sobrenome.getString();
Ellison Siqueira
if (Descontinuado.getString() == "Y") {status_produto = "Inativo"}else{status_produto = "Ativo"}
Ellison Siqueira
if (Mes.getInteger() <= 6) {semestre = "1º Semestre"}else{semestre = "2º Semestre"}
Page 47
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Calculator
Page 48
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Database Join
Script Join Localização
Ellison Siqueira
select códigolocalizacao from dim_mini_clientewhere Cidade = ?and País = ?
Page 49
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• ETL Fatos Criar uma nova transformação (conexão e componentes)
para as tabelas de fato
• Scrits SQL Vendas Estoque
• Script Java Script ValorEstoque
Este Slide também possui os Scripts
• Scrits Join
Ellison Siqueira
SELECT [Detalhes do Pedido].NúmeroDoPedido, [Detalhes do Pedido].CódigoDoProduto, Pedidos.CódigoDoCliente, Pedidos.CódigoDoFuncionário, Produtos.CódigoDoFornecedor, Transportadoras.CódigoDaTransportadora, Pedidos.DataDoPedido, Pedidos.DataDeEntrega, Pedidos.DataDeEnvio, Pedidos.Frete, [Detalhes do Pedido].PreçoUnitário as PreçoUnitVenda, [Detalhes do Pedido].Quantidade, [Detalhes do Pedido].Desconto, Produtos.PreçoUnitário as PreçoUnitCompraFROM Transportadoras INNER JOIN (Produtos INNER JOIN (Pedidos INNER JOIN [Detalhes do Pedido] ON Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido) ON Produtos.CódigoDoProduto = [Detalhes do Pedido].CódigoDoProduto) ON Transportadoras.CódigoDaTransportadora = Pedidos.Via;
Ellison Siqueira
SELECT Produtos.CódigoDoProduto, Produtos.CódigoDoFornecedor, Produtos.PreçoUnitário, Produtos.UnidadesEmEstoqueFROM Produtos;
Ellison Siqueira
ValorEstoque = PreçoUnitário.getNumber() * UnidadesEmEstoque.getInteger();
Ellison Siqueira
select CódigoLocalizacao from dim_clienteswhere CódigoDoCliente = ?
Page 50
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Criação do Job de automação
Page 51
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Componentes Job Start Transformation
• Devem ser criadas as relações entre os componentes
Page 52
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Start
Page 53
CIn/UFPE – Integração de Dados e Data Warehouse
Kettle
• Transformation
Page 54
CIn/UFPE – Integração de Dados e Data Warehouse
?Ferramentas ETL
Dúvidas
Page 55
CIn/UFPE – Integração de Dados e Data Warehouse