Alura > Cursos de Programação > Cursos de Automação e Produtividade > Conteúdos de Automação e Produtividade > Primeiras aulas do curso n8n para devs: otimizando o processo de ETL

n8n para devs: otimizando o processo de ETL

Projeto e dados do Sheets - Apresentação

Apresentando o instrutor e o curso

Bem-vindo a mais um curso aqui na Alura. Sou Ricardo Bugan, Diretor Operacional, e serei o instrutor neste curso.

Explicando o objetivo do curso

Neste curso, continuaremos nossa jornada com o N8n, com o objetivo de aliviar a carga de trabalho do nosso back-end. Vamos transformar um processo de ETL, que normalmente seria realizado pelo back-end, em um workflow no N8n. Dessa forma, poderemos integrar várias fontes de dados diferentes e transformá-las em uma base de dados.

Detalhando o processo de ETL e as ferramentas utilizadas

Em nosso caso aqui, no BigQuery, teremos três tabelas: a tabela de clientes, a tabela de produtos e a tabela de vendas. Vamos extrair dados brutos de arquivos, de um banco de dados SQL, de um arquivo CSV, de um arquivo JSON, de um Excel e de um arquivo XML. O objetivo é transformar todos esses dados, realizar as junções necessárias e reorganizá-los do modelo transacional para um modelo mais adequado de banco de dados de análise, que é o modelo de banco de dados em estrela.

Concluindo com expectativas e resultados esperados

Teremos muitas coisas para aprender e realizar no N8n, como trabalhar e processar os dados para retirar esse processo de ETL do seu back-end. Assim, ao final, você poderá ter um dashboard ou os dados preparados para que alguém na sua equipe possa criar um dashboard.

Esperamos você no curso!

Projeto e dados do Sheets - Conhecendo o projeto e fontes de dados

Introduzindo o desafio de ETL no N8n

Após termos realizado uma série de eventos, workflows e automações para nossa equipe de desenvolvimento, temos agora um novo desafio e uma nova possibilidade dentro do N8n: trabalhar com um processo de ETL. É comum que várias empresas possuam todo o processo de código, back-end, front-end e base de dados funcionando para que o sistema opere corretamente. No entanto, em algum momento, algum time, geralmente o gerencial, desejará realizar uma análise dos dados disponíveis, como verificar as vendas do último mês, identificar a página mais acessada ou avaliar a saúde do negócio como um todo.

Para isso, muitas vezes, o banco de dados transacional que utilizamos na aplicação, onde o back-end realiza consultas diretas, não é o mais adequado para análise de dados. Primeiramente, porque isso sobrecarregaria o back-end com uma série de consultas que costumam ser bastante pesadas, o que não é ideal. Mesmo que se utilize um replica set para isolar essa carga do banco de dados transacional, a organização e a normalização dos dados nesse banco não são ideais para análise de dados em um BI, por exemplo.

Transformando dados para análise

Portanto, nosso objetivo é realizar um processo de transformação de dados, convertendo o modelo transacional do banco de dados de produção para um modelo adequado para análise de dados. Aproveitando que o N8n oferece diversas conexões com várias ferramentas, vamos explorar neste curso como carregar dados de diferentes fontes, como XML, JSON e CSV, utilizando todas as ferramentas disponíveis para integrar dados de várias origens, o que também é uma situação bastante comum.

Além do nosso banco de dados transacional, que utilizaremos em SQL, podemos integrar diferentes fontes de dados, como arquivos XML, JSON e Excel. O objetivo é consolidar todas essas informações em um Data Warehouse, organizando-as adequadamente para que possam ser consumidas por ferramentas de BI.

Focando no tratamento e inserção de dados

Neste curso, não abordaremos a partir do BI, mas focaremos no tratamento dos dados e na inserção em um banco de dados. Todo o processo será interessante, e veremos como o N8n pode facilitar esse trabalho, atuando como uma ferramenta de ETL. Caso não haja outra ferramenta disponível ou o time seja restrito, o N8n pode ser uma boa opção para realizar processos de ETL.

Contextualizando os dados e fontes

Para contextualizar, temos um cadastro de clientes exportado como Excel, simulando informações provenientes desse formato. Também possuímos dados da empresa em uma pasta do drive, além de um JSON com produtos, cidades, coordenadas, regiões e estados em diferentes formatos: JSON, CSV e XML. Precisamos organizar esses dados, por exemplo, associando siglas de estados aos seus nomes e regiões no Brasil.

No caso de cidades e coordenadas, temos a latitude e longitude de cada cidade, informações essenciais para visualizações em mapas no BI. Quanto aos nossos clientes, o endereço está em uma única linha de texto, não separado. A ideia é tratar esses dados para que possamos ter a cidade, o estado, a região e o logradouro separados, facilitando o trabalho do BI.

Preparando dados para o BI e Data Warehouse

Utilizaremos essas informações e traremos outros arquivos e dados ao longo do curso. A base será composta por arquivos em um drive, que carregaremos no N8n, além de um banco de dados SQL, que exploraremos mais adiante. Nosso objetivo é preparar esses dados de forma que atendam às expectativas do BI e do Data Warehouse. Vamos explorar essa mudança de paradigma na organização de bancos de dados.

Projeto e dados do Sheets - Carregando dados de Clientes

Criando o workflow no N8n

Para começar, vamos ao time de desenvolvimento e criar um novo workflow no N8n, na seção destinada ao time de desenvolvimento. Nesse workflow, vamos renomeá-lo para não esquecermos. Chamaremos de "processo ETL para clientes e produtos", pois trabalharemos com produtos e notas fiscais. A ideia é preparar os dados de notas fiscais, produtos e clientes para cruzá-los e obter uma visão de qual produto está se saindo melhor, qual não está, qual cliente compra mais, qual região compra mais, entre outros tipos de análise que o time de negócios solicitou.

