hop – Arruda – Data Consulting https://modelo6.augustomello.com.br Wed, 25 Sep 2024 12:08:07 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.8.3 https://modelo6.augustomello.com.br/wp-content/uploads/2025/08/cropped-Logo-Arruda-Consulting-2025-Picto-1b-32x32.png hop – Arruda – Data Consulting https://modelo6.augustomello.com.br 32 32 Loop com Apache Hop https://modelo6.augustomello.com.br/loop-com-apache-hop/ https://modelo6.augustomello.com.br/loop-com-apache-hop/#respond Wed, 25 Sep 2024 12:08:07 +0000 https://arrudaconsulting.com.br/?p=5738 Neste post compartilho com vocês duas maneiras de criar Loop utilizando o Apache Hop.

Objetivo:

Criar 2 modelos de loop que percorra uma pasta principal, acesse todas as subpastas dentro dela, e leia todos os arquivos XLSX encontrados em cada subpasta. O loop funcionará independe do número de subpastas que haja na pasta principal.

Neste exemplo eu crie uma pasta chamada Loops, uma subpasta chamada Empresas e dentro desta subpasta criei mais 3 subpastas (Empresa A, Empresa B, Empresa C).

Dentro de cada uma destas subpastas há o arquivo cliente.xls que será lido pelo loop que iremos implementar.

Formato do arquivo excel que será lido

Modelo de Loop 1 — Usando copy rows to result

PASSO 1: Criar uma transform Get subfolder names que irá pegar o nome das subpastas de uma determinada pasta.

Edite a transform e determine no campo Directory qual é o diretório raiz onde você obterá as informações. No nosso exemplo esse é o caminho:

C:\NILSON\CURSO_APACHE_HOP\Loops\Empresas

Após selecionar o diretório clique em !GetSubFoldersDialog… e depois em Preview Rows para visualizar as pastas

As informações listadas serão encaminhadas para um novo pipeline, onde cada linha processada executará uma tarefa específica, criando um loop automático para cada linha da planilha. A próxima transform Copy rows to result será responsável por gerenciar esse processo.

PASSO 2: Criar a transform Copy rows to result e ligar com a transform Get subfolder names e na sequencia editá-la.

Todo o pipeline de dados será passado para essa transform como resultado, permitindo a execução do próximo pipeline.

Execute a pipeline para testar se não erro.

Salvaremos essa pipeline com o nome de loop_2_passo1

PASSO 3: Criar uma nova pipeline incluindo a transform Get rows from result. Ela servirá para pegar as linha de resultado que vieram da pipeline anterior loop_2_passo1.

Edite a transform e defina quais são as informações que será aproveitada da pipeline.

Neste exemplo, utilizaremos o campo folderName, que contém o caminho completo da pasta que desejamos ler. Dentro dessa pasta, pode haver muitos arquivos. Essa informação é obtida ao realizar um preview na transformação Get subfolder names da pipeline loop_2_passo1, que será então passada para a nova pipeline.

Incluir em Fieldname o folderName e em Type como String.

Assim que obtida, essa informação ela será passada para o próximo step.

PASSO 4: Criar uma transform Write to log para acompanhar o processamento que será feito e ligá-la a transform anterior Get rows from result.

Definir no campo Field o campo folderName

PASSO 5: Criar uma transform Get file names e ligar a transform anterior. Essa transform entrará em cada pasta, listará e processará os arquivos contidos nela.

Edite a transform e marque o campo Is filename defined in a field? e em Get filename from field selecione folderName

PASSO 6: Criar uma transform Microsoft Excel Input para receber essas informações.

Edite a transform e em Spread sheet type (engine) marcar que o tipo do arquivo. Neste nosso exemplo os arquivos são xlsx.

1 — Marcar o item Accept filenames from previous transform

2 — Em Transform to read filenames from selecionar Get file names, para indicar que ele recebe o nome do arquivo através do step Get file names

3 — Em Field in the input to use as filename selecionar filename, que foi o nome do campo definido no step Get file names.

Selecione a aba Sheets e inclua o nome da aba do arquivo que será lido. Em Em nosso exemplo o nome da aba do nosso arquivo cliente.xlsx é Plan 1.

Selecione a aba Fields e inclua a estrutura do arquivo excel. Em nosso exemplo temos apenas duas colunas id_cliente e nome_cliente no arquivo cliente.xlsx.

