> ## 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.

> Envía datos a ClickHouse mediante canalizaciones de datos de NiFi

# Conectar Apache NiFi a 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>
            Mantenimiento de la comunidad
        </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> 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.

<Steps>
  <Step title="Recopila los datos de conexión" id="1-gather-your-connection-details">
    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**:

    <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ón Connect del servicio de ClickHouse Cloud" width="998" height="932" data-path="images/_snippets/cloud-connect-button.webp" />
      </Frame>
    </div>

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

    <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="Detalles de conexión HTTPS de ClickHouse Cloud" width="1320" height="1184" data-path="images/_snippets/connection-details-https.webp" />
      </Frame>
    </div>

    Si usa ClickHouse autogestionado, los detalles de conexión los establece su administrador de ClickHouse.
  </Step>

  <Step title="Descargar y ejecutar Apache NiFi" id="2-download-and-run-apache-nifi">
    Para una instalación nueva, descargue el binario desde [https://nifi.apache.org/download.html](https://nifi.apache.org/download.html) y ejecútelo con `./bin/nifi.sh start`
  </Step>

  <Step title="Descargar el controlador JDBC de ClickHouse" id="3-download-the-clickhouse-jdbc-driver">
    1. Ve a la <a href="https://github.com/ClickHouse/clickhouse-java/releases" target="_blank">página de versiones del controlador JDBC de ClickHouse</a> 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
  </Step>

  <Step title={<>Agregue el servicio de controlador <code>DBCPConnectionPool</code> y configure sus propiedades</>} id="4-add-dbcpconnectionpool-controller-service-and-configure-its-properties">
    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"

           <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 de configuración del flujo de NiFi con el botón de engranaje resaltado" width="564" height="409" data-path="images/integrations/data-ingestion/etl-tools/nifi_01.webp" />

    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

           <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="Pestaña Controller Services con el botón para agregar resaltado" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_02.webp" />

    3. Busque `DBCPConnectionPool` y haga clic en el botón "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="Cuadro de diálogo de selección de servicio de controlador con DBCPConnectionPool resaltado" width="1999" height="1287" data-path="images/integrations/data-ingestion/etl-tools/nifi_03.webp" />

    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

           <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 servicios de controlador que muestra un DBCPConnectionPool no válido con el botón de engranaje resaltado" width="1893" height="607" data-path="images/integrations/data-ingestion/etl-tools/nifi_04.webp" />

    5. En la sección "Properties", introduzca los siguientes valores

    | Propiedad                                         | Valor                                                                                    | Observación                                                |
    | ------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
    | URL de conexión de la base de datos               | jdbc[https://HOSTNAME:8443/default?ssl=true](https://HOSTNAME:8443/default?ssl=true)true | 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                                   |

    6. En la sección Settings, cambie el nombre del servicio de controlador a "ClickHouse JDBC" para poder identificarlo fácilmente

           <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="Cuadro de diálogo de configuración de DBCPConnectionPool con las propiedades completadas" width="1586" height="1184" data-path="images/integrations/data-ingestion/etl-tools/nifi_05.webp" />

    7. Active el servicio de controlador `DBCPConnectionPool` haciendo clic en el botón de "rayo" y luego en el botón "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 servicios de controlador con el botón de rayo resaltado" 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="Cuadro de diálogo de confirmación para habilitar el servicio de controlador" width="1586" height="1172" data-path="images/integrations/data-ingestion/etl-tools/nifi_07.webp" />

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

           <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 servicios de controlador que muestra el servicio ClickHouse JDBC habilitado" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_08.webp" />
  </Step>

  <Step title={<>Leer datos de una tabla con el procesador <code>ExecuteSQL</code></>} id="5-read-from-a-table-using-the-executesql-processor">
    1. Añade un procesador `​ExecuteSQL`, junto con los procesadores upstream y downstream correspondientes

           <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="Lienzo de NiFi que muestra el procesador ExecuteSQL en un flujo de trabajo" width="768" height="316" data-path="images/integrations/data-ingestion/etl-tools/nifi_09.webp" />

    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`

           <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="Configuración del procesador ExecuteSQL con las propiedades rellenadas" width="858" height="220" data-path="images/integrations/data-ingestion/etl-tools/nifi_10.webp" />

    4. Para confirmar que la consulta se ha procesado correctamente, inspecciona uno de los `FlowFile` de la cola de salida

           <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="Cuadro de diálogo de la cola que muestra flowfiles listos para su inspección" width="1956" height="794" data-path="images/integrations/data-ingestion/etl-tools/nifi_11.webp" />

    5. Cambia a la vista "formatted" para ver el resultado del `FlowFile` de salida

           <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="Visor de contenido de FlowFile que muestra los resultados de la consulta en la vista con formato" width="1762" height="1500" data-path="images/integrations/data-ingestion/etl-tools/nifi_12.webp" />
  </Step>

  <Step title={<>Escribir en una tabla con el procesador <code>MergeRecord</code> y <code>PutDatabaseRecord</code></>} id="6-write-to-a-table-using-mergerecord-and-putdatabaserecord-processor">
    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

           <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 del procesador MergeRecord que muestra registros individuales" width="624" height="306" data-path="images/integrations/data-ingestion/etl-tools/nifi_13.webp" />

       Salida

           <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="Salida del procesador MergeRecord que muestra un array fusionado de registros" width="707" height="501" data-path="images/integrations/data-ingestion/etl-tools/nifi_14.webp" />

    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`.

           <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 de la consulta que muestran el conteo de filas en la tabla de destino" width="828" height="1306" data-path="images/integrations/data-ingestion/etl-tools/nifi_15.webp" />

    6. Enhorabuena: ha cargado correctamente sus datos en ClickHouse con Apache NiFi!
  </Step>
</Steps>
