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

时间:2018-04-30 07:17:10

标签: shell unix informatica informatica-powercenter

我有多个文件,其布局与源相同。有一个叫做的领域 “公认”。其中可以包含值Y或N.我只想处理所有记录中值为Y的文件。

例如): -

File 1
ID   Accepted
1     Y
2     N

File 2
ID   Accepted
1     Y
2     Y

在上述情况下,我应该只处理文件1.我正在使用Informatica PowerCenter来处理文件。可以有n个文件被读作“间接文件”。间接文件是使用会前korn shell脚本创建的。

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

2 个答案:

答案 0 :(得分:1)

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

假设所有输入文件都以名称“inputfile *”

开头

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

  

仅当标志变量

中没有“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

答案 1 :(得分:0)

使用Informatica:

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

    value = IIF(ACCEPTED ='N',1,0)

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

  4. 仅过滤SUM(值)= 0

  5. 的记录
  6. 基于当前处理的文件名

  7. 与原始源正常连接

    这应该给出所需的结果。

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