Carregando dados com Apache HOP & Postgres
Tags: apachehop, dataengineering, postgres, tutorial
Published: 2024-05-09 18:08:00

## Pipeline 

Nesse artigo, vamos realizar um passo a passo, de como construir um pippeline de carga de dados utilizando a ferramenta [Apache HOP](https://hop.apache.org/). Nossa fonte de dados será um arquivo CSV, em seguida vamos realizar algumas transformações e carregar para uma tabela no nosso banco de dados Postgres.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l45qegu8lugjkp7umbch.png)
### Dataset

O nosso dataset é o [30000 Spotify Songs](https://www.kaggle.com/datasets/joebeachcapital/30000-spotify-songs) que possui informações de musicas que foram extraídas através da API do Spotify e disponibilizadas para download no [Kaggle](https://www.kaggle.com/) 

### Construção do pipeline

O primeiro transform utilizado é o  CSV file Input, onde é selecionado o diretório em que esta localizado o arquivo csv com os dados que iremos utilizar no pipeline. Depois de selecionado o arquivo, os dados devem aparecer no transform depois de selecionado a opção *Get Fields*.  


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/45pvh276pijfqa89bybb.png)

Uma vez carregado o arquivo, vamos fazer uma seleção dos campos que queremos utilizar. Nosso dataset conta com 23 colunas, mas vamos separar apenas 6 colunas para processar no pipeline e carregar para a tabela no postgres.
Com o trasnform *Select Values*, vamos a seleção dos campos que vamos utilizar, na aba *Meta-data*, clicando no botão *Get fields to change* vamos trazer os campos para o tranform e atribuir o tipo string aos campos de texto.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rv81wjkcu8o2zu252d0u.png)


Em seguida, utilizaremos o transform *String operations* para realizar transformações nos campos do tipo string, as tranformações de *Trim type* e *Lower/Upper* vão ser atribuídas aos campos. Ao atribuir a opção *both* a um dos campos, podemos repetir essa ação aos demais campos usando o botão *Copy the last edited cell values to all rows.* 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1sd5o87oh54nye8ystyq.png)

Agora que finalizamos as transformações, podemos fazer a conexão com o banco de dados e utilizar um tranform para realizar a carga dos dados. Primeiro precisamos configurar a conexão com o banco nos meta dados do *Apache Hop*, que pode ser acessado no canto superior esquerdo da interface.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oy4ip5t9modp891vvefy.png)

Do lado esquerdo da tela, vamos selecionar a opção *Relational Database Connection*, clicando com o botão direito do mouse e em seguida na opção new. Preencha os campos com as configurações da sua base de dados e teste a conexão, depois basta salvar, clicando no *x* para fechar a aba irá aparecer a opção para salvar antes de fechar.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9dye0x4hvc81lnhthpra.png)

Depois de configurado a conexão podemos incluir o transform *Table output*, que recebe as informações de conexão do banco e faz o mapeamento com os campos da tabela e do pipeline. Lembrando que, é necessário que sua tabela tenha sido criada no banco antes de utilizar esse tranform, e que os campos da tabela tenham tipos correspondentes aos campos do pipeline, que no nosso caso são dados do tipo string. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g595lt3a7aaz07pt75sf.png)

No nosso caso eu optei por usar os mesmos nomes do dataset original, para facilitar o reconhecimento dos campos. 

## Conclusão

Uma vez tendo esse processo de carga automatizado podemos pensar em novas etapas para o nosso projeto, podemos realizar novas transformações ou até alterar o banco e que queremos fazer a carga. 
Existem diversas opções de tranforms para utilizar e diferentes formas de utiliza-los em conjunto, mas para esse tutorial trouxe uma forma simplificado do que podemos fazer, pretendo explorar mais opções da ferramenta em posts futuros.