Pull to refresh

Comments 5

Для гибкой работы с данными файлов и атрибутами в NiFi применяется специальный язык выражений: NiFi Expression Language

А как же DSL? А JOLT? Наконец, Groovy?
В общем, не раскрыто понятие "гибкой работы".

Гарантирование доставки данных, загруженных в NiFi, достигается за счет применения концепции файлов потока (Flow File), которые объединяют в себе содержимое (данные, загруженные в NiFi из внешней системы) и атрибуты (метаданные, которые можно добавлять к файлам в самом NiFi) и которые сохраняются на жесткий диск, чтобы не допустить их потери в случае отключения питания.

Тоже, весьма спорное утверждение, что это все достигается за счет FlowFile.
Следует помнить, что контент, который хранится в репозитории контента, пишется каждый раз заново при любом изменении, тем самым никуда не пропадая в случае сбоя.
Ссылка на контент хранится в атрибутах FlowFile, которые хранятся в оперативной памяти. А отказоусточиваость достигается за счет того, что любые изменения FlowFile сохраняются в репозитории флоуфайлов, в построенном в виде Write-Ahead Log, т.е. при сбое NiFI может "раскрутить" все состояния FlowFile и точно узнать, в какой очереди они были.
Для точного понимания механизма рекомендую почитать NiFI in Depth, разделы Effect of System Failure on Transactions и Deeper View: FlowFiles in Memory and on Disk

Основное отличие от настроек для СУБД, драйвера для которых встроены в NiFi, — это необходимость указать имя класса драйвера (Database Driver Class Name), а также путь к jar-файлу этого драйвера. Более подробно про подключение можно прочитать в официальной документации ClickHouse.

В общем процесс загрузки содержимого CSV-файлов в ClickHouse выглядит следующим образом:

А зачем вы настраивали соединение с базой данный? К чему вообще раздел про JDBC подключение, если вы его не применяете?

После сохранения содержимого CSV в файл, который может читать ClickHouse (директория /var/lib/clickhouse/user_files), и установки необходимых для формирования запросов атрибутов (определения таблицы и партиции из имени файла) выполняются последовательно запросы для создания таблицы, удаления старых данных и вставки новых. Процесс завершается удалением файла из директории пользовательских файлов ClickHouse.

Зачем вы делаете какой-то велосипед?

Все запросы можно выполнить из NiFi через PutSQL, т.о. у вас сразу появится структура данных. Зачем просто копируете данные на диск, если можете сразу вставить их в таблицу ClickHouse. Вы ранее создали соединение JDBC, применяется PutDatabaseRecord чтобы сразу внести прочитанные данные в базу, без промежуточного сохранения файла. Это будет очень быстро, и не потребуется дополнительных операций.

Сравнение с Airflow

Где сравнение-то? Какие критерии? Какие показтели? Эксперимент?

Вы привели поток NiFI, но не привели код DAG.
Поток для вставки в ClickHouse в принципе не оптимальный. Если у вас стоит задача - разными инструментами извлечь данные и положить их на шару, то так и напишите, не вводите в заблуждение. Заголовок статьи - кликбейтный и не соответствует содержимому.

Sign up to leave a comment.