> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-revert-104359-revert-104251-parquet-single.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Передача потоковых данных в ClickHouse с помощью конвейеров данных NiFi

# Подключение Apache NiFi к 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>
            Поддерживается сообществом
        </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> — это ПО с открытым исходным кодом для управления рабочими процессами, предназначенное для автоматизации потоков данных между программными системами. Оно позволяет создавать ETL-конвейеры данных и включает более 300 процессоров данных. В этом пошаговом руководстве показано, как подключить Apache NiFi к ClickHouse в качестве источника и пункта назначения, а также загрузить примерный набор данных.

<Steps>
  <Step title="Подготовьте сведения о подключении" id="1-gather-your-connection-details">
    Чтобы подключиться к ClickHouse по HTTP(S), вам понадобится следующая информация:

    | Параметр(ы)               | Описание                                                                                                               |
    | ------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
    | `HOST` and `PORT`         | Обычно используется порт 8443 при использовании TLS и 8123 без TLS.                                                    |
    | `DATABASE NAME`           | По умолчанию есть база данных `default`; используйте имя базы данных, к которой хотите подключиться.                   |
    | `USERNAME` and `PASSWORD` | По умолчанию имя пользователя — `default`. Используйте имя пользователя, подходящее для вашего сценария использования. |

    Сведения о подключении для вашего сервиса ClickHouse Cloud доступны в консоли ClickHouse Cloud.
    Выберите сервис и нажмите **Connect**:

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/TDqdecUP67s0OrmN/images/_snippets/cloud-connect-button.webp?fit=max&auto=format&n=TDqdecUP67s0OrmN&q=85&s=e2661474de35730707288d90c4fc523e" alt="Кнопка подключения сервиса ClickHouse Cloud" width="998" height="932" data-path="images/_snippets/cloud-connect-button.webp" />
      </Frame>
    </div>

    Выберите **HTTPS**. Сведения о подключении будут показаны в примере команды `curl`.

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/TDqdecUP67s0OrmN/images/_snippets/connection-details-https.webp?fit=max&auto=format&n=TDqdecUP67s0OrmN&q=85&s=bb957761e4597b15bebc3646b6df7b5e" alt="Сведения о подключении к ClickHouse Cloud по HTTPS" width="1320" height="1184" data-path="images/_snippets/connection-details-https.webp" />
      </Frame>
    </div>

    Если вы используете самоуправляемый ClickHouse, сведения о подключении задаёт ваш администратор ClickHouse.
  </Step>

  <Step title="Скачайте и запустите Apache NiFi" id="2-download-and-run-apache-nifi">
    Для новой установки скачайте бинарный файл с [https://nifi.apache.org/download.html](https://nifi.apache.org/download.html) и начните с выполнения команды `./bin/nifi.sh start`
  </Step>

  <Step title="Скачайте JDBC-драйвер ClickHouse" id="3-download-the-clickhouse-jdbc-driver">
    1. Перейдите на <a href="https://github.com/ClickHouse/clickhouse-java/releases" target="_blank">страницу релизов JDBC-драйвера ClickHouse</a> на GitHub и найдите последнюю версию JDBC-драйвера
    2. В выбранном релизе нажмите "Show all xx assets" и найдите JAR-файл, содержащий ключевое слово "shaded" или "all", например `clickhouse-jdbc-0.5.0-all.jar`
    3. Поместите JAR-файл в папку, доступную Apache NiFi, и запишите его абсолютный путь
  </Step>

  <Step title={<>Добавьте службу контроллера <code>DBCPConnectionPool</code> и настройте её свойства</>} id="4-add-dbcpconnectionpool-controller-service-and-configure-its-properties">
    1. Чтобы настроить службу контроллера в Apache NiFi, откройте страницу конфигурации потока NiFi, нажав кнопку с шестерёнкой

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_01.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=e7b50eb73d49e54b5f202271f7fde5a0" size="sm" border alt="Страница конфигурации потока NiFi с выделенной кнопкой с шестерёнкой" width="564" height="409" data-path="images/integrations/data-ingestion/etl-tools/nifi_01.webp" />

    2. Перейдите на вкладку Controller Services и добавьте новую службу контроллера, нажав кнопку `+` в правом верхнем углу

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_02.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=731812b18bc8431077564ed525b72307" size="lg" border alt="Вкладка Controller Services с выделенной кнопкой добавления" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_02.webp" />

    3. Найдите `DBCPConnectionPool` и нажмите кнопку "Add"

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_03.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=b4f5ac23e95f70014a648782cb3e1f42" size="lg" border alt="Диалог выбора службы контроллера с выделенным DBCPConnectionPool" width="1999" height="1287" data-path="images/integrations/data-ingestion/etl-tools/nifi_03.webp" />

    4. После добавления `DBCPConnectionPool` по умолчанию будет находиться в состоянии Invalid. Нажмите кнопку с шестерёнкой, чтобы перейти к настройке

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_04.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=55fcadda77215291b7b65adfc66d05f2" size="lg" border alt="Список Controller Services с недопустимым DBCPConnectionPool и выделенной кнопкой с шестерёнкой" width="1893" height="607" data-path="images/integrations/data-ingestion/etl-tools/nifi_04.webp" />

    5. В разделе "Properties" введите следующие значения

    | Property                          | Value                                                                                    | Remark                                                 |
    | --------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------ |
    | URL подключения к базе данных     | jdbc[https://HOSTNAME:8443/default?ssl=true](https://HOSTNAME:8443/default?ssl=true)true | Замените HOSTNAME в URL подключения на нужное значение |
    | Имя класса драйвера базы данных   | com.clickhouse.jdbc.ClickHouseDriver                                                     |                                                        |
    | Расположение драйвера базы данных | /etc/nifi/nifi-X.XX.X/lib/clickhouse-jdbc-0.X.X-patchXX-shaded.jar                       | Абсолютный путь к JAR-файлу драйвера ClickHouse JDBC   |
    | Пользователь базы данных          | default                                                                                  | Имя пользователя ClickHouse                            |
    | Пароль                            | password                                                                                 | Пароль ClickHouse                                      |

    6. В разделе Settings измените имя службы контроллера на "ClickHouse JDBC" для удобства дальнейшей работы

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_05.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=472a846400eb464d86985b35f61c0b51" size="lg" border alt="Диалог настройки DBCPConnectionPool с заполненными свойствами" width="1586" height="1184" data-path="images/integrations/data-ingestion/etl-tools/nifi_05.webp" />

    7. Активируйте службу контроллера `DBCPConnectionPool`, нажав кнопку с молнией, а затем кнопку "Enable"

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_06.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=b63a8b6f7bd90306a228d9c2d979a7cb" size="lg" border alt="Список Controller Services с выделенной кнопкой с молнией" width="2878" height="812" data-path="images/integrations/data-ingestion/etl-tools/nifi_06.webp" />

           <br />

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_07.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=6e9746f67fa210126a1708e24b03041c" size="lg" border alt="Диалог подтверждения включения службы контроллера" width="1586" height="1172" data-path="images/integrations/data-ingestion/etl-tools/nifi_07.webp" />

    8. Проверьте вкладку Controller Services и убедитесь, что служба контроллера включена

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_08.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=a235a124f2107c08881686c97f7f5a88" size="lg" border alt="Список Controller Services с включенной службой ClickHouse JDBC" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_08.webp" />
  </Step>

  <Step title={<>Чтение из таблицы с помощью процессора <code>ExecuteSQL</code></>} id="5-read-from-a-table-using-the-executesql-processor">
    1. Добавьте процессор ​`​ExecuteSQL` вместе с соответствующими предшествующими и последующими процессорами

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_09.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=6f7ba50e22308348b931f8d4955c8209" size="md" border alt="Холст NiFi с процессором ExecuteSQL в потоке обработки" width="768" height="316" data-path="images/integrations/data-ingestion/etl-tools/nifi_09.webp" />

    2. В разделе "Properties" процессора ​`​ExecuteSQL` введите следующие значения

       | Property                            | Value                         | Remark                                                  |
       | ----------------------------------- | ----------------------------- | ------------------------------------------------------- |
       | Database Connection Pooling Service | ClickHouse JDBC               | Выберите Controller Service, настроенный для ClickHouse |
       | SQL select query                    | SELECT \* FROM system.metrics | Введите здесь свой запрос                               |

    3. Запустите процессор `​​ExecuteSQL`

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_10.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=08b4e357235826bfb61e8093a557db31" size="lg" border alt="Конфигурация процессора ExecuteSQL с заполненными свойствами" width="858" height="220" data-path="images/integrations/data-ingestion/etl-tools/nifi_10.webp" />

    4. Чтобы убедиться, что запрос был успешно обработан, проверьте один из `FlowFile` в выходной очереди

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_11.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=403f6bf124ee41fd829452fa8f6ea7a5" size="lg" border alt="Диалог со списком очереди, показывающий FlowFile, готовые к проверке" width="1956" height="794" data-path="images/integrations/data-ingestion/etl-tools/nifi_11.webp" />

    5. Переключитесь в режим "formatted", чтобы просмотреть результат в выходном `FlowFile`

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_12.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=20f373c95c83ada79eb854aacc43db15" size="lg" border alt="Средство просмотра содержимого FlowFile с результатами запроса в режиме formatted" width="1762" height="1500" data-path="images/integrations/data-ingestion/etl-tools/nifi_12.webp" />
  </Step>

  <Step title={<>Запись в таблицу с помощью <code>MergeRecord</code> и <code>PutDatabaseRecord</code> процессоров</>} id="6-write-to-a-table-using-mergerecord-and-putdatabaserecord-processor">
    1. Чтобы выполнить вставку нескольких строк за одну операцию, сначала нужно объединить несколько записей в одну. Это можно сделать с помощью процессора `MergeRecord`

    2. В разделе "Properties" процессора `MergeRecord` введите следующие значения

       | Свойство                  | Значение            | Примечание                                                                                                           |
       | ------------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------- |
       | Record Reader             | `JSONTreeReader`    | Выберите подходящее средство чтения записей                                                                          |
       | Record Writer             | `JSONReadSetWriter` | Выберите подходящее средство записи записей                                                                          |
       | Minimum Number of Records | 1000                | Увеличьте это значение, чтобы в одну запись объединялось минимально необходимое число строк. По умолчанию — 1 строка |
       | Maximum Number of Records | 10000               | Укажите значение больше, чем "Minimum Number of Records". По умолчанию — 1 000 строк                                 |

    3. Чтобы убедиться, что несколько записей объединяются в одну, проверьте вход и выход процессора `MergeRecord`. Обратите внимание, что на выходе получается массив из нескольких входных записей

       Вход

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_13.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=2b69568103c5cb982b6791218b972f1c" size="sm" border alt="Вход процессора MergeRecord, показывающий отдельные записи" width="624" height="306" data-path="images/integrations/data-ingestion/etl-tools/nifi_13.webp" />

       Выход

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_14.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=b76ef29b4cbd27ca800ac4371d0ad330" size="sm" border alt="Выход процессора MergeRecord, показывающий объединённый массив записей" width="707" height="501" data-path="images/integrations/data-ingestion/etl-tools/nifi_14.webp" />

    4. В разделе "Properties" процессора `PutDatabaseRecord` введите следующие значения

       | Свойство                            | Значение         | Примечание                                                                                                                                        |
       | ----------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
       | Record Reader                       | `JSONTreeReader` | Выберите подходящее средство чтения записей                                                                                                       |
       | Database Type                       | Generic          | Оставьте значение по умолчанию                                                                                                                    |
       | Statement Type                      | INSERT           |                                                                                                                                                   |
       | Database Connection Pooling Service | ClickHouse JDBC  | Выберите сервис-контроллер ClickHouse                                                                                                             |
       | Table Name                          | tbl              | Укажите здесь имя таблицы                                                                                                                         |
       | Translate Field Names               | false            | Установите значение "false", чтобы имена полей при вставке совпадали с именами столбцов                                                           |
       | Maximum Batch Size                  | 1000             | Максимальное количество строк на одну вставку. Это значение не должно быть меньше значения "Minimum Number of Records" в процессоре `MergeRecord` |

    5. Чтобы убедиться, что каждая вставка содержит несколько строк, проверьте, что число строк в таблице увеличивается как минимум на значение "Minimum Number of Records", заданное в `MergeRecord`.

           <Image img="https://mintcdn.com/private-7c7dfe99-revert-104359-revert-104251-parquet-single/10BJnKwHv02saF-g/images/integrations/data-ingestion/etl-tools/nifi_15.webp?fit=max&auto=format&n=10BJnKwHv02saF-g&q=85&s=98354983c8c3eab31f686428ba50728e" size="sm" border alt="Результаты запроса, показывающие количество строк в целевой таблице" width="828" height="1306" data-path="images/integrations/data-ingestion/etl-tools/nifi_15.webp" />

    6. Поздравляем — вы успешно загрузили данные в ClickHouse с помощью Apache NiFi!
  </Step>
</Steps>