PASSO 7: Criar uma nova transform Write to log para escrever o conteúdo do arquivo no log.

PASSO 8: Criar um workflow para permitir que o pipeline loop_2_passo1 passe informação para o pipeline loop_2_passo2.

Ligar a action Start à action Pipeline

Editar a pipeline e clicar no botão Browser em Pipeline: e selecionar o loop_2_passo1 e clicar em Yes.

PASSO 9: Agora criaremos uma nova pipeline repetindo o procedimento acima para o loop_2_passo2.

Editar a pipeline e clicar no botão Browser em Pipeline: e selecionar o loop_2_passo2 .

Importante marcar o item Execute for every result row para que seja executado em forma de loop executando o conteúdo do arquivo linha a linha. Por fim clique no botão OK e salve o workflow como loop2_exemplo.

PASSO 10: Clique em Executar para executar os dois pipelines e ver o resultado no log. Note pelo log que o processo leu a pasta principal, listou as subpastas e dentro de cada subpasta leu os dados do arquivo cliente.xlsx.

Loop na Empresa A

Loop na Empresa B

Loop na Empresa C

Modelo de Loop 2 — Pipeline Executor

Para esse modelo iremos aproveitar a pipeline loop_2_passo2, iremos salvá-la com um novo nome loop3_exemplo.

PASSO 1: Excluir os steps Get rows from result e Write to log, que não serão necessários.

PASSO 2: Editar a transform Get file names que irá pegar o nome das subpastas de uma determinada pasta e editar

Desabilitar o Is filename defined in a field para que a seja habilitada o Select files, para incluir a variável ${pasta}

Essa variável pasta será preenchida dinamicamente com no nome da pasta que contém o arquivo. O Get file names ficará encarregado de listar o arquivo e passar para a próxima transform.

PASSO 3: Criar uma nova pipeline e criar a transform Get subfolder names para pegar o nome da pasta que queremos.

editar a transform e copiar o caminho da pasta principal onde estão subpastas.

PASSO 4: Perceba que neste modelo de loop 2, eu não jogarei o resultado do step anterior em um step Copy rows to result, mas em um pipeline executor.

Criar uma transform Pipeline Executor para pegar o nome da pasta que queremos.

Neste exemplo o resultado irá para um pipeline executor

Para cada linha que for processado na pipeline principal também será executada a pipeline executor, ou seja, o loop será feito até o final do arquivo.

Editar a pipeline executor e clicar em Browser e pesquisar a pipeline loop3_exemplo.hpl

Definir Variable / Parameter name como “pasta” e em Field to use selecionar folderName e clicar em OK. Desta maneira o conteúdo do folderName será passado para a variável pasta.

Salve essa pipeline com o nome loop3Exemplo_pai

Passo 5: Execute o pipeline e acompanhe resultado pelo log.

Conclusão

Mostrei neste tutorial duas maneiras de fazer loop, utilizando o Apache Hop, sendo a última solução a mais performática.

Soluções estas que também se adaptam ao Pentaho.

Muito Obrigado.

Nilson Braga

Gostou deste post? Conecte-se comigo no linkedin

]]> https://modelo6.augustomello.com.br/loop-com-apache-hop/feed/ 0 Criando colunas condicionais no Apache Hop https://modelo6.augustomello.com.br/criando-colunas-condicionais-no-apache-hop/ https://modelo6.augustomello.com.br/criando-colunas-condicionais-no-apache-hop/#comments Tue, 24 Sep 2024 09:43:26 +0000 https://arrudaconsulting.com.br/?p=5729 É muito comum a gente criar colunas condicionais no nosso dia a dia, nem sempre teremos a informação já pronta da forma que precisamos.

Para quem trabalha com banco de dados deve estar mais acostumado a fazer esta tarefa utilizando If ou Case When, a lógica é exatamente  a mesma.

Neste Artigo irei mostrar como fazer isso de duas formas:

  • Simples.
  • E um pouco mais complexa.

Para este exemplo iremos ter duas colunas: Status e Categorias.

Começando pela simples iremos utilizar o Value Mapper para isso, basicamente é informar o valor origem e o valor Destino.


