cin/ufpe – integração de dados e data warehouse

Post on 07-Apr-2016

261 Views

Category:

Documents

31 Downloads

Preview:

Click to see full reader

TRANSCRIPT

CIn/UFPE – Integração de Dados e Data Warehouse

CIn/UFPE – Integração de Dados e Data Warehouse

Ferramentas de ETL

Por:Ellison Siqueira (erms)

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)

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

CIn/UFPE – Integração de Dados e Data Warehouse

Modelo Northwind

CIn/UFPE – Integração de Dados e Data Warehouse

Modelo Estrela Vendas

CIn/UFPE – Integração de Dados e Data Warehouse

Modelo Estrela Estoque

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

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

CIn/UFPE – Integração de Dados e Data Warehouse

Ferramentas ETL

Microsoft DTS

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.

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Criar um novo pacote e inserir as conexões

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Conexões Acces e SQL Server

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Criação das transformações

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Criação das transformações

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Criação das transformações

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Auxílio na seleção dos dados na fonte

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Criação das transformações

• Tipos de Transformações

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Transformação ActiveX Script

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Transformação ActiveX Script

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Transformação ActiveX Script

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

CIn/UFPE – Integração de Dados e Data Warehouse

Microsoft DTS

• Criação das transformações - salvar Pacote

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

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.

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

CIn/UFPE – Integração de Dados e Data Warehouse

Ferramentas ETL

Kettlehttp://kettle.pentaho.org/

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Ferramentas Spoon Pan Chef Kitchen

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Welcome to Spoon

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Spoon

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Mais opções ao usuário

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

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Assistente para conexão - Access

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Assistente para conexão - Access

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Assistente para conexão – SQL Server

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Assistente para conexão – SQL Server

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Conexões criadas e Transformação salva

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• ETL Mini Dimensões

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• ETL Dimensões

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

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

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Select Values

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Criar Relação entre componentes

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Insert/Update

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"}

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Calculator

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 = ?

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 = ?

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Criação do Job de automação

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Componentes Job Start Transformation

• Devem ser criadas as relações entre os componentes

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Start

CIn/UFPE – Integração de Dados e Data Warehouse

Kettle

• Transformation

CIn/UFPE – Integração de Dados e Data Warehouse

?Ferramentas ETL

Dúvidas

CIn/UFPE – Integração de Dados e Data Warehouse

top related