Как направить / извлечь разные столбцы из одного файла CSV в Nifi? - PullRequest
0 голосов
/ 25 января 2019

У меня есть процессор GetFile, который выбирает большой CSV-файл, содержащий около 100 столбцов.Моя цель - извлечь определенные подмножества столбцов из этого CSV-файла и отправить их в различные таблицы MySQL.

В текущем подходе используются GetFile -> Несколько ConvertRecord Процессоры, в которых имеются разные CSVReader и CSVRecordSetWriters определены, которые соответствуют схемам AVRO на основе схемы таблицы SQL.

Есть ли способ иметь только один GetFile и маршрутизировать подмножества на разные процессоры, в отличие от репликации большого файла CSV в нескольких потоках, которыйзатем получить разные процессоры ConvertRecord?

Это поток, который я сейчас имею, Multiple Queues of Large Files

Как видно, файл CSV реплицируется на несколькопути и делает вещи очень неэффективными.В этом примере размер составляет 57 байт, но обычно я получаю ~ 6 ГБ файлов размером 60-70, таких как ConvertRecord paths

Как я могу эффективно направлять свои данные, если я знаю, какие подмножествастолбцы нужно извлечь из файла CSV и отправить в разные таблицы?Пример:

Столбец A, B перейти к одному столу

Столбец A, C Перейти ко второму столу

Столбец A, D, E перейти к третьему столу

Столбец A, D, F, G перейти к третьему столу ....

1 Ответ

0 голосов
/ 25 января 2019

Если вы используете PutDatabaseRecord, то у вас может быть несколько процессоров PutDatabaseRecord, каждый из которых использует свою схему чтения для выбора соответствующих столбцов, аналогично тому, что вы делаете с процессорами ConvertRecord, но на самом деле вам никогда не нужно записывать преобразованные данные.

Кроме того, нет ничего действительно неэффективного в разветвлении одного и того же файла потока в 6 разных местах.В приведенном выше примере, если GetFile выбирает файл 6 ГБ, в хранилище содержимого будет только 1 копия этого содержимого 6 ГБ, и будет 3 потока файлов, указывающих на тот же контент, поэтому каждый ConvertRecord будет читать тот же контент 6 ГБ.Затем каждый из них выписывал новый фрагмент контента, который был бы подмножеством данных, и в какой-то момент оригинальные 6 ГБ удалялись из репозитория контента, когда на него не ссылались потоковые файлы.Так что не все дополнительные соединения из GetFile создают копию размером 6 ГБ.

...