Apache NiFi es un software de gestión de flujos de trabajo de código abierto diseñado para automatizar el flujo de datos entre sistemas de software. Permite crear pipelines de datos ETL e incluye más de 300 procesadores de datos. Este tutorial paso a paso muestra cómo conectar Apache NiFi a ClickHouse tanto como origen como destino, y cómo cargar un conjunto de datos de ejemplo.
Recopila los datos de conexión
Para conectarse a ClickHouse con HTTP(S), necesita esta información:
| Parámetro(s) | Descripción |
|---|---|
HOST and PORT |
Normalmente, el puerto es 8443 cuando se usa TLS o 8123 cuando no se usa TLS. |
DATABASE NAME |
De forma predeterminada, existe una base de datos llamada default; use el nombre de la base de datos a la que desea conectarse. |
USERNAME and PASSWORD |
De forma predeterminada, el nombre de usuario es default. Use el nombre de usuario adecuado para su caso de uso. |
Los detalles de su servicio de ClickHouse Cloud están disponibles en la consola de ClickHouse Cloud. Seleccione un servicio y haga clic en Connect:

Elija HTTPS. Los detalles de conexión se muestran en un comando curl de ejemplo.

Si usa ClickHouse autogestionado, los detalles de conexión los establece su administrador de ClickHouse.
Descargar y ejecutar Apache NiFi
Para una instalación nueva, descargue el binario desde https://nifi.apache.org/download.html y ejecútelo con ./bin/nifi.sh start
Descargar el controlador JDBC de ClickHouse
- Ve a la página de versiones del controlador JDBC de ClickHouse en GitHub y busca la versión más reciente
- En esa versión, haz clic en "Show all xx assets" y busca el archivo JAR que contenga la palabra clave "shaded" o "all", por ejemplo,
clickhouse-jdbc-0.5.0-all.jar - Coloca el archivo JAR en una carpeta a la que Apache NiFi pueda acceder y toma nota de la ruta absoluta
[object Object]
-
Para configurar un servicio de controlador en Apache NiFi, vaya a la página de configuración del flujo de NiFi haciendo clic en el botón de "engranaje"

-
Seleccione la pestaña Controller Services y agregue un nuevo servicio de controlador haciendo clic en el botón
+de la esquina superior derecha
-
Busque
DBCPConnectionPooly haga clic en el botón "Add"
-
El
DBCPConnectionPoolrecién agregado estará en estado no válido de forma predeterminada. Haga clic en el botón de "engranaje" para comenzar a configurarlo
-
En la sección "Properties", introduzca los siguientes valores
| Propiedad | Valor | Observación |
|---|---|---|
| URL de conexión de la base de datos | jdbchttps://HOSTNAME:8443/default?ssl=truetrue | Reemplace HOSTNAME en la URL de conexión según corresponda |
| Nombre de la clase del driver de la base de datos | com.clickhouse.jdbc.ClickHouseDriver | |
| Ubicación del driver de la base de datos | /etc/nifi/nifi-X.XX.X/lib/clickhouse-jdbc-0.X.X-patchXX-shaded.jar | Ruta absoluta al archivo JAR del driver JDBC de ClickHouse |
| Usuario de la base de datos | default | Nombre de usuario de ClickHouse |
| Contraseña | password | Contraseña de ClickHouse |
-
En la sección Settings, cambie el nombre del servicio de controlador a "ClickHouse JDBC" para poder identificarlo fácilmente

-
Active el servicio de controlador
DBCPConnectionPoolhaciendo clic en el botón de "rayo" y luego en el botón "Enable"

-
Revise la pestaña Controller Services y asegúrese de que el servicio de controlador esté habilitado

[object Object]
-
Añade un procesador
ExecuteSQL, junto con los procesadores upstream y downstream correspondientes
-
En la sección "Properties" del procesador
ExecuteSQL, introduce los siguientes valoresPropiedad Valor Observación Database Connection Pooling Service ClickHouse JDBC Selecciona el Controller Service configurado para ClickHouse SQL select query SELECT * FROM system.metrics Introduce aquí tu consulta -
Inicia el procesador
ExecuteSQL
-
Para confirmar que la consulta se ha procesado correctamente, inspecciona uno de los
FlowFilede la cola de salida
-
Cambia a la vista "formatted" para ver el resultado del
FlowFilede salida
[object Object]
-
Para escribir varias filas en una sola inserción, primero debemos fusionar varios registros en uno solo. Esto puede hacerse con el procesador
MergeRecord -
En la sección "Properties" del procesador
MergeRecord, introduzca los siguientes valoresProperty Value Remark Record Reader JSONTreeReaderSeleccione el lector de registros adecuado Record Writer JSONReadSetWriterSeleccione el escritor de registros adecuado Minimum Number of Records 1000 Cámbielo por un número mayor para que se fusionen suficientes filas y formen un único registro. El valor predeterminado es 1 fila Maximum Number of Records 10000 Cámbielo por un número mayor que "Minimum Number of Records". El valor predeterminado es 1000 filas -
Para confirmar que varios registros se fusionan en uno, examine la entrada y la salida del procesador
MergeRecord. Tenga en cuenta que la salida es un array con varios registros de entradaEntrada

Salida

-
En la sección "Properties" del procesador
PutDatabaseRecord, introduzca los siguientes valoresProperty Value Remark Record Reader JSONTreeReaderSeleccione el lector de registros adecuado Database Type Generic Déjelo con el valor predeterminado Statement Type INSERT Database Connection Pooling Service ClickHouse JDBC Seleccione el servicio controlador de ClickHouse Table Name tbl Introduzca aquí el nombre de su tabla Translate Field Names false Establézcalo en "false" para que los nombres de los campos insertados coincidan con el nombre de la columna Maximum Batch Size 1000 Número máximo de filas por inserción. Este valor no debe ser inferior al valor de "Minimum Number of Records" del procesador MergeRecord -
Para confirmar que cada inserción contiene varias filas, compruebe que el conteo de filas de la tabla aumenta al menos en el valor de "Minimum Number of Records" definido en
MergeRecord.
-
Enhorabuena: ha cargado correctamente sus datos en ClickHouse con Apache NiFi!