Seja bem-vindo ao Blog.
O objetivo hoje é mostrar como criar um DW com o Pentaho.
Pentaho é uma ferramenta open source que não tem custo de licenciamento, podendo ser utilizado para ETL, para projetos Big Data e automação de processos.
As principais vantagens de utilizar o Pentaho para criação de um DW, é a velocidade do desenvolvimento e manutenção.
Cenário
Vamos trabalhar com as seguintes tabelas:
1- Tabela de Clientes
2- Tabela de Produtos
3- Tabela de Pedidos Detalhada
4- Tabela de funcionários
5- Tabela de Pedidos
Com base nessas tabelas, serão criadas as tabelas dimensão e fato:
dCliente
dFuncionarios
dProduto
dCalendario
Que programa é esse que deixa a modelagem bonitinha:
É o Power Architect, ele te ajuda a entender os dados antes de começar a manipulá-los, deixando mais claro o relacionamento entre as tabelas. Ele permite exportar o modelo em pdf, com isso a modelagem fica salva para uso futuro.
É possível também exportar em html deixando a visualização muito mais detalhada.
No exemplo aqui retratado, será utilizado o mySQL como banco de dados, mas você pode conectar em outro de sua preferência.
Dimensão Cliente
Vamos começar com o step Table input que é utilizado quando queremos importar uma tabela armazenada em um banco de dados.
Dê 02 cliques no Table input, e execute as seguintes ações:
1- Selecione o step Table input e arraste para sua área de trabalho
2- Clique em New
3- Nomeie sua conexão
4- Escolha onde você quer conectar (local da sua base de dados), nesse caso mySQL
5- Insira os dados da sua conexão
6- Clique em teste para certificar que conectou
7- Em caso de sucesso deve abrir essa janela, em seguida você pode clicar em OK.
Em seguida:
- Clique em Get SQL select statement
- A janela aberta mostra as tabelas existentes no banco que conectamos, clique em customers
- Clique em OK.
Na janela aberta:
- Nomeie o step como Customers
- Veja que temos um script SQL que faz select do banco de dados
- Clicando em Preview você irá visualizar uma prévia dos seus dados
Agora:
- Clique em ▶ para executar
- Em seguida clique em Run
- Salve sua transformação como dimCustomers
O ticket verdinho ao lado do step é um indicativo de que os dados foram carregados, para visualizar como ficou a carga, clique em preview
Clicando em Step Metrics, ao lado do Preview Data, é possível ver a quantidade de dados:
- Lidos
- Escritos
- Entrada
- Saída
- Atualizados
- Rejeitados
- Erros
- Velocidade da consulta por linha
Note que há dados sem padrão, por exemplo, no endereço algumas linhas estão com o número após a descrição da rua, e em outras linhas esse número está antes da descrição. Selecione o step String operations, use o campo search para facilitar encontrar o step.
Relacione os steps:
Clique em Customers, segure o Shift, em arraste o mouse na direção do novo step String operations.
Dica: Sempre que inserir um novo step ele deve ser relacionado com o anterior.
Para tratar os campos de texto, siga os passos abaixo:
- Dê 02 cliques em String Operations,
- Depois clique em get fields
- Clicando em cima da linha address, dê um CRTL+C e CRTL+V para duplicar essa linha
- Nomeie uma das linhas do endereço como rua e outra como número
- Na coluna Trim type escolha a opção both para tirar os espaços de ambos os lados, e na coluna Lower/Upper escolha opção Upper para deixar todas as letras em maiúsculo
- Nos campos de address, na linha da rua remova os dígitos, selecionando remove, e na linha dos números mantenha apenas números selecionando only.
- Agora é só clicar em OK.
Dica: Ao duplicar o endereço e renomear como rua e número, são criadas 02 novas colunas, e a coluna address é mantida, os demais campos como não tem preenchimento no Out stream field, o Pentaho faz o tratamento na coluna já existente, ou seja, não cria novas colunas.
Lembrete: Sempre que terminar de configurar um step cliquem no botão ▶ Run para executar, e depois no Preview data para visualizar o resultado da execução, Ok ?.
Veja agora no preview que na coluna rua, temos ainda textos fora do padrão, por exemplo, ora é ponto, ora é virgula etc.
- Selecione o step Replace in string
- Digite rua em 4 linhas conforme abaixo
- Insira os caracteres que vamos substituir, um para cada linha do campo rua. Os caracteres são, ponto, vírgula, –, e ª
- Insira os caracteres que irá substituir o que foi informado no passo 3, nesse caso vamos deixar em branco (substituir por nada), em seguida pode clicar em Ok.
Pulo do Gato: Alguns step, ao fazer o relacionamento, pede que seja escolhido entre duas opções main output of step ou error handling of step. Nesses casos escolha a primeira opção.
Concatenar o endereço:
- Selecione o step Concat fields
- Configure o step informando: nome do step, nome do campo, tamanho e separador
- Selecione os campos rua e numero, colocando a rua com tipo string e numero como number, e em Trim Type selecione a opção both (os dois)
Para tratar os campos nulos, proceda da seguinte forma:
- Selecione o step If field value is null
- Nomeie o step
- Marque a opção Select value type
- Tipo String > será substituído por -1
Tipo Integer > será substituído por NÃO INFORMADO
Perceba que os valores nulos que continham na tabela Customer, não existem mais. Legal né.
Agora selecione apenas as colunas que serão utilizadas:
- Selecione o step Select values
- Clique em Get fields to select
- Mantenha apenas os campos (Customer_id, company_name, contact_name, contact_title, Endereco, city, region, postal_code, country, phone, fax). Se atente para o campo endereço que está renomeado para address.
Pulo do Gato: para mudar a ordem dos campos, selecione a linha clicando em cima do número correspondente a ela, segure o CTRL e use as setas para cima ou para baixo para a linha selecionada.
Crie o seu DW no banco de dados para armazenar as tabelas que foram tratadas no Pentaho.
Selecione o step Dimension lookup/update
- Nomeie o step: DimCustomer
- Nomeie a tabela: dim_customer
- Clique em Wizard
- Dê um nome para a conexão com o DW que acabamos de criar, aqui chamamos de DW_north mesmo
- Escolha o banco: mySQL
- Clique em NEXT
Coloque o nome da host: localhost
Coloque o nome do DW: DW_north
Coloque seu usuário e senha de acesso ao banco
Teste a conexão, clique em OK e em seguida finalizar.
Em Field in stream selecione o campo Customer_id, copie e cole dimension field
Em Technical key field selecione sk_customers
Em Version field escreva version
Em Date range start field selecione a opção date_from, marque a opção Use na alternative start date e selecione a opção System_date, em Table date range end selecione a opção date_to
Clique em fields
Clique em Get fields
Clique em SQL
No script SQL delete as últimas 02 linhas de código (CREATE INDEX), em seguida confira os tamanhos dos campos de VARCHAR, certifique-se de estar conforme abaixo:
Customer_id VARCHAR (5)
Company_name VARCHAR (36)
Contact_name VARCHAR (23)
Conatct_title VARCHAR (30)
address VARCHAR (50)
city_id VARCHAR (15)
region VARCHAR (13)
postal_code VARCHAR (9)
country VARCHAR (11)
phone VARCHAR (17)
fax VARCHAR (17)
Execute e confira no banco se carregou.
Se der algum erro, apague o hop (seta entre select values e DimCustomer) e crie o hop novamente e clique em OK.
Assim deve ficar suas transformações.
Clique em salvar.
Dimensão Produto
Vá em em Arquivo > Salvar Como > DimProducts > OK
- Note que a transformação mudou de nome
- Agora delete os steps da área indicada
De 02 cliques no step Customer
- Renomeie o step para Products
- Clique em Get SQL select statement
- Selecione a tabela de produto > OK > Sim
Na janela aberta, clique em Preview para ver uma prévia dos dados, confira os dados e pode clicar em OK. Em seguida execute o step.
Selecione o step Select values, clique em Get fields to select e mantenha apenas as colunas de product_id, product_name e quantity_per_unit.
Selecione o step If field value is null:
- Marque a opção select fields
- Clique em obter campos
- Configure conforme mostrado
Selecione o String operations, clique em get fields e execute as configurações conforme abaixo:
- Trim type: both (ambos)
- Lower/Upper: Upper
Agora selecione o step Table output.
Esse step faz carga full, ou seja, os dados serão apagados da tabela e carregados novamente.
- Nomeie o step: dimProducts
- Selecione o destino da carga: DW_north
- Nomeie a tabela a ser carregada: dim_products
- Marque a opção truncate table
- Selecione a aba database fields
- Clique em get fields
- Clique em SQL
- Inclua a Primary Key conforme destacado
- Informe qual é o número da primeira chave, no caso 1
- Clique em Executar > OK > Fecha > OK.
Assim deve ficar as transformações da dimProducts.
Clique em salvar.
Dimensão Funcionário
Com a transformação dim_products aberta:
Vá em em Arquivo > Salvar Como > DimEmployee > OK
Apague todos os steps, menos o primeiro.
Importe a tabela dimEmployee do banco de dados
Delete a coluna de notas, pois não vamos utilizar
Insira o step Concat fields: em name selecione as colunas last_name e first_name, em type selecione o tipo string, e em Length de um espaço (que é o separador).
Insira o step string operations
Delete as colunas first name e last name
Duplique a coluna adress e configure conforme mostrado
Adicione o step replace in string, selecione o campo rua em 3 linhas, e Search coloque um caractere em cada linha (ponto, vírgula e traço) clique em OK.
Adicione um concat fields para concatenar o em endereço.
Clicando em uma área em branco com o botão direito, selecione a opção propriedades, para criar uma variável.
- Clique em parâmetros
Parâmetro: ds; Valor padrão: NAO INFORMADO
Parâmetro: cd; Valor padrão: -1
Agora adicione o step if field value is null
Clique na coluna Replace by value e dê o comando CTRL + Espaço para abrir as opções, comece a digitar cd (nome da variável que criamos) e ela será facilmente encontrada.
Selecione a variável ao encontrá-la e dê enter.
A vantagem de utilizar parâmetro para tratar os campos nulos é que você altera todas as colunas da tabela de 01 única vez.
Insira o step Select values
Clique em Get fields to select
Mantenha apenas os campos mostrados abaixo.
Nesse mesmo step, na aba Meta-data, vamos tratar os campos de data.
Selecione os campos, birth_date e hire_date, em type coloque Date e em Format selecione dd/MM/yyyy.
Insira o Table output e carregue os dados para o DW_north.
No comando SQL configure seu script para que ele fique exatamente igual demonstrado abaixo.
Note que que incluímos a sk_employee e mudamos o número de caracteres de alguns campos do tipo varchar.
Staging da Tabela Fato
Salve a transformação dimCustomer
Em seguida:
Vá em salvar como > nomeie como stg_fato
Importe a tabela Orders
Mantenha apenas as colunas que iremos utilizar: order_id, Customer_id, emplyee_id, order_date, required_Date, shipped_Date, ship_via, e freight.
Copie e cole este step e importe a tabela Order Details.
Inclua um step sort rows e relacione com o step orders
Excute as configurações conforme abaixo
Repita o processo para o step Orders Details
Agora insira o step Merge join e relacione com os 02 steps Sort rows
Configure conforme mostrado abaixo:
- Selecione os steps que irá mesclar (Sort Order e Sort Order Details) e o tipo de join (INNER)
- Ao clicar em Get keys fields, irá trazer todos os campos de ambas as tabelas, delete os campos desnecessários, mantendo apenas o order_id.
Execute os steps.
Note que o resultado mostra o order_id das 02 tabelas, vamos excluir 01.
Insira o step select values e na aba remove, selecione o campo order_id_1
Aproveite esse step para ajustar os campos de data: Na aba Meta-data, selecione os campos order_date, required_date, shipped_date, em seguida coloque o tipo como date e o formato como dd/MM/yyyy.
Com o table output carregue essa tabela para o DW com o nome stg_fato_pedidos.
Nessa carga, não é necessário nenhum ajuste no scrip de SQL, apenas Execute e Feche.
Salve sua transformação stg_fato_pedidos.
Tabela Fato Oficial
Com a transformação stg_fato_pedidos salva, vá em salvar como e nomeie como fato_orders.
Delete todos os steps.
Insira o step Table Input > conecte no DW e importe a tabela stg_fato_pedidos
Em uma tabela fato, deve conter apenas os ids e os valores, OK?!
Insira um novo table input, e importe a tabela dimCustomer do DW.
No final do script, insira o comando order by 1
O objetivo agora é fazer um group by para considerar somente a última versão da tabela cliente, insira o step group by e relacione com a dimCustomer:
- Clique em Get Fields
- Apague a linha version na janela indicada
- Escolha o campo de agregação e o tipo (version e last value)
- Execute os step.
Agora volte no step table input e ajuste o script SQL, mantendo apenas as colunas sk_customers, version, e Customer_id.
Abra o step group by, clique em get fields, clear and add all.
Delete a linha do version destacada
O resultado dessa consulta deve ficar conforme mostrado na figura 52.
Agora apague o group by, e em seguida no step do table input, edite o script para ficar conforme mostrado abaixo:
Insira o step stream lookup e relacione com os steps table input dimCustomer e stg fato.
- Selecione o step de input: Input dimCustomer
- Selecione os ids que que relacionam: Customer_id
- Selecione o campo sk_custormers, em New Name coloque também sk_customers e o tipo deve ser inteiro.
No table input da tabela dimCustomers
Ajuste o script SQL conforme mostrado abaixo:
Insira o step database lookup:
- Nomeie o step
- Conecte no DW
- Escolha a tabela dim_employee
- Selecione os ids correspondentes entre si: employee_id
- Selecione o campo de retorno: sk_employee_id, e o tipo deve ser inteiro
Repita o processo do database lookup só que agora com a dim_products.
Insira o step calculator
Esse step nos dá mostra uma gama de cálculos prontos que podemos utilizar. Isso facilita o trabalho de aplicações DAX, uma vez que muitos cálculos podemos trazer pronto do banco.
Configure conforme abaixo:
Novo Campo: ValorTotal
Cálculo: A*B
Campo A: unit_price
Campo B: quantity
Tipo do Valor: Number
Com o select, mantenha apenas os campos necessários, conforme mostrado abaixo.
Use o table output para carregar a tabela fato final para o seu DW.
- Conecte no DW
- Nomeie como fato_pedidos
- Marque a opção truncate e specify database fields
- Clique em database fields
- Clique em get fields
No script SQL, ajuste para criar um id da fato.
E se der algum pau? O Pentaho irá te mostrar exatamente qual step deu erro, e com isso você ganha muita velocidade.
Agora você pode conectar o Power BI no mySQL e criar seus relatórios.
Por hoje é isso, abraços.
Léo.