Inicialmente, vamos configurar o gatilho como manual. Ele poderia ser agendado ou via Webhook, mas optamos por deixá-lo manual, pois não precisamos de nenhum input específico, como data ou informações de Webhook. Queremos apenas algo que inicie o processo e puxe todas as informações.

Buscando e tratando dados no Google Sheets

Vamos então buscar as linhas do cadastro de clientes e começar a tratar os endereços. Utilizaremos o Google Sheets para isso. Vamos buscar as linhas do Google Sheets. Caso não tenhamos credenciais, será necessário logar com a conta do Google Sheets. O recurso será uma planilha de um documento, e a operação será get rows. O documento será acessado pela URL, que deixaremos fixa. Ao colar a URL, ele nos mostrará a lista de planilhas disponíveis. Como temos apenas uma página, que é a de clientes, vamos buscá-la.

Existem algumas opções disponíveis, mas não precisaremos delas, pois a planilha não é grande. Se executarmos agora, ele trará 57 itens. No entanto, se tivermos uma planilha muito grande, pode ser necessário filtrar. Por exemplo, podemos adicionar um filtro na coluna de endereço ou vendedor, ou ainda, pegar apenas um cliente para tratamento. Isso é útil para testar a automação com poucos dados antes de rodar com 100% dos dados.

Tratando e separando dados de endereço

No nosso caso, não será necessário, pois a base é pequena. No entanto, ocorreu um erro de "Service Unavailable", indicando que o Google Sheets estava indisponível por um momento, mas já voltou. Agora, temos o output com todas as linhas e colunas do cadastro.

Uma das primeiras ações será tratar a questão do endereço. Atualmente, o endereço está misturado, com rua, nome do estado e sigla do estado juntos. Queremos separar esses dados em campos distintos, pois no BI, organizar e visualizar apenas os estados pode ser interessante. Precisamos quebrar a coluna de endereço em mais colunas: uma para o Logradouro, outra para a sigla do estado e uma para o nome da cidade.

Utilizando expressões para dividir o endereço

Felizmente, a forma como a informação foi salva nos dá uma dica de como proceder. Todos os endereços seguem um padrão: Logradouro, hífen, nome da cidade, outro hífen e o estado. Podemos pegar essa string e fazer um split, transformando-a em um array.

Para realizar essa separação, utilizamos a expressão {{ $json.ENDERECO.split('-') }}. No entanto, percebemos que o separador correto é " - ", então ajustamos a expressão para {{ $json.ENDERECO.split(' - ') }}. Isso nos permite dividir o endereço em três partes: logradouro, cidade e sigla do estado.

Agora que temos o endereço dividido, podemos acessar cada parte individualmente. Utilizamos as seguintes expressões para isso:

Reorganizando e filtrando os dados

É importante destacar que o split retorna um array. No campo, devemos especificar o tipo da variável como array também, caso contrário, ele converterá o array de volta para string. Vamos manter o nome do campo como endereço por enquanto. Ao executar, podemos ver que há 57 itens. Utilizando o esquema, fica mais fácil visualizar que o endereço foi transformado em três itens de texto: endereço 0, endereço 1 e endereço 2, representando as posições dos elementos.

Já começamos a transformação, mas os dados ainda estão organizados em um único campo. Vamos agora transformá-los em campos que façam sentido. Podemos renomeá-los no primeiro EditFields, mas será mais interessante criar um segundo nó, também chamado de Set. Neste nó, puxaremos individualmente os campos. Podemos fazer isso pegando o ponto endereço 0 no nó anterior e renomeando para Logradouro, Cidade e Sigla. Assim, teremos os campos organizados da maneira desejada.

Finalizando a organização dos dados

Embora pudéssemos configurar esses três campos na aula anterior, preferimos deixá-los separados para tratar o formato do dado, realizar o split e filtrar alguns campos. Não queremos todos os campos do Output, apenas alguns: endereço, ID do cliente e nome do cliente. Informações como vendedor, nome do vendedor e segmento não são necessárias, conforme indicado pelo pessoal do BI. Portanto, não carregaremos essas informações no Data Warehouse, apenas as essenciais.

Para acessar o ID do cliente e o nome do cliente, utilizamos as expressões:

O primeiro EditFields atua como filtro de informações e tratamento da string. O segundo EditFields realiza apenas a renomeação e reorganização dos campos. Aqui, selecionamos os itens desejados dos endereços. Ao executar, teremos 57 itens, mas apenas Logradouro, Cidade e Sigla. Queremos todos os outros campos, exceto o campo Endereço, que já foi dividido conforme desejado. Ao clicar no checkbox "Incluir os Outros Campos de Input" e executar novamente, todos os campos são incluídos, exceto o Endereço, que não queremos. Selecionamos a opção "Quero todos menos o que eu selecionar" e executamos novamente, obtendo o formato desejado: ID do Cliente, Cliente, Logradouro, Cidade e Sigla.

Assim, extraímos as informações necessárias do cadastro no Excel, excluindo as desnecessárias e organizando o endereço de forma útil. Carregamos o arquivo, temos os clientes e agora precisamos carregar um arquivo XML com regiões e estados para combinar essas informações com as dos clientes.

Sobre o curso n8n para devs: otimizando o processo de ETL

O curso n8n para devs: otimizando o processo de ETL possui 146 minutos de vídeos, em um total de 38 atividades. Gostou? Conheça nossos outros cursos de Automação e Produtividade em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Automação e Produtividade acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas