如何在Informatica PowerCenter中避免源文件为空时创建目标文件
在Informatica PowerCenter中实现源文件为空时不创建目标文件的方法
方法一:前置脚本+工作流分支判断
- 给目标会话添加前置命令,先检查源文件是否为空:
- Unix/Linux环境:
if [ $(wc -l < /path/to/source/file) -eq 0 ]; then touch /tmp/source_empty.flag; else rm -f /tmp/source_empty.flag; fi - Windows环境:
for /f %%i in ('find /c /v "" "C:\path\to\source\file"') do if %%i equ 0 echo. > "C:\tmp\source_empty.flag"
- Unix/Linux环境:
- 在工作流中添加Decision Task,判断标记文件是否存在:
- 若标记文件存在(说明源为空),直接跳过执行目标写入的会话;
- 若标记文件不存在,正常运行会话生成目标文件。
方法二:统计行数后删除空目标文件
- 在映射里添加聚合转换,统计源数据的总行数,将结果存入会话变量
$$SOURCE_ROW_COUNT - 给会话添加后置命令,根据行数判断是否删除目标文件:
- Unix/Linux:
if [ $$SOURCE_ROW_COUNT -eq 0 ]; then rm -f /path/to/target/file; fi - Windows:
if %SOURCE_ROW_COUNT% equ 0 del "C:\path\to\target\file"
- Unix/Linux:
- 注意:这种方式会先创建目标文件,再删除空文件,适合对临时文件创建无限制的场景。
方法三:用命令任务做前置检查
- 在工作流开头添加Command Task,执行脚本检查源文件状态,设置脚本返回值:
- 源非空时返回0,源为空时返回1
- 后续接Decision Task,根据Command Task的返回值分支:
- 返回0则执行生成目标文件的会话;
- 返回1则跳过会话,不创建目标文件。
内容的提问来源于stack exchange,提问作者Nikkath Naser
相关产品推荐
相关产品推荐

