Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Conectar Apache NiFi a ClickHouse

Mantenido por la comunidad

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:

Botón Connect del servicio de ClickHouse Cloud

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

Detalles de conexión HTTPS de ClickHouse Cloud

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

  1. Ve a la página de versiones del controlador JDBC de ClickHouse en GitHub y busca la versión más reciente
  2. 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
  3. Coloca el archivo JAR en una carpeta a la que Apache NiFi pueda acceder y toma nota de la ruta absoluta

[object Object]

  1. 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"

    Página de configuración del flujo de NiFi con el botón de engranaje resaltado
  2. Seleccione la pestaña Controller Services y agregue un nuevo servicio de controlador haciendo clic en el botón + de la esquina superior derecha

    Pestaña Controller Services con el botón para agregar resaltado
  3. Busque DBCPConnectionPool y haga clic en el botón "Add"

    Cuadro de diálogo de selección de servicio de controlador con DBCPConnectionPool resaltado
  4. El DBCPConnectionPool recién agregado estará en estado no válido de forma predeterminada. Haga clic en el botón de "engranaje" para comenzar a configurarlo

    Lista de servicios de controlador que muestra un DBCPConnectionPool no válido con el botón de engranaje resaltado
  5. 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
  1. En la sección Settings, cambie el nombre del servicio de controlador a "ClickHouse JDBC" para poder identificarlo fácilmente

    Cuadro de diálogo de configuración de DBCPConnectionPool con las propiedades completadas
  2. Active el servicio de controlador DBCPConnectionPool haciendo clic en el botón de "rayo" y luego en el botón "Enable"

    Lista de servicios de controlador con el botón de rayo resaltado

    Cuadro de diálogo de confirmación para habilitar el servicio de controlador
  3. Revise la pestaña Controller Services y asegúrese de que el servicio de controlador esté habilitado

    Lista de servicios de controlador que muestra el servicio ClickHouse JDBC habilitado

[object Object]

  1. Añade un procesador ​ExecuteSQL, junto con los procesadores upstream y downstream correspondientes

    Lienzo de NiFi que muestra el procesador ExecuteSQL en un flujo de trabajo
  2. En la sección "Properties" del procesador ​ExecuteSQL, introduce los siguientes valores

    Propiedad 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
  3. Inicia el procesador ​​ExecuteSQL

    Configuración del procesador ExecuteSQL con las propiedades rellenadas
  4. Para confirmar que la consulta se ha procesado correctamente, inspecciona uno de los FlowFile de la cola de salida

    Cuadro de diálogo de la cola que muestra flowfiles listos para su inspección
  5. Cambia a la vista "formatted" para ver el resultado del FlowFile de salida

    Visor de contenido de FlowFile que muestra los resultados de la consulta en la vista con formato

[object Object]

  1. Para escribir varias filas en una sola inserción, primero debemos fusionar varios registros en uno solo. Esto puede hacerse con el procesador MergeRecord

  2. En la sección "Properties" del procesador MergeRecord, introduzca los siguientes valores

    Property Value Remark
    Record Reader JSONTreeReader Seleccione el lector de registros adecuado
    Record Writer JSONReadSetWriter Seleccione 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
  3. 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 entrada

    Entrada

    Entrada del procesador MergeRecord que muestra registros individuales

    Salida

    Salida del procesador MergeRecord que muestra un array fusionado de registros
  4. En la sección "Properties" del procesador PutDatabaseRecord, introduzca los siguientes valores

    Property Value Remark
    Record Reader JSONTreeReader Seleccione 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
  5. 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.

    Resultados de la consulta que muestran el conteo de filas en la tabla de destino
  6. Enhorabuena: ha cargado correctamente sus datos en ClickHouse con Apache NiFi!

Navigation