> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Envie dados em fluxo para o ClickHouse usando pipelines de dados do NiFi

# Conectar o Apache NiFi ao ClickHouse

export const CommunityMaintainedBadge = () => {
  return <div className="CommunityMaintainedBadge">
            <div className="CommunityMaintainedIcon">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256">
                <path d="M244.8,150.4a8,8,0,0,1-11.2-1.6A51.6,51.6,0,0,0,192,128a8,8,0,0,1-7.37-4.89,8,8,0,0,1,0-6.22A8,8,0,0,1,192,112a24,24,0,1,0-23.24-30,8,8,0,1,1-15.5-4A40,40,0,1,1,219,117.51a67.94,67.94,0,0,1,27.43,21.68A8,8,0,0,1,244.8,150.4ZM190.92,212a8,8,0,1,1-13.84,8,57,57,0,0,0-98.16,0,8,8,0,1,1-13.84-8,72.06,72.06,0,0,1,33.74-29.92,48,48,0,1,1,58.36,0A72.06,72.06,0,0,1,190.92,212ZM128,176a32,32,0,1,0-32-32A32,32,0,0,0,128,176ZM72,120a8,8,0,0,0-8-8A24,24,0,1,1,87.24,82a8,8,0,1,0,15.5-4A40,40,0,1,0,37,117.51,67.94,67.94,0,0,0,9.6,139.19a8,8,0,1,0,12.8,9.61A51.6,51.6,0,0,1,64,128,8,8,0,0,0,72,120Z"></path>
            </svg>
        </div>
            Mantido pela comunidade
        </div>;
};

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<CommunityMaintainedBadge />

<a href="https://nifi.apache.org/" target="_blank">Apache NiFi</a> é um software de código aberto para gerenciamento de fluxos de trabalho, projetado para automatizar o fluxo de dados entre sistemas de software. Ele permite criar pipelines de dados de ETL e vem com mais de 300 processadores de dados. Este tutorial passo a passo mostra como conectar o Apache NiFi ao ClickHouse tanto como origem quanto como destino e como carregar um conjunto de dados de exemplo.

