Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Esse tutorial foi escrito originalmente em inglês por María Carina Roldán da
Argentina e está disponível no site http://kettle.pentaho.org/ sob a licença de
"Atribuição-Uso ão-Comercial-Compartilhamento pela mesma Licença 3.0".
Introdução
Pentaho Data Integration (PDI, também chamado Kettle) é um componente da suíte do Pentaho responsável
pelos processos de Extração, Transformação e Carga (ETL). Apesar de ferramentas de ETL serem usadas em
projetos de data warehouse, PDI pode também ser usado para:
PDI é fácil de usar. Todos os processos são criados com uma ferramenta gráfica onde você especifica o que
fazer sem escrever nenhuma linha de código. Por conta disso você pode dizer que PDI é orientado a
metadado.
O PDI pode ser usado como uma aplicação independente ou como parte da suíte do Pentaho. Como uma
ferramenta de ETL, é a mais popular ferramenta open source disponível. PDI suporta um vasto conjunto de
formatos de entrada e saída de dados, incluindo arquivos texto, arquivos .xls (Excel) além de banco de dados
comerciais e open source. Além disso, a capacidade de transformação de dados do PDI permite que você
manipule dados com pouquíssimas limitações.
1 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
Através de um simples exemplo “Hello World”, esse tutorial mostrará como é fácil trabalhar com o PDI e
mostrará também o básico, preparando você para outras transformações mais complexas.
Instalando o Kettle
Você pode baixar o PDI aqui http://sourceforge.net/projects/pentaho/files/Data Integration/3.2.0-stable/.
Enquanto esse tutorial é traduzido e atualizado o Kettle está na sua versão 3.2.0, então o arquivo que deve ser
baixado é o pdi-ce-3.2.0-stable.zip para Windows e pdi-ce-3.2.0-stable.tar.gz para outras plataformas.
Pré-requisitos
O Kettle requer o runtime do Java para rodar (JRE), versão 1.5 ou mais nova. O JRE pode ser baixado
gratuitamente no site http://java.sun.com/.
Instalação
O PDI não requer instalação. Apenas descompacte o arquivo .zip dentro de uma pasta qualquer. Para
sistemas operacionais baseados no Unix é necessário fazer com que o script se torne executável usando o
seguindo comando:
cd Kettle
chmod +x *.sh
2 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
Introdução ao Spoon
O Spoon é a ferramenta gráfica com que se desenha e testa todo processo do PDI. Os outros componentes
executam os processos desenhados com o Spoon. No Spoon você constrói Jobs e Transformations. O PDI
oferece dois métodos de salvar seus arquivos:
Se o modo de repositório for escolhido, o mesmo deve ser criado na primeira vez que o Spoon é executado.
Se o método de arquivo for escolhido, os Jobs são salvos em arquivos de extensão .kjb e tranformations são
salvos em arquivos de extensão .ktr. Nesse tutorial é usado o modo de arquivo.
Iniciando o Spoon
O arquivo spoon.bat no Windows ou spoon.sh nos sistemas operacionais baseados no Unix, inicia o spoon.
Será exibida a janela de boas vindas. Vá ao menu Edit e clique em Options. Na janela de opções é possível
várias configurações gerais, inclusive características visuais. Caso algo for modificado é necessário iniciar o
Spoon novamente para que as mudanças tenham efeito.
Visão Geral
Vamos supor que você tenha um arquivo .csv contendo uma lista de nomes e é necessário criar um arquivo
.xml contendo cumprimentos para cada um dos nomes. Se o conteúdo do arquivo .csv é :
last_name, name
Suarez,Maria
Guimaraes,Joao
Rush,Jennifer
Ortiz,Camila
Rodriguez,Carmen
da Silva,Zoe
- <row>
<msg>Hello, Maria!</msg>
3 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
</row>
- <row>
<msg>Hello, Joao!</msg>
</row>
- <row>
<msg>Hello, Jennifer!</msg>
</row>
- <row>
<msg>Hello, Camila!</msg>
</row>
- <row>
<msg>Hello, Carmen!</msg>
</row>
- <row>
<msg>Hello, Zoe!</msg>
</row>
</Rows>
Preparando Ambiente
Antes de começar a construir a transformação, crie uma pasta para os arquivos desse tutorial. Nessa pasta
serão salvos todos os arquivos desse tutorial. Então crie um arquivo .csv como mostrado acima e salve o
arquivo como list.csv.
Criar a transformação
1. Clicar em New, selecionar Transformation. Também acessível através do menu File. E ainda através do
Ctrl-N
2. Selecionar o menu Transformation e clicar em Configuration.
3. Na janela seguinte, é possível definir várias configurações da transformação. Nesse caso, apenas dê um
nome e uma descrição para a transformação.
4. Salve a transformação na pasta criada para o tutorial com o nome de hello. Isso criará um arquivo
hello.ktr.
Um Step, ou passo em português, é menor unidade dentro de uma transformação. Uma larga variedade de
steps está disponível no Kettle. Esses steps estão agrupados em categorias como Input e Output além de
várias outras. Cada Step foi desenhado para completar uma função específica como ler um parâmetro ou
normalizar um conjunto de dados.
Um Hop é uma representação gráfica do dado transitando entre dois steps, com uma origem e um destino. O
dado que transita através do Hop consiste nos dados de saída do Step, opção identificada no Kettle como
Output Data. Esse mesmo dado é considerado o dado de entrada do Step destino, Input Data. Um Hop tem
apenas uma origem e apenas um destino, no entanto mais de um Hop pode ter como origem o mesmo Step.
Quando isso acontece, o dado de saída pode ser copiado ou distribuído para vários destinos. Também mais de
4 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
um Hop pode ter como destino o mesmo Step. Nesse caso, o Step destino deve ter a habilidade de fazer um
merge entre os dados de entrada de diferentes steps.
Para cada um desses itens, será usado um Step diferente, como mostrado abaixo:
Nesse exemplo, a relação entre tarefas a ser executadas e steps é de um para um, mas nem sempre ocorre
assim.
1. A esquerda da janela do Spoon fica a paleta de steps, Steps Palette. Selecione categoria Input.
2. Arraste o CSV file input e solte na área de trabalho a direita.
3. Selecione a categoria Scripting.
4. Arraste Modified JavaScript Value para a área de trabalho.
5. Selecione a categoria Output.
6. Arraste o Step XML Output para a área de trabalho.
Agora é necessário fazer a ligação entre o Step CSV file input com o Step Modified JavaScript Value. Para
isso crie um Hop:
1. Selecione o primeiro Step
2. Segure a tecla Shift e arraste o ícone para o segundo Step.
3. Pelo mesmo processo, faça a ligação entre Modified Java Script Value e o XML Output
5 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
Todo Step tem uma janela de configuração. Essa janela varia de acordo com a funcionalidade do Step e a
categoria a qual pertence. Por outro lado, o nome do Step é sempre exibido para todos os casos e deve ser
preenchido cuidadosamente, pois é o nome pelo qual o Step será reconhecido ao longo de todo o ETL.
6 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
5. No painel inferior é possível direcionar qualquer variável criada ou manipulada no código como campo
de saída. Nesse caso foi criada a variável msg, e para que a mesma seja incluída como dado de saída, é
preciso adicioná-la no grid:
7 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
1. Clique duas vezes no Step XML Output. Nessa janela deve ser configurado a localização e o nome do
arquivo de saída e quais dos campos serão incluídos no arquivo.
2. Dê o nome de File with Greetings para o Step.
3. No campo File, digite:
Hello
4. Clique em Get Fields na aba Fields para preencher o grid com o nome dos campos vindos do Step
anterior. Nesse caso deixe apenas a msg. Apague os campos name e last_name.
5. Salve a transformação.
8 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
Quando uma transformação é executada, quase todos os Steps são executados simultaneamente e
assincronamente. As linhas de dados fluem através dos Steps “cada uma por si“. Cada registro processado
deixa o Step de origem para o destino sem esperar pelos demais registros. Essa é uma característica
importante para se manter em mente.
O exemplo está quase completo. A transformação lê o arquivo de entrada, cria mensagens para cada registro
através do código javascript e envia as mensagens para o arquivo de saída. Esse é um pequeno exemplo com
poucos registros, por conta disso é difícil notar a característica assíncrona em ação no Kettle. Tenha em
mente que ao mesmo tempo em que um registro está sendo gravado no arquivo de saída, outro pode estar
saindo do primeiro Step da transformação.
9 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
3. Clique em QuickLaunch. Uma janela com uma amostragem dos dados de saída desse Step. Se a saída
está como esperada a transformação é pronta para ser executada.
4. Clique em Run.
5. O Spoon exibirá uma janela onde podem ser configurados parâmetros e o nível de log gerado pela
transformação, além de outras informações. Clique em Launch.
6. Uma nova janela será exibida. A aba de log contém registros da execução corrente.
Na aba de log escrito, as linhas informativas de output são mostradas. A última linha, caso a transformação
ocorra bem, será:
Não havendo nenhum erro, abra o arquivo gerado Hello.xml e verifique o conteúdo.
Pan
O Pan permite que transformações sejam executadas através de janelas de terminais. O arquivo de script é o
pan.bat no Windows ou pan.sh em outras plataformas. Esses arquivos ficam localizados na pasta de
instalação. Se o arquivo de script for rodado sem nenhum parâmetro, o mesmo retornará uma lista de
possíveis parâmetros e opções.
C:/Pentaho/Tutorial
ou
/home/PentahoUser/Tutorial
Se o comando foi executado corretamente a transformação rodará da mesma forma em que rodou no Spoon.
Nesse caso o log será exibido no terminal a menos que especificado um arquivo para ser escrito com o log. O
formato será ligeiramente diferente mas a informação é a mesma que foi exibida no ambiente gráfico.
10 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
Visão Geral
a) A transformação será armazenada numa nova pasta e o nome do arquivo será informado através de
parâmetro.
b) A existência do arquivo de entrada será validada.
c) O nome do arquivo de saída dependerá do nome do arquivo de entrada.
Receber parâmetro
Criar o arquivo de saída com os cumprimentos
Checar se o parâmetro não é nulo e abortar a transformação caso seja.
Checar se o arquivo existe e abortar a transformação caso não exista.
Essas tarefas serão completadas através de Job. Os Jobs são criados da mesma forma que transformações,
com componentes conectados através de Hops. Por isso se diz que Jobs são orientados a controle de fluxo. As
possibilidades de execução de um Job vão de verificar a existência de um arquivo ou tabela até envio de
emails. É possível, dentro dos Jobs, executar transformações ou outro Job. Como numa transformação, cada
componente pode ter vários Hops para vários destinos.
O processo será:
11 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
Preparando o ambiente
Nessa parte do tutorial, os arquivos de entrada e saída estarão numa nova pasta chamada Arquivos. Crie essa
pasta e copie o arquivo list.csv para o novo arquivo.
Para evitar que seja necessário escrever o caminho completo toda vez que se referencia a uma pasta ou
arquivo, é aconselhável criar uma variável contendo essa informação. Para isso edite o arquivo de
configuração kettle.properties localizado em C:\Documents and Settings\<usuário>\.kettle no Windows
XP/2000, C:\Profiles\<usuário>\.kettle no Windows Vista ou *~/.kettle em outras plataformas. Coloque a
linha abaixo no final do arquivo, mudando o caminho para a pasta criada para conter os arquivos.
FILES=/home/PentahoUser/Files
O Spoon lê este arquivo quando é iniciado, portanto para que a alteração tenha efeito é preciso reiniciar o
spoon.
As atividades são:
1. Criar a nova transformação
2. Modificar a transformação criada anteriormente.
3. Criar o Job.
1. Crie uma nova transformação da mesma forma que foi feito na primeira parte do tutorial. De o nome de
get_file_name.
2. Arraste os Steps abaixo para a área de trabalho, dê nomes a eles, e crie os Hops para conectá-los de
acordo com a imagem:
12 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
Execução
5. Clique em Run novamente mas não digite nenhum parâmetro. Dessa vez você verá a mensagem:
Perto do topo da janela será possível ver a mensagem de erro do Step abortado que indica que um erro
ocorreu e que a transformação falhou, como esperado.
Modificando a Transformação
13 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
Agora é hora de modificar a Transformação Hello para que comparar nomes de arquivos com seus
respectivos parâmetros. Se um parâmetro fosse foo, a transformação leria o arquivo foo.csv e criaria um
arquivo foo_with_greetings.xml. Isso ajudaria também a descartar as linhas em branco dentro do arquivo.
1. Abra a transformação Hello.ktr.
2. Abra a janela de configuração do Step CSV File Input.
3. Apague o conteúdo da caixa de texto Filename e pressione Ctrl-Spacebar para ver a lista das variáveis
existentes. Você deveria ver a variável FILES que foi adicionada no arquivo kettle.properties. Selecione isso
e adicione o nome da variável que foi criada na transformação que acabou de ser criada. Digite na caixa de
texto:
${FILES}/${MY_FILE}.csv
4. Clique em OK.
5. Abra a janela de configuração do Step XML Output.
6. Substitua o conteúdo da caixa de texto Filename por:
${FILES}/${MY_FILE}_with_greetings.xml
7. Clique OK.
8. Arraste o Step Filter Rows para área de trabalho e arraste-o novamente para em cima de do Hop que saí
do CSV Input (quando o Hop se tornar mais largo, solte Step). Isso conecta o novo Step na seqüência de
Steps existentes.
9. Selecione name para o campo, e IS NOT NULL como comparador.
10. Deixe a opção Send 'true' data to Step e Send 'false' data to Step em branco. Isso faz com que apenas as
linhas que atende a condição (as que contenham nome) passam para o próximo Step.
11. Clique em OK.
12. Clique em Save As e dê o nome de Hello_with_parameters para a transformação.
Executando a transformação
Para testar as mudanças feitas você dever ter certeza que a variável MY_FILE existe e que a mesma
contenha valor. Como essa transformação é independente da que cria a variável, será necessário criá-la
manualmente.
1. No menu Edit, selecione Set Environment Variables. Uma lista de variáveis aparecerá.
2. No final da lista, digite MY_FILE como nome da variável. Como conteúdo, digite o nome do arquivo
sem extensão.
3. Clique em OK.
4. Clique em Run.
5. Na lista de variáveis você verá a que foi criada. Clique em Launch para executar a transformação.
6. Por ultimo verifique a existência e conteúdo do arquivo de saída.
Criando o Job:
1. Clique em New e depois em Job.
2. A área de trabalho de Job será exibida.
3. Clique em Job e em Configuration.
4. Digite um nome e uma descrição.
5. Clique em Save. Salve o Job na pasta Tutorial com o nome de Hello.
14 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
Configurando os Steps:
1. Clique duas vezes o componente da primeira transformação.
2. No campo Transformation filename, digite get_file_name.ktr.
3. Por conta das transformações estarem na mesma pasta, você pode usar a variável de caminho do Job:
${Internal.Job.Filename.Directory}/get_file_name.ktr
4. Clique em OK.
${Internal.Job.Filename.Directory}/Hello_with_parameter.ktr
Nota: Lembre-se que a variável ${FILES} foi definida no arquivo kettle.properties e a variável
${MY_FILE} foi criada no componente que será executado antes desse.
Nota: Durante a execução, a ferramenta substitui o nome da variável por seu conteúdo. Por exemplo: "O
arquivo c:/Pentaho/Files/list.csv não existe.
Configurando Hops
Um componente Job Entry pode ser executado sem condição mesmo quando o componente anterior é
executado sem sucesso. Esse tipo de execução é representado por diferente cores nos Hops: Um Hop preto
indica que o próximo componente é sempre executado. Um Hop verde indica que o próximo componente é
executado apenas se o anterior for executado com sucesso. E um Hop vermelho indica que o próximo
componente será executado se o anterior falhar a sua execução.
Como conseqüência da ordem em que os componentes foram criados e ligados uns aos outros, todos os Hops
ficam com a cor preta. O passos serão executados da seguinte forma:
A primeira transformação vai ser executada sempre. (O Hop que vai do Start até esse componente é
15 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
preto)
Se a transformação falhar (Caso não exista um parâmetro) o Hop vermelho encaminha do Job para o
componente Abort Job.
Se a transformação for executada com sucesso, o Job é encaminhado para o Hop verde para a
verificação da existência do arquivo. Se essa falhar, será encaminhada para o componente Abort Job
através do Hop vermelho, se essa verificação for executada com sucesso, o Job será encaminhado
através o Hop verde para a transformação principal.
Quando o Job é executado, o Kettle segue a ordem dos componentes conectados através de Hops.A execução
se a seqüência montada. Cada componente é executado por vez fazendo com que os demais componentes do
tipo Job Entry aguardem a execução do componente anterior.
Na vida real, um Job pode resolver problemas relacionados a seqüência de transformações. Se você precisa
que uma transformação aguarde até que outra termine, você deve usar Jobs para isso.
Executando o Job
Para executar um Job primeiro deve ser informado o parâmetro. O único lugar que usa o parâmetro é na
transformação get_file_name, por isso passe os parâmetros da seguinte forma:
Se o arquivo de entrada foi o list.csv então o arquivo de saída deveria ser list_with_greetings.xml e deveria
estar na mesma pasta. Ache o arquivo e verifique o conteúdo.
Em caso de o parâmetro ser preenchido com o nome de um arquivo inexistente, o Job falhará e você verá:
Kitchen
O Kitchen é a ferramenta usada para executar Jobs a partir de janelas de terminais. O arquivo de script é o
kitchen.bat no Windows e kitchen.sh em outras plataformas. Esses arquivos são encontrados na pasta de
instalação. Executando o script sem nenhuma opção, o mesmo exibe uma lista das possíveis opções.
Para executar um Job, use o seguinte comando:
16 de 17 25/05/2010 16:39
Tutorial Kettle - Pentaho Data Integration http://www.ademargomes.com/index.php/artigos/56-turialkettle.html?t...
c:/Pentaho/Tutorial (Windows)
ou
/home/PentahoUser/Tutorial
<par> - parâmetro que a transformação esta esperando. Lembre-se que o parâmetro esperado é o nome do
arquivo de entrada sem o .csv no final.
Depois desse comando o Job será executado da mesma forma que seria no Spoon. Nesse caso o log será
escrito no terminal a menos que seja direcionada para um arquivo. Assim como na transformação, o formato
da informação mostrada é diferente mas o conteúdo básico é o mesmo.
Tente executar o Job sem parâmetro ou com um parâmetro invalido para ver se está funcionando de acordo
com o esperado. Também experimente o uso do Kitchen, tente usar diferente níveis de log e outras opções
disponíveis.
17 de 17 25/05/2010 16:39