Informatica PowerCenter:如何仅处理所有记录Accepted=Y的源文件
实现仅处理全Accepted=Y文件的Informatica方案
针对你的需求——通过Informatica PowerCenter的间接文件模式,只处理所有记录Accepted字段均为Y的源文件,核心思路是用预会话Korn Shell脚本筛选出符合条件的文件,生成正确的间接文件,下面是具体的实现步骤和代码:
一、预会话Korn Shell脚本实现筛选逻辑
脚本的核心是遍历所有源文件,检查每个文件是否存在Accepted=N的记录,仅将全Y的文件路径写入间接文件。
示例脚本(适配空格分隔的源文件)
#!/usr/bin/ksh # 配置参数:按需修改路径和文件规则 SOURCE_FILES="/path/to/your/source/files/*.txt" # 匹配所有源文件,比如*.txt INDIRECT_FILE="/informatica/path/indirect_source.txt" # Informatica要读取的间接文件路径 # 先清空间接文件,避免旧内容干扰 > $INDIRECT_FILE # 遍历每个源文件 for src_file in $SOURCE_FILES; do # 跳过表头(如果你的文件没有表头,删掉"NR>1 && "这部分) # 检查是否存在任意一行的Accepted字段为N(假设Accepted是第二列) has_rejected=$(awk 'NR>1 && $2 == "N" { print 1; exit }' "$src_file") # 如果没有找到N(即全为Y),就把文件路径写入间接文件 if [ -z "$has_rejected" ]; then echo "$src_file" >> $INDIRECT_FILE echo "Added eligible file: $src_file" # 可选:日志输出,方便排查 else echo "Skipped file (contains rejected records): $src_file" # 可选日志 fi done
脚本关键说明
- 字段适配:如果你的源文件是逗号/制表符分隔,修改
awk的字段分隔符,比如逗号分隔用awk -F',' 'NR>1 && $2 == "N" { ... }' - 性能优化:用
awk直接判断并找到N就退出,比遍历整个文件统计效率高,适合大文件 - 权限检查:确保Informatica的运行用户对源文件目录和间接文件路径有读写权限
二、Informatica PowerCenter配置
- 源定义:确保你的源定义正确识别
Accepted字段,匹配源文件的格式(分隔符、字段位置等) - 会话配置:
- 在源文件属性中,选择Indirect File模式
- 指定刚才脚本生成的
INDIRECT_FILE路径
- 预会话命令:在会话的"Pre-Session Command"中配置该Korn Shell脚本的路径(比如
/path/to/your/script/filter_files.ksh),确保会话启动前先执行脚本生成正确的间接文件
三、注意事项
- 表头处理:如果源文件没有表头,一定要去掉脚本中
NR>1 &&的判断,避免漏掉第一行数据的检查 - 文件规则:根据实际源文件的命名规则调整
SOURCE_FILES的通配符(比如*.csv或data_*.txt) - 日志排查:建议保留脚本中的日志输出,方便后续排查哪些文件被筛选/跳过
对应你提到的示例:
- 文件1包含
Accepted=N的记录,会被脚本跳过,不会写入间接文件 - 文件2所有
Accepted都是Y,会被加入间接文件,最终Informatica仅处理文件2(这里推测你示例里的“仅需处理文件1”是笔误,符合需求的应该是全Y的文件2)
内容的提问来源于stack exchange,提问作者user9720021
相关产品推荐
相关产品推荐