<Steps>
  <Step title="Reúna as informações de conexão" id="1-gather-your-connection-details">
    Para se conectar ao ClickHouse via HTTP(S), você precisa das seguintes informações:

    | Parâmetro(s)              | Descrição                                                                                                         |
    | ------------------------- | ----------------------------------------------------------------------------------------------------------------- |
    | `HOST` and `PORT`         | Normalmente, a porta é 8443 ao usar TLS ou 8123 quando não se usa TLS.                                            |
    | `DATABASE NAME`           | Por padrão, há um banco de dados chamado `default`; use o nome do banco de dados ao qual você deseja se conectar. |
    | `USERNAME` and `PASSWORD` | Por padrão, o nome de usuário é `default`. Use o nome de usuário apropriado para o seu caso de uso.               |

    Os detalhes do seu serviço do ClickHouse Cloud estão disponíveis no console do ClickHouse Cloud.
    Selecione um serviço e clique em **Connect**:

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/cloud-connect-button.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=ec0a298a33ca841e947fa5e8bae47362" alt="botão Connect do serviço do ClickHouse Cloud" width="998" height="932" data-path="images/_snippets/cloud-connect-button.webp" />
      </Frame>
    </div>

    Escolha **HTTPS**. Os detalhes de conexão são exibidos em um comando `curl` de exemplo.

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/connection-details-https.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=cb0fbd98aa2b5b7ca484c9f53395ee07" alt="detalhes de conexão HTTPS do ClickHouse Cloud" width="1320" height="1184" data-path="images/_snippets/connection-details-https.webp" />
      </Frame>
    </div>

    Se você estiver usando ClickHouse autogerenciado, os detalhes de conexão são definidos pelo administrador do seu ClickHouse.
  </Step>

  <Step title="Baixe e execute o Apache NiFi" id="2-download-and-run-apache-nifi">
    Para uma nova instalação, baixe o binário em [https://nifi.apache.org/download.html](https://nifi.apache.org/download.html) e inicie executando `./bin/nifi.sh start`
  </Step>

  <Step title="Baixe o driver JDBC do ClickHouse" id="3-download-the-clickhouse-jdbc-driver">
    1. Acesse a <a href="https://github.com/ClickHouse/clickhouse-java/releases" target="_blank">página de releases do driver JDBC do ClickHouse</a> no GitHub e procure a versão mais recente do JDBC
    2. Na release, clique em "Show all xx assets" e procure o arquivo JAR que contenha a palavra-chave "shaded" ou "all", por exemplo, `clickhouse-jdbc-0.5.0-all.jar`
    3. Coloque o arquivo JAR em uma pasta acessível ao Apache NiFi e anote o caminho absoluto
  </Step>

  <Step title={<>Adicione o Controller Service <code>DBCPConnectionPool</code> e configure suas propriedades</>} id="4-add-dbcpconnectionpool-controller-service-and-configure-its-properties">
    1. Para configurar um Controller Service no Apache NiFi, acesse a página NiFi Flow Configuration clicando no botão de "engrenagem"

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_01.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=3ecb50806baacf0177cdde10d0bea34c" size="sm" border alt="Página NiFi Flow Configuration com o botão de engrenagem destacado" width="564" height="409" data-path="images/integrations/data-ingestion/etl-tools/nifi_01.webp" />

    2. Selecione a aba Controller Services e adicione um novo Controller Service clicando no botão `+` no canto superior direito

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_02.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=e49f17a3ccf81855ddf6f33ae71f8b2d" size="lg" border alt="Aba Controller Services com o botão de adicionar destacado" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_02.webp" />

    3. Procure por `DBCPConnectionPool` e clique no botão "Add"

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_03.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=a214a72eb65b893a71426c349c6851a4" size="lg" border alt="Caixa de diálogo de seleção de Controller Service com DBCPConnectionPool destacado" width="1999" height="1287" data-path="images/integrations/data-ingestion/etl-tools/nifi_03.webp" />

    4. O `DBCPConnectionPool` recém-adicionado ficará no estado Invalid por padrão. Clique no botão de "engrenagem" para iniciar a configuração

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_04.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=5bc4d67491b1e5958664762878c41a87" size="lg" border alt="Lista de Controller Services mostrando o DBCPConnectionPool inválido com o botão de engrenagem destacado" width="1893" height="607" data-path="images/integrations/data-ingestion/etl-tools/nifi_04.webp" />

    5. Na seção "Properties", insira os seguintes valores

    | Propriedade                                | Valor                                                                                    | Observação                                                       |
    | ------------------------------------------ | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
    | URL de conexão com o banco de dados        | jdbc[https://HOSTNAME:8443/default?ssl=true](https://HOSTNAME:8443/default?ssl=true)true | Substitua HOSTNAME na URL de conexão conforme necessário         |
    | Nome da classe do driver do banco de dados | com.clickhouse.jdbc.ClickHouseDriver                                                     |                                                                  |
    | Localizações do driver do banco de dados   | /etc/nifi/nifi-X.XX.X/lib/clickhouse-jdbc-0.X.X-patchXX-shaded.jar                       | Caminho absoluto para o arquivo JAR do driver JDBC do ClickHouse |
    | Usuário do banco de dados                  | default                                                                                  | Nome de usuário do ClickHouse                                    |
    | Senha                                      | password                                                                                 | Senha do ClickHouse                                              |

    6. Na seção Settings, altere o nome do Controller Service para "ClickHouse JDBC" para facilitar a identificação

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_05.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=869cce96c0ee8ccd527695c8dea21af7" size="lg" border alt="Caixa de diálogo de configuração do DBCPConnectionPool mostrando as propriedades preenchidas" width="1586" height="1184" data-path="images/integrations/data-ingestion/etl-tools/nifi_05.webp" />

    7. Ative o Controller Service `DBCPConnectionPool` clicando no botão de "raio" e depois no botão "Enable"

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_06.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=2460399dc3113d995786c373f7df4d37" size="lg" border alt="Lista de Controller Services com o botão de raio destacado" width="2878" height="812" data-path="images/integrations/data-ingestion/etl-tools/nifi_06.webp" />

           <br />

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_07.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=485f45409ead4ff9cfb316e8ee2bc8d9" size="lg" border alt="Caixa de diálogo de confirmação para ativar o Controller Service" width="1586" height="1172" data-path="images/integrations/data-ingestion/etl-tools/nifi_07.webp" />

    8. Verifique a aba Controller Services e confirme que o Controller Service está ativado

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_08.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=b7d9e1ce84d3bbd46d913e940847a610" size="lg" border alt="Lista de Controller Services mostrando o serviço ClickHouse JDBC ativado" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_08.webp" />
  </Step>

  <Step title={<>Ler dados de uma tabela usando o processador <code>ExecuteSQL</code></>} id="5-read-from-a-table-using-the-executesql-processor">
    1. Adicione um processador `ExecuteSQL`, junto com os processadores upstream e downstream apropriados

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_09.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=abf11db5bb1dc248a233669a23aef33e" size="md" border alt="Canvas do NiFi mostrando o processador ExecuteSQL em um fluxo de trabalho" width="768" height="316" data-path="images/integrations/data-ingestion/etl-tools/nifi_09.webp" />

    2. Na seção "Properties" do processador `ExecuteSQL`, insira os seguintes valores

       | Propriedade                                      | Valor                         | Observação                                                   |
       | ------------------------------------------------ | ----------------------------- | ------------------------------------------------------------ |
       | Serviço de pool de conexões com o banco de dados | ClickHouse JDBC               | Selecione o Controller Service configurado para o ClickHouse |
       | consulta SQL SELECT                              | SELECT \* FROM system.metrics | Insira sua consulta aqui                                     |

    3. Inicie o processador `ExecuteSQL`

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_10.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=81d02e73ee6ca1d543015bc0667eb442" size="lg" border alt="Configuração do processador ExecuteSQL com as propriedades preenchidas" width="858" height="220" data-path="images/integrations/data-ingestion/etl-tools/nifi_10.webp" />

    4. Para confirmar que a consulta foi processada com sucesso, inspecione um dos `FlowFile` na fila de saída

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_11.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=270caae3211e7b81b50d1e309aba8606" size="lg" border alt="Caixa de diálogo de listagem da fila mostrando FlowFiles prontos para inspeção" width="1956" height="794" data-path="images/integrations/data-ingestion/etl-tools/nifi_11.webp" />

    5. Mude a visualização para "formatted" para ver o resultado do `FlowFile` de saída

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_12.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=1dc1c90d3bb71ab84465021653fddadf" size="lg" border alt="Visualizador de conteúdo do FlowFile mostrando os resultados da consulta na visualização formatada" width="1762" height="1500" data-path="images/integrations/data-ingestion/etl-tools/nifi_12.webp" />
  </Step>

  <Step title={<>Grave em uma tabela usando <code>MergeRecord</code> e <code>PutDatabaseRecord</code> processor</>} id="6-write-to-a-table-using-mergerecord-and-putdatabaserecord-processor">
    1. Para gravar várias linhas em um único insert, primeiro é necessário mesclar vários registros em um único registro. Isso pode ser feito usando o processador `MergeRecord`

    2. Na seção "Properties" do processador `MergeRecord`, insira os seguintes valores

       | Property                   | Value               | Remark                                                                                                                |
       | -------------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------- |
       | Leitor de registros        | `JSONTreeReader`    | Selecione o leitor de registros apropriado                                                                            |
       | Gravador de registros      | `JSONReadSetWriter` | Selecione o gravador de registros apropriado                                                                          |
       | Número mínimo de registros | 1000                | Altere para um número maior para que o número mínimo de linhas seja mesclado em um único registro. O padrão é 1 linha |
       | Número máximo de registros | 10000               | Altere para um número maior que "Número mínimo de registros". O padrão é 1.000 linhas                                 |

    3. Para confirmar que vários registros foram mesclados em um só, examine a entrada e a saída do processador `MergeRecord`. Observe que a saída é um array com vários registros de entrada

       Entrada

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_13.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=2ccc4198a02b0b3b7402ee79e5ae12c8" size="sm" border alt="Entrada do processador MergeRecord mostrando registros individuais" width="624" height="306" data-path="images/integrations/data-ingestion/etl-tools/nifi_13.webp" />

       Saída

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_14.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=0b02a554dceeb6c594fd800d04dcfb89" size="sm" border alt="Saída do processador MergeRecord mostrando array mesclado de registros" width="707" height="501" data-path="images/integrations/data-ingestion/etl-tools/nifi_14.webp" />

    4. Na seção "Properties" do processador `PutDatabaseRecord`, insira os seguintes valores

       | Property                                      | Value            | Remark                                                                                                                                     |
       | --------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
       | Leitor de registros                           | `JSONTreeReader` | Selecione o leitor de registros apropriado                                                                                                 |
       | Tipo de banco de dados                        | Generic          | Mantenha o valor padrão                                                                                                                    |
       | Tipo de instrução                             | INSERT           |                                                                                                                                            |
       | Serviço de pool de conexões do banco de dados | ClickHouse JDBC  | Selecione o serviço de controlador do ClickHouse                                                                                           |
       | Nome da tabela                                | tbl              | Insira aqui o nome da sua tabela                                                                                                           |
       | Traduzir nomes de campos                      | false            | Defina como "false" para que os nomes dos campos inseridos correspondam ao nome da coluna                                                  |
       | Tamanho máximo do lote                        | 1000             | Número máximo de linhas por insert. Esse valor não deve ser menor que o valor de "Número mínimo de registros" no processador `MergeRecord` |

    5. Para confirmar que cada insert contém várias linhas, verifique se a contagem de linhas na tabela está aumentando em pelo menos o valor de "Número mínimo de registros" definido em `MergeRecord`.

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_15.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=36b01a981712543038b0c3f5d2f06679" size="sm" border alt="Resultados da consulta mostrando a contagem de linhas na tabela de destino" width="828" height="1306" data-path="images/integrations/data-ingestion/etl-tools/nifi_15.webp" />

    6. Parabéns - você carregou seus dados no ClickHouse com sucesso usando o Apache NiFi !
  </Step>
</Steps>
