Apache NiFi é 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.
Reúna as informações de conexão
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:

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

Se você estiver usando ClickHouse autogerenciado, os detalhes de conexão são definidos pelo administrador do seu ClickHouse.
Baixe e execute o Apache NiFi
Para uma nova instalação, baixe o binário em https://nifi.apache.org/download.html e inicie executando ./bin/nifi.sh start
Baixe o driver JDBC do ClickHouse
- Acesse a página de releases do driver JDBC do ClickHouse no GitHub e procure a versão mais recente do JDBC
- 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 - Coloque o arquivo JAR em uma pasta acessível ao Apache NiFi e anote o caminho absoluto
[object Object]
-
Para configurar um Controller Service no Apache NiFi, acesse a página NiFi Flow Configuration clicando no botão de "engrenagem"

-
Selecione a aba Controller Services e adicione um novo Controller Service clicando no botão
+no canto superior direito
-
Procure por
DBCPConnectionPoole clique no botão "Add"
-
O
DBCPConnectionPoolrecém-adicionado ficará no estado Invalid por padrão. Clique no botão de "engrenagem" para iniciar a configuração
-
Na seção "Properties", insira os seguintes valores
| Propriedade | Valor | Observação |
|---|---|---|
| URL de conexão com o banco de dados | jdbchttps://HOSTNAME:8443/default?ssl=truetrue | 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 |
-
Na seção Settings, altere o nome do Controller Service para "ClickHouse JDBC" para facilitar a identificação

-
Ative o Controller Service
DBCPConnectionPoolclicando no botão de "raio" e depois no botão "Enable"

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

[object Object]
-
Adicione um processador
ExecuteSQL, junto com os processadores upstream e downstream apropriados
-
Na seção "Properties" do processador
ExecuteSQL, insira os seguintes valoresPropriedade 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 -
Inicie o processador
ExecuteSQL
-
Para confirmar que a consulta foi processada com sucesso, inspecione um dos
FlowFilena fila de saída
-
Mude a visualização para "formatted" para ver o resultado do
FlowFilede saída
[object Object]
-
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 -
Na seção "Properties" do processador
MergeRecord, insira os seguintes valoresProperty Value Remark Leitor de registros JSONTreeReaderSelecione o leitor de registros apropriado Gravador de registros JSONReadSetWriterSelecione 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 -
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 entradaEntrada

Saída

-
Na seção "Properties" do processador
PutDatabaseRecord, insira os seguintes valoresProperty Value Remark Leitor de registros JSONTreeReaderSelecione 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 -
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.
-
Parabéns - você carregou seus dados no ClickHouse com sucesso usando o Apache NiFi !