PDI - Чтение файлов CSV, если отсутствует поле/данные, перейдите к следующему файлу

Я новичок в PDI и все еще узнаю об этом. Я пытаюсь создать преобразование, которое будет читать весь CSV-файл из одной папки, проверять правильность данных файла, то есть нет строк с отсутствующим/ошибочным/неправильным форматом, а затем сохранять его в базе данных.

Что я пробовал:

  1. Используйте Text File Input для доступа к CSV-файлу через FTP с помощью Apache Common VFS.
  2. Подтвердите и создайте условие для проверки данных (проверка имени файла, поля, если оно существует) в CSV с помощью Filter Row
  3. Вывод в таблицу PostgreSQL с использованием Syncronize After Merge. Я использовал это, потому что я также соединяю данные CSV с данными из другой таблицы.

Результат моего второго шага не то, что я хочу. В настоящее время он проверяет после того, как все csv прочитаны, и передает все данные на следующий шаг, но я хочу проверить при чтении данных, чтобы он передавал только правильные данные на следующий шаг. Как я могу это сделать? любое предложение? (нужен мозговой штурм)

И если это невозможно реализовать в PDI, тогда можно прочитать все данные и передать их на следующий шаг, но затем они снова будут проверены перед вставкой данных.


person Rio Odestila    schedule 18.07.2018    source источник
comment
Можете уточнить условие. Filter Row работает построчно, оставляя в потоке только строки, соответствующие условию. Кажется, вам нужно глобальное условие, принимая или отклоняя весь файл на основе некоторого условия. В любом случае, если это условие «отсутствует/ошибка/неправильный формат?», вам следует прочитать весь файл, прежде чем принимать решение. Просьба уточнить.   -  person AlainD    schedule 18.07.2018
comment
Да, сначала он прочитает весь файл, а затем сравнит имя файла с данными из таблицы, чтобы проверить правильность файла, проверить правильность всех полей и строки в нем не равны нулю. Если одно из этих условий не подходит, то данные из этого файла не обрабатываются и не вставляются события в этот файл, только 1 строка нулевая.   -  person Rio Odestila    schedule 18.07.2018


Ответы (1)


Вы можете проверить файл только после того, как все его данные будут полностью прочитаны и проверены.

Хороший способ сделать это — организовать несколько преобразований (одно для чтения каталога, одно для проверки правильности файлов, одно для загрузки данных проверенных файлов).

Теперь написание работы может показаться сложной задачей, пока вы не напишете 1/2 дюжины. Таким образом, вы можете получить его за одно преобразование. На самом деле это шаблон для принятия решений или выполнения расчетов на основе показателей, определенных для всех входных данных.

  1. Получить список файлов.
  2. Прочитайте их, отслеживая имя файла (на вкладке Additional output field).
  3. Сделайте проверку построчно, как вы это делали.
  4. Сделайте сводку, чтобы отклонить, если есть хотя бы одна ошибка.
  5. Вернуть основной поток из 2 и для поиска каждой строки, если имя файла было отклонено. (Поток поиска является результатом группировки).
  6. Отфильтруйте строки с отклоненным именем файла.
  7. Поместите их на Postgres (после обогащения данных другим файлом или таблицами).

Просто замечание. В вашем конкретном случае я бы немного изменил поток, проверяя принятое имя файла в первом filter и удаляя group by и второй filter. Но я подумал, что для вас будет полезнее стандартный шаблон.

Но, опять же, по разным причинам хорошей практикой было бы делать это с мастерской работой.

введите здесь описание изображения

person AlainD    schedule 18.07.2018
comment
Я не знаю, можно ли поставить Text File Input после Get File Names. Хорошая информация кстати. И что б/у Get File Names? Он не передает ни одно поле на следующий шаг. - person Rio Odestila; 19.07.2018
comment
как насчет обработки ошибок при вводе текстового файла? Я не понимаю, как его использовать? возможно ли выполнить мое требование без установки статуса, просто отфильтровать файл с форматом ошибки и т. д.? - person Rio Odestila; 02.08.2018
comment
Мэтт Кастер, автор PDI, однажды сказал мне: «Прочитайте документ. Это было жестоко, но оно есть: wiki.pentaho.com/display/EAI /Текст+Файл+Ввод. И когда вы пытаетесь соединить шаг со следующим, Spoon спрашивает вас, нормальный ли это шаг или шаг ошибки. Что вы также можете сделать, щелкнув правой кнопкой мыши по шагу. - person AlainD; 02.08.2018