Informatica:仅当所有记录都具有值 Accepted = Y 时才处理文件,否则不处理整个文件

Informatica: Process the files only if all records have value Accepted = Y else do not process the whole file

我有多个与源布局相同的文件。有一个字段叫 "Accepted"。可以有值 Y 或 N。我只想处理所有记录的值 = Y 的那些文件。

例如):-

File 1
ID   Accepted
1     Y
2     N

File 2
ID   Accepted
1     Y
2     Y

在上述情况下,我应该只处理文件 1。我正在使用 Informatica PowerCenter 处理文件。可以有n个文件,读取为"Indirect File"。间接文件是使用会话前 korn shell 脚本创建的。

我更喜欢使用 Informatica Mapping 处理它,但也欢迎任何使用 shell 脚本的解决方案。文件以“|”分隔并且有很多字段,不仅仅是 "ID" 和 "Accepted"

您可以在创建间接文件时使用 awk 语句处理此问题:

假设您所有的输入文件都以名称 "inputfile*"

开头

flag 变量将获取文件的第二个字段,分隔符为“|”

A filename is added to indirect file only if there is no "N" in flag variable

filename=inputfile*
for f in $filename
do
flag=`awk -F "|" '{print }' $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

使用 Informatica:

  1. 将当前处理的文件名添加到源。
  2. 表达式:- 如果接受为 N,则设置值为 1 的端口,否则为 0

    值 = IIF(已接受 = 'N',1,0)

  3. 根据当前处理的文件名聚合;取 SUM(值)

  4. 仅过滤 SUM(value)=0

  5. 的记录
  6. 根据当前处理的文件名正常加入原始来源

这应该会给出所需的结果。

Source --> Expression --> Aggregator --> Filter --> Joiner(join with original source)