Data

12 jun, 2020

Extraindo dados do e-mail com Pentaho – Spoon

Publicidade

Essa é sem dúvida uma das “ferramentas” mais importantes pra quem constantemente precisa obter dados em uma ponta, tratar e depois dar saída em outra ponta ou outras pontas. Quem já precisou fazer isso desenvolvendo em alguma linguagem de programação, sabe muito bem como é dispendioso a criação de um ETL (Extract, Transform and Load).

Neste artigo vamos direto ao ponto! Minha intenção é ajudar sem ocupar seu tempo com informações que podem ser encontradas na internet fazendo uma simples busca. Primeiro faremos o briefing para relatar o problema e nossa missão, depois passaremos a execução e por fim, teremos o debriefing, onde relataremos a execução da tarefa.

Para saber mais detalhes dos step ou outras informações, recomendo buscar na internet ou entrar em contato comigo, terei o maior prazer em ajudar.

Briefing

Temos o seguinte caso: nosso antigo sistema recebia as solicitações dos usuários apenas por e-mail, com a troca do sistema, não podemos perder o legado, então vamos criar um ETL para acessar as contas de e-mail e salvar as informações no banco de dados, cada campo do formulário corresponde a uma coluna na tabela.

Figura 1 - Formulário de Solicitação
Figura 1 – Formulário de Solicitação

Executando

1.º Transformação

Abra uma nova transformação e salve com o nome que quiser:

Figura 2 - Criando nova Transformação
Figura 2 – Criando nova Transformação

2º Adicionando step para conectar a caixa de e-mail

Nos steps de Input adicione o Email messages input a transformação.

Figura 3 - Adicionando Email messages input
Figura 3 – Adicionando Email messages input

2.1º Configurando step Email messages input

Obs.: Usaremos o Gmail, por este motivo, antes de continuar, você precisa configurar o Gmail para conseguir acesso. Acesse a conta do Gmail e busque por Acesso a app menos seguro está opção dever ser ativada.

Para a conta do Gmail vamos usar IMAP, se você estiver usando outro correio, precisa ver quais as configurações da sua caixa de e-mail.

Figura 4 - Configurando Email messages input
Figura 4 – Configurando Email messages input

2.2º Testando step Email messages input

Com tudo preenchido podemos testar a conexão clicando em Test connection.

Figura 5 - Testando Email messages input
Figura 5 – Testando Email messages input

2.3º Apontando o diretório da caixa de e-mail

Agora vamos na aba Settings para apontar o diretório na caixa de e-mail.
Dentro de Settings clique onde está circulado em vermelho na imagem abaixo, para abrir a lista de diretórios da caixa de e-mail.

Figura 6 - Apontando deretório Email messages input
Figura 6 – Apontando deretório Email messages input

2.4º Escolhendo campos da caixa de e-mail

Vamos pular a aba Filters porque não vamos usar neste momento.
Passamos para Fields, onde você deve clicar em Get fields para pegar todos os campos do e-mail.

Figura 7 - Campos do e-mail Email messages input
Figura 7 – Campos do e-mail Email messages input

2.5º Personalizando campos da caixa de e-mail

Ainda em Fields, vou excluir todas as linhas, mantendo apenas o corpo da mensagem e vou criar o EMAIL_INTEGRAL atribuindo o corpo do e-mail.

Figura 8 - Personalizando Campos do e-mail Email messages input
Figura 8 – Personalizando Campos do e-mail Email messages input

3º Adicionando step de filtro

Pesquise pelo step Filter rows na aba de Design, depois “arraste” o Filter rows para o canvas.

Figura 9 - Filtrando os e-mail's
Figura 9 – Filtrando os e-mail’s

Ligando (hopstep @gmail ao Filter rows:

Para tal, veja a forma mais simples: estando com o cursor em cima do step @gmail, clicar em “Shift” + botão esquerdo do mouse e levar o hop até o step Filter rows.

Figura 10 - Hop
Figura 10 – Hop

3.1º Configurando Filter rows

Funciona como uma função lógica, o e-mail que tiver a expressão “O número de sua solicitação é:” passarão adiante.
Filter rows possui duas saídas, True e False, neste momento vamos aproveitar apenas a saída True, mas em alguns casos também aproveitamos a saída False.

Figura 11 - Configurando Filter rows
Figura 11 – Configurando Filter rows

4º Pegando os campos que nos interessam usando Replace in string

Aqui vamos usar expressão regular para encontrar as informações que estamos querendo dentro do body. Obs.: Lembre-se que o Spoon foi desenvolvido em Java, então você precisa usar a expressão regular do Java.

Figura 12 - Configurando Replace in string
Figura 12 – Configurando Replace in string

5º Adicionando os valores que pegamos na transformação anterior e adicionando aos campos que estão nos Fields do Split separando por “|”

Figura 13 - Configurando Replace in string
Figura 13 – Configurando Split fields

6º Cadastrando as informações no Banco de Dados Table output

Adicione o step Table output depois ligue o hop nele e faça as configurações de banco de dados. Não precisaremos usar a aba Main options usaremos apenas a Database fields. Clique em SQL para gerar o CREATE TABLE usando os campos do fluxo (figura 14), depois basta clicar em Executar para o Pentaho criar a tabela no seu Banco de Dados. Tenha atenção com os tipos do campos que o Pentaho vai declarar na sua tabela, você pode mudar isso antes de executar.

Figura 14 - Configurando Replace in string
Figura 14 – Configurando Table output

Essa é a tela que será apresentada para o Pentaho criar a tabela com os campos do fluxo. Você pode editar qualquer campos antes de executar.

Figura 15 - Executando CREATE TABLE
Figura 15 – Executando CREATE TABLE

Debriefing

Conseguimos resolver o problema

Toda tarefa simples no PDI Spoon é complexa, mas vale muito a pena se você analisar todo código que você precisaria programar pra fazer algo semelhante (já precisei fazer inúmeras vezes e sei bem como é ). A manutenção fica muito mais amigável. Você não precisa ser desenvolvedor para usar o Spoon, mas dependendo da tarefa, isso será muito útil.

Sem dúvida, a parte mais desgastante aconteceu no step Replace in String, precisei relembrar expressão regular (lembrando que é regex para Java cafézinho). Os outros steps são bem simples, basta apenas saber o que realmente quer.