Informatica: обрабатывать файлы, только если все записи имеют значение Accepted = Y, иначе не обрабатывать весь файл - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть несколько файлов с одинаковым расположением в качестве источника. Есть поле под названием "Принято". Которые могут иметь значения Y или N. Я хочу обрабатывать только те файлы, которые имеют значения = Y для всех записей.

например): -

File 1
ID   Accepted
1     Y
2     N

File 2
ID   Accepted
1     Y
2     Y

В вышеупомянутом случае я должен обработать только Файл 1. Я использую Informatica PowerCenter для обработки файлов. Может быть n файлов, которые читаются как "косвенный файл". Косвенный файл создается с помощью предсессионного скрипта оболочки korn.

Я предпочитаю работать с Informatica Mapping, но любые решения, использующие сценарий оболочки, также приветствуются. Файлы с разделителями '|' и имеют много полей, а не только "ID" и "Accepted"

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Использование Informatica:

  1. Добавить текущее обработанное имя файла в источник.
  2. Выражение: - установите порт со значением = 1, если принято N, иначе 0

    значение = IIF (ПРИНЯТО = N, 1,0)

  3. Агрегировать на основе обработанного в настоящее время имени файла; принять сумму (значение)

  4. Фильтрация только записей, имеющих SUM (значение) = 0

  5. Обычное объединение с исходным источником на основе обработанного в настоящее время имени файла

Это должно дать требуемый результат.

Source --> Expression --> Aggregator --> Filter --> Joiner(join with original source)
0 голосов
/ 30 апреля 2018

Это можно сделать с помощью оператора awk при создании косвенного файла:

Предположим, что все ваши входные файлы начинаются с имени "inputfile *"

переменная флага извлекает 2-е поле файла с разделителем как '|'

Имя файла добавляется в косвенный файл, только если в переменной флага нет «N»

filename=inputfile*
for f in $filename
do
flag=`awk -F "|" '{print $2}' $f`
if [[ $flag =~ .*N.* ]]
then
echo 'Skipping file as one of the record has value =N as accepted'
else
echo pwd/$f >>indirectfile
fi
done
...