我有多个文件,其布局与源相同。有一个叫做的领域 “公认”。其中可以包含值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”和“接受”
答案 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:
表达式: - 如果接受N = 0,则设置值为1的端口
value = IIF(ACCEPTED ='N',1,0)
根据当前处理的文件名进行聚合;取SUM(值)
仅过滤SUM(值)= 0
基于当前处理的文件名
这应该给出所需的结果。
Source --> Expression --> Aggregator --> Filter --> Joiner(join with original source)