Nesse caso se a 3ª coluna: Target field name estive em branco, isso quer dizer que iremos substituir o valor na mesma coluna, como o tipo de dados é diferente, ou seja estamos lendo dados do tipo Inteiro e gerando uma coluna com dados textos, somos obrigado a criar uma nova coluna, pois daria erro de conversão do tipo de dados.

Quando é o mesmo tipo de dados não tem problema em utilizar a mesma coluna.


Simples não, essa é a forma fácil.

Agora vamos supor que a nossa coluna que iremos criar temos que combinar uma condição entre a coluna status e também a coluna categoria, então para isso o Valeu Mapper já não nos atende, iremos utilizar o Step: Java Script.

Pode parecer um pouco mais complexo mas também neste caso temos mais liberdade para criar da forma que preferir.

Iremos utilizar o seguinte script:

//Script here

var stat;

if(status == 1 && categoria == “Cliente” )

{
stat = “Ativo”;
}
else if (status== 0 && categoria == “Cliente”)

{
stat = “Inativo”;
}
else {

stat = null;
}

  • Se o status = 1 e categoria = Cliente  irá retornar o valor Ativo.
  • Se o status = 0 e categoria = Cliente irá retornar o valor Inativo.
  • Caso contrário nulo.


Vamos ver se irá funcionar?


E dessa forma a gente pode criar colunas utilizando condicionais no Apache Hop.
Quer aprender outros tratamentos de Apache Hop, veja a nossa aula com 2 horas de conteúdo:
Muito Obrigado e até o próximo artigo.
Time Arruda Consulting.
]]>
https://modelo6.augustomello.com.br/criando-colunas-condicionais-no-apache-hop/feed/ 2
Depoimentos de Alunos – Hopbase https://modelo6.augustomello.com.br/depoimento-hopbase/ https://modelo6.augustomello.com.br/depoimento-hopbase/#respond Sat, 25 May 2024 13:18:05 +0000 https://arrudaconsulting.com.br/?p=5645 Olá, tudo bem contigo?

Compartilhando o depoimento de alguns alunos que finalizaram o nosso Treinamento: Hopbase.

Neste treinamento os alunos aprenderam a criar um Produto de BI do zero, abordando as seguintes etapas:

  • Modelagem dos dados.
  • Staging Area.
  • Dimensões e Fatos.
  • Carga Full vs Carga Incremental.
  • Orquestração do ETL.
  • Documentação do DW.
  • Criação dos Relatórios e Dashboards.


O melhor curso de BI que já criamos, pois abordamos não somente o processo de ETL, como no nosso treinamento de Pentaho, mas todo o processo de BI.

São 15 horas de conteúdo em mais de 50 aulas, confira os módulos:

Quer aprender a criar um Produto de BI utilizando somente ferramentas gratuitas? E com 20% de Desconto com uma empresa parceira do Apache Hop.

Link Hopbase

Cupom: PRE.

Muito Obrigado.

Time Arruda Consulting.

]]>
https://modelo6.augustomello.com.br/depoimento-hopbase/feed/ 0
Como obter o último dia do mês anterior no Hop/Pentaho https://modelo6.augustomello.com.br/como-obter-o-ultimo-dia-do-mes-anterior-no-hop-pentaho/ https://modelo6.augustomello.com.br/como-obter-o-ultimo-dia-do-mes-anterior-no-hop-pentaho/#respond Fri, 23 Feb 2024 15:58:55 +0000 https://arrudaconsulting.com.br/?p=5550 Olá, tudo bem contigo?

Hoje o artigo de hoje é compartilhar contigo uma forma de obter o último dia do mês anterior, de uma forma simples, e objetiva.

Essa solicitação é muito comum recebermos das áreas de negócios principalmente da área financeira quando ocorre o fechamento.

Para este exemplo, irei trazer 3 steps:

Seria possível fazer somente com o step Formula? Sim mas achei que era uma boa oportundiade trazer estes dois steps para poder agregar mais conteúdo ao artigo.

Iremos inciar o pipeline com o Get system info para obter a informação de sysdate,


No Step formula iremos utilizar esta data de sysdate para gerar a coluna que precisamos, o último dia do mês anterior.

ultimo_dia_mes_anterior ->   EOMONTH([data_hoje],-1)

O formula seria semelhante ao DAX pra quem trabalha com Power BI, aonde temos uma séria de funcções a nossa disposição para extrair ainda mais valor dos dados.


Importante que a coluna seja criada utilizando o tipo de dados: Date.
E assim temos exatamente o resultado que queríamos.


Para finalizamos esta tarefa agora iremos utilizar o Select Values para formatar a data para o formato que já estamos acostumado a utilizar: DD/MM/YYYY,
O Select Values é o step que utilizamos tanto para selecionar quais colunas permanecem ou não no pipeline e também onde conseguimos converter os tipos de dados das colunas e também alterar o formato.


E assim finalizamos esse demanda, aonde utilizamos 3 steps:
  • O 1º para buscar a data de sysdate.
  • o 2º para gerar a coluna com o último dia do mês anterior.
  • O 3º para converter o formato dos campos de data.


Muito Obrigado e até o próximo artigo.
Rafael Arruda.
]]>
https://modelo6.augustomello.com.br/como-obter-o-ultimo-dia-do-mes-anterior-no-hop-pentaho/feed/ 0
Proteja dados sensíveis com Hop https://modelo6.augustomello.com.br/criando-uma-coluna-md5-para-proteger-dados-sensiveis/ https://modelo6.augustomello.com.br/criando-uma-coluna-md5-para-proteger-dados-sensiveis/#comments Sat, 17 Feb 2024 20:45:04 +0000 https://arrudaconsulting.com.br/?p=5539 Olá, tudo bem contigo?

Há um tempo átras muito tem se falado sobre LGPD.

E com os diversos vazamentos de dados que diversas empresas já sofreram, esse tema vem se tornando cada vez mais importante dentro das empresas e especificas nas áreas de dados.

Nesse artigo irei trazer um exemplo de como podemos proteger os dados sensíveis  utilizando Apache Hop / Pentaho.

nesse exemplo teremos o nome de um colaborador e em vez de armazenar o nome, iremos criar uma coluna utilizando o tipo: MD5, e armazenar uma string hexadecimal no lugar do nome do colaborador.

    Iremos utilizar o step: add a checksum para esta função, informando as seguintes opções:

    • Tipo MD5.
    • Resultado utilizando o Tipo Hexadecimal.
    • Nome da coluna que será criada.
    • Coluna utilizada como referência para gerar o campo hash.


    Ao executar o pipeline temos a coluna nome e a coluna hash, dessa forma em vez de armazenar o nome do colaborador podemos ter este valor hash, uma abordagem simples e muito eficaz na maioria dos casos para preservar dados sensíveis como nome, email e telefone por exemplo, dados pessoais.


    Muito Obrigado e até o próximo artigo.
    Rafael Arruda.
    ]]>
    https://modelo6.augustomello.com.br/criando-uma-coluna-md5-para-proteger-dados-sensiveis/feed/ 4
    Automatizando o seu pipeline no Apache Hop. https://modelo6.augustomello.com.br/agendamento-de-tarefas-no-windows-com-apache-hop/ https://modelo6.augustomello.com.br/agendamento-de-tarefas-no-windows-com-apache-hop/#comments Sun, 11 Feb 2024 13:14:38 +0000 https://arrudaconsulting.com.br/?p=5515 Olá, tudo bem contigo?

    A ideia deste artigo é poder te ajudar a implementar o teu pipeline de dados, pois nada adianta você desenvolver todo o ETL, e ficar executando de forma manual, não faz sentido.

    Como podemos agendar um pipeline desenvolvido no Apache Hop?

    Bom, temos algumas formas de fazer isso. A forma mais simples seria utilizando hop-run, onde criamos um arquivo .bat no Windows ou .sh no Linux.

    Para projetos maiores, talvez seja necessário uma solução própria de orquestração de dados, como por exemplo:

    • Apache Airflow.
    • Jenkins.
    • Dagster.
    • Rundeck.

    Segue o link da documentação oficial do hop-run no site do Hop: Link Documentação

    Segundo a documentação, podemos utilizar o seguinte script como exemplo:

    hop-run.bat -j samples -r local -f ${PROJECT_HOME}/transforms/switch-case-basic.hpl

    Na documentação verá que temos alguns parametros muito interessantes para utilizar no Hop Run.

    Conseguimos executar um mesmo pipeline para projetos diferentes, ambientes, configurações de execução,  particularmente eu gostei das opções que o hop-run oferece.

    Sobre configuração de execução temos um artigo que explicamos a diferença de executar o teu pipeline local e via Hop-Server.

    Criei o seguinte Pipeline para utilizar como exemplo neste artigo:


    Neste ETL, basicamente estamos lendo duas tabelas, fazemos o join e por último gravamos o resultado em uma nova tabela.

    Uma vez que temos o pipeline testado e funcionando.

    Tabela nova criada e com os seus respectivos dados carregados.


    Agora iremos criar o script .bat para este nosso pipeline que acabamos de criar e validar.

    C:\hop\hop-run.bat -j hopbase -r local -f C:\Hop\config\hopbase\test_job.hpl

    Agora vamos testar este script abrindo a linha de comando do Windows, ou abrir o executar e digitar cmd e clicar em Ok.

    Agora basta copiar o comando e verificar se o pipeline será executado no prompt de comando.


    Maravilha, pipeline executado via linha de comando.

    Próximos passos:

    1. Criar uma pasta Jobs no Disco Local(C:\).
    2. Criar um arquivo test.bat copiando o script que utilizamos para executar via linha de comando.
    3. Executar o script .bat clicando duas vezes no arquivo.

    Agora que temos a certeza de que o nosso script .bat está funcionando, vamos para a última etapa do nosso artigo.

    Abrir o Agendador de tarefas do Windows e criar uma tarefa para executar de forma automática.

    Para finalizar, crie uma tarefa, escolha qual a frequência que essa tarefa será executada, uma vez ao dia, de hora em hora.

    E depois na aba Ação selecione o script .bat que criou.

    E pronto o teu pipeline está agendado e executando de forma automática.

    Espero que este artigo tenha te ajudado.

    Muito Obrigado e até o próximo artigo.

    Rafael Arruda.

     

    ]]>
    https://modelo6.augustomello.com.br/agendamento-de-tarefas-no-windows-com-apache-hop/feed/ 7
    Removendo acentos com Pentaho /Hop https://modelo6.augustomello.com.br/removendo-acentos-com-pentaho-hop/ https://modelo6.augustomello.com.br/removendo-acentos-com-pentaho-hop/#respond Sun, 04 Feb 2024 16:04:00 +0000 https://arrudaconsulting.com.br/?p=5487 Olá,

    Tudo bem contigo?

    Quantas vezes já tivemos que remover os acentos de alguma palavra específica, utilizando replace, por exemplo ou até mesmo utilizando o próprio SQL para isso.

    Uma forma bem mais prática de fazer isso é utilizando o step: “User defined Java expression”, este step existe tanto no Pentaho quando no Apache Hop.


    No 1º step, iremos utilizar o Datagrid para escrever algumas palavras que possuem acentuação, e com a expressão abaixo, iremos criar a coluna: sem_acentos removendo todos os acentos que a coluna palavra possui:

    org.apache.commons.lang3.StringUtils.stripAccents(palavra)

    A grande vantagem é que dessa forma, com uma única expressão, garantimos que diversos tipos de acentos serão removidos.


    E após executar o ETL ficou assim os dados.


    Mais um artigo que saiu da comunidade #pentarruda.

    Espero que este artigo tenha ajudado.

    Muito Obrigado.

    Rafael Arruda.

    ]]>
    https://modelo6.augustomello.com.br/removendo-acentos-com-pentaho-hop/feed/ 0
    Resolvendo erro de data com valores nulos no Hop https://modelo6.augustomello.com.br/resolvendo-erro-de-data-com-valores-nulos-no-hop/ https://modelo6.augustomello.com.br/resolvendo-erro-de-data-com-valores-nulos-no-hop/#comments Mon, 15 Jan 2024 13:20:14 +0000 https://arrudaconsulting.com.br/?p=5468 Olá,

    Tudo bem contigo?

    Recentemente um dos nossos alunos encontrou um problema no Apache Hop, ao ler dados de uma tabela o Hop traz normal os dados porém as colunas com tipo Timestamp ele retorna como dados nulos.

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Para resolver isso basta fazermos uma alteração na conexão do banco de dados.

    Iremos marcar essas duas opções na Aba Advanced, depois só clicar no X ao lado do nome da conexão, neste caso “north”.

     

     

     

     

     

     

     

    Feito isso, agora vamos fazer o teste novamente para ver se agora retorna os dados de data também de forma correta igual está no banco de dados.

     

     

     

     

     

     

     

    E dessa forma já podemos dar sequência no nosso pipeline.

    Muito Obrigado e até o próximo artigo.

    ]]>
    https://modelo6.augustomello.com.br/resolvendo-erro-de-data-com-valores-nulos-no-hop/feed/ 4
    1ª turma do Hopbase Finalizada https://modelo6.augustomello.com.br/1a-turma-do-hopbase-finalizada/ https://modelo6.augustomello.com.br/1a-turma-do-hopbase-finalizada/#respond Sun, 12 Mar 2023 22:10:17 +0000 https://arrudaconsulting.com.br/?p=5162 Olá, tudo bem contigo?

    Que treinamento meus amigos que tivemos nesses últimos 2 sábados, uma turma realmente íncrivel.

    O Hopbase surgiu com o propósito de poder proporcionar para as empresas criarem suas soluções de B.I sem precisar gastar um centavo com licenças, e aos profissionais que tiverem esse conhecimento conseguem agregar ainda mais valor as empresas e começarem a fazer as suas primeiras consultorias, conquistar os seus primeiros clientes, um conteúdo para os nossos alunos mudarem de patamar mais uma vez com a Arruda Consulting.

    Temas abordados:

    • O que é o Hopbase?
    • O que é Business Intelligence.
    • Preparando o ambiente.
    • Criando um projeto e os seus ambientes(DEV,QA,PRD)
    • Conectando o Apache Hop num banco de dados.
    • Tratando os dados com Apache Hop sem utilizar uma linha de código.
    • Integrando dados do Chat GPT no Hop via API.
    • Automatizando a integração do Chat GPT de forma dinâmica.
    • Aprendendo a trabalhar com variaveis e parametros no Hop.
    • Instalação do Hop Server.
    • Integrando o Apache Hop com o Hop Server.
    • Agendando o ETL para executar de forma agendada.
    • Criando um pipeline para carregar as tabelas da Stage em um único ETL.
    • O que é o Metabase?
    • Analisando dados com o Metabase.
    • Qual a importância do Data Discovery e como ele pode impactar os projetos de B.I.
    • Relacionando dados, agrupando e criando métricas no Metabase.
    • Criação de gráficos.
    • Criando o nosso primeiro painel.
    • Criando um Sub-Dashboar e também um Sub-report.
    • Criando uma solução de dados near real-time.

    Tudo isso em 2 sábados, 16 horas de conteúdo.

    Gostaria muito de agradecer aos mais de 30 alunos que fizeram desse novo treinamento tão íncrivel!!

    Muito Obrigado!!

    ]]>
    https://modelo6.augustomello.com.br/1a-turma-do-hopbase-finalizada/feed/ 0
    Como Instalar o Hop Server? https://modelo6.augustomello.com.br/como-instalar-o-hop-server/ https://modelo6.augustomello.com.br/como-instalar-o-hop-server/#respond Sat, 11 Mar 2023 10:22:06 +0000 https://arrudaconsulting.com.br/?p=5139 Olá, tudo bem contigo?

    Nesse artigo iremos compartilhar contigo como subir o serviço do Hop Server.

    Primeiramente iremos abrir o cmd, ir até a pasta aonde o nosso hop está instalado e executar o seguinte comando.

    hop-server servidor porta

    Nesse exemplo irei subir o Hop Server no meu computador local e irei utilizar  a porta 8081.

     

     

     

     

     

     

     

     

    Agora que o nosso serviço do Hop Server iniciou, agora é só abrir o navegador e acessar o endereço localhost:8081.

    Irá pedir um usuário e senha, como padrão do Hop, isso pode ser alterado também é cluster para usuário e senha.

    E assim que logar é só clicar em show status e irá aparecer a imagem abaixo:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Pronto, Hop-Server iniciado e agora já conseguimos executar nossos pipelines e workflows a partir do nosso Apache Hop Local.

    Quer Aprender como Executar o pipeline no Apache Hop e ele executar no teu Hop-Server?

    Só clicar no link abaixo:

    https://arrudaconsulting.com.br/executando-um-pipeline-no-hop-server-atraves-do-apache-hop/

    Muito Obrigado e até o próximo artigo!!

    ]]>
    https://modelo6.augustomello.com.br/como-instalar-o-hop-server/feed/ 0