ETL – De uma API Rest para o MySQL utilizando Pentaho – Parte 2

Olá! Neste artigo mostrarei como fazer uma extração simples de uma API Rest para o Pentaho. Vamos utilizar uma API do IBGE com informações de localidades do Brasil, além de ser aberta é muito bem documentada (quem dera todos dados do governo fossem assim), o que vai nos ajudar bastante . Este conjunto de dados é formado por: Regiões, Unidades da Federação, Mesorregiões, Microrregiões e Cidades.

Para quem ainda não acompanhou na Parte 1 eu apresentei um pouco da ferramenta e alguns conceitos importantes para começar a trabalhar com ela. Caso você já tenha conhecimento com o Pentaho PDI esta segunda parte é bem tranquila, vou criar uma transformação que acessará uma API Rest, e salvará seus resultados, por enquanto, em uma planilha. Vamos lá!

Entendendo a API

Esta API que vamos utilizar é um ótimo exemplo da importância da documentação, ela descreve todos os métodos disponíveis, parâmetros necessários e retorno esperado. Isto é importante pois não precisamos “adivinhar” o que foi pensado do outro lado. Por exemplo, vamos obter todos os estados do Brasil, por exemplo, na imagem abaixo conseguimos ver que devemos utilizar o método GET, a url da chamada e o retorno esperado.

Dados da API sobre as Unidades da Federação
Dados da API sobre as Unidades da Federação

Extraindo os dados

Hora de colocar a mão na massa, ao iniciar o Pentaho é necessário criar uma nova transformação (File > Novo > Transformação – No meu caso está misturado inglês com português mesmo). Existem várias opções de entradas de dados para uma transformação, que podem ser acessadas na aba Design, dentro da pasta Input.

Certo, então a API retorna os dados em JSON basta escolher o step JSON Input, correto? Não é bem assim. Este step será utilizado mais a frente, antes é necessário definir a URL que será utilizada e criar uma conexão com a API, para então utilizar os dados e ainda, selecionar os campos que queremos.

Como assim definir a URL? Já não temos? Sim, porém o Pentaho receberá este valor a partir de um campo, então vamos começar pelo step Generate Rows, dentro da pasta Input. Adicione este step a transformação e então clique sobre ele duas vezes para editarmos, primeiro vamos dar um nome mais amigável, vou colocar “Definição da Url API”, vou deixar o limite em 1, pois só quero gerar uma linha, e na tabela abaixo vou preencher a linha 1 na coluna nome com “urlAPI”, na coluna tipo com “String” e na coluna valor vou deixar a URL da nossa API. Pronto, criamos o campo urlAPI que contém o endereço da nossa API, veja abaixo como ficou:

Criando campo de definição da Url da API
Criando campo de definição da Url da API

Agora vamos criar a conexão com nossa API, abra a pasta Lookup e selecione o step REST Client e adicione a transformação. Antes de editá-lo vamos criar um vínculo com o step anterior, para isto segure a tecla “Shift” e clique e mantenha pressionado o mouse sobre o step “Definição da Url API”, agora vá arrastando até o step que acabamos de criar, a seta do hop (ligação entre steps) indica a direção do fluxo da informação.

Conexão entre steps

Agora abra o step da conexão com a API para editarmos as suas configurações, vamos começar trocando o nome, vou deixar “Conexão API”, na aba “General” ficam os campos que precisaremos alterar, caso queira maiores informações você pode consultar a documentação oficial do step. Vamos marcar a opção “Accept URL from field?” e logo abaixo escolher o campo que contém a nossa URL, no caso é o urlAPI que definimos no step anterior. No campo HTTP method vamos deixar a opção GET, já em Application type vamos alterar para a opção JSON. Nesta janela temos uma seção chamada Output fields, nela é possível indicar o nome de campos que receberão informações que serão utilizadas nos steps seguintes, vou trocar o valor do campo Result field name para estados, os demais vou deixar em branco pois não serão necessários.

Criando conexão com a API Rest

Transformação dos dados

Nesse step definimos que o retorna da nossa API virá dentro do campo estados, agora sim vamos utilizar o step JSON Input para transformar os dados deste resultado. Adicione este step a transformação e faça um hop com o step da conexão com a API, agora vamos editar este step. Vou colocar o nome como “Transformação JSON”, como vamos receber os dados de um step anterior marque a opção “Source is from a previous step” e no campo abaixo escolha a opção “estados”. Como não queremos que string completa do Json seja passada adiante vamos marcar o campo “Do not pass field downstream”. Agora vamos clicar na aba Fields e então precisamos adicionar os campos que queremos, esta parte é importante conhecermos o retorno para saber como definir o Path correto de cada campo, vamos ver um exemplo do retorno da nossa API:

Exemplo de retorno da API
Exemplo de retorno da API

Nossa API retorna uma array com 27 objetos, para definir o Path do nosso campo temos que montar uma expressão que indique o caminho para chegar até ele, então para obtermos o campo id temos que colocar o seguinte:

$.[*].id

Vamos entender esta expressão, sempre iniciamos com o sinal “$” e utilizamos o “.” para separar elementos, o “[*]” indica que queremos percorrer uma array, no caso nossos elementos estão todos dentro de uma array, e por fim o nome do campo do objeto json. E para recuperar o id da região? Como é um objeto podemos apenas referenciar o caminho completo até o campo. Nossos campos ficaram assim:

Campos da extração do JSON
Campos da extração do JSON

Já podemos iniciar nossa transformação e ver como está ficando nosso resultado através do Painel de execução de resultados, que fica logo abaixo. Antes tempos de salvar nossa transformação, no File selecione a opção Save e escolha um local para salvar a transformação. Agora clique no botão play, ou acesse o menu Action e escolha a opção Run, abre-se a janela Executar uma transformação, clique no botão Run.

Execução da transformação
Execução da transformação

Repare nos indicadores verdes sobre os steps, isso indica que foram concluídos com sucesso. No painel Execution Results podemos ver os logs que foram gerados, muito útil em caso de erros, as métricas da tranformação e dos steps e na última aba, Preview data, podemos ver o resultado gerado em cada step, ao selecionar algum o resultado gerado até ele é exibido, na figura acima o último step está selecionado. O resultado está trazendo a coluna urlAPI replicada em todas as linhas pois o Pentaho gera uma junção de todos os valores dos steps anteriores, mas não vamos usar esta coluna daqui para frente, então vamos utilizar o step Select Values, dentro da pasta Transform.

Neste step podemos selecionar as colunas que vamos utilizar ou remover quais não queremos passar a diante. Faça um hop com o step anterior e edite-o, vou colocar o nome de Remoção urlAPI, na aba Remove, escolha o campo urlAPI e clique em OK. Vamos executar a transformação novamente e ver que a nossa alteração deixou o resultado mais limpo:

Resultado da remoção do campo urlAPI
Resultado da remoção do campo urlAPI

Carga dos dados

Ao final do nosso tutorial vamos carregar nossos dados em um SGBD, no caso o MySQL, porém agora vamos salvar nossos dados em uma planilha para conhecermos, também, esta funcionalidade do Pentaho. Na aba Output ficam todas as opções de saída da nossa exportação, agora vamos utilizar a Microsoft Excel Writer, arraste-a para a transformação e fação um hop com o último step. Vamos abrir este step para editá-lo:

Exportação para Excel
Exportação para Excel

Vou deixar o nome do step como “Exportação Planilha”, no campo filename indicamos o caminho e o nome do arquivo (sem extensão), em alguns campos do Pentaho podemos utilizar variáveis, que podem ser criadas ou alguma de sistema. Neste caso queremos que a exportação fique na mesma pasta da transformação então vamos utilizar o seguinte path:

${Internal.Entry.Current.Directory}/exportacao-estados

A variável do Pentaho ${Internal.Entry.Current.Directory} guarda a pasta atual da transformação desta forma  o arquivo será salvo na mesma pasta do arquivo da transformação. Para ver outras variáveis basta teclar CTRL + Espaço dentro de algum campo que aceite este tipo de informação, são os que possuem ao lado um símbolo de um sinal de $ dentro de um losango azul.

Vamos utilizar a extensão xls, mas algum outro tipo poderia ser escolhido. Outro ponto que vamos trocar é o nome da planilha, dentro do campo Sheet name, vou deixar Estados. Agora vamos definir os dados que vão entrar na planilha, clique na aba Content, podemos escolher os campos dos passos anteriores para colocar na planilha, como já fizemos esse tratamento no step anterior vamos apenas clicar no botão “Obter campos” e todos os campos serão adicionados.

Vamos executar a transformação e ver o resultado:

Resultado da exportação do Pentaho
Resultado da exportação do Pentaho

Conclusão

Neste post realizamos um processo de ETL completo de informações a partir de uma API, neste caso são dados que não mudam com frequência, mas em dados que são constantemente atualizados este trabalho poderia ser automatizado gerando grande economia de tempo. Fica como desafio você fazer uma transformação para obter dados de outros métodos da API, na próxima parte vamos persistir os dados em uma base do MySQL. Espero que tenha te ajudado e instigado a sua curiosidade sobre os outros “Inputs” e “Outputs” do Pentaho, explore a ferramenta e traga as suas dúvidas!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *