Informatica 9.6:如何捕获会话结束时间并配置参数文件
Informatica 9.6:配置
$$session_end_time参数及过滤条件实现 我来帮你搞定这个需求的具体配置步骤,分两部分讲清楚,都是实际操作中验证过的方法:
一、参数文件中配置$$session_end_time参数
首先要明确参数文件的格式和配置规则,确保Informatica能正确识别这个参数:
- 参数文件的层级与格式:
优先使用会话级参数文件(比工作流级更精准,避免影响其他会话),文件格式要求每段以[会话名称]开头,然后是参数名=参数值。比如你的会话名叫S_Load_Timestamp_Records,参数文件里就这么写:[S_Load_Timestamp_Records] $$session_end_time=2024-05-20 19:00:00 - 时间格式要求:
必须用Informatica支持的日期时间格式,推荐用YYYY-MM-DD HH24:MI:SS,这个格式和大多数数据库的TIMESTAMP类型兼容,不会出现转换错误。 - 动态获取上一次会话结束时间(进阶):
如果你的需求是自动取上一次会话的结束时间(而不是手动指定),可以这么做:- 先创建一个数据库表,用来存储每次会话的结束时间(比如
SESSION_RUN_HISTORY,字段包括SESSION_NAME、END_TIME); - 在工作流中添加一个Command Task,会话结束后把
$PMSessionEndTime写入这个表; - 下次运行会话前,用Shell脚本或者Pre-Session SQL从表中读取上一次的结束时间,写入参数文件的
$$session_end_time中。
- 先创建一个数据库表,用来存储每次会话的结束时间(比如
二、过滤条件timestamp>=$$session_end_time的配置配合
参数配置好后,还要在映射中正确设置过滤条件,避免类型不匹配的问题:
- 映射中设置过滤转换:
在映射里添加一个Filter Transformation,或者直接在源定义的“过滤器”中写入条件。注意:因为参数是字符串类型,必须转换成日期时间类型再和源表的timestamp字段对比,条件写法如下:
如果源表的timestamp >= TO_DATE('$$session_end_time', 'YYYY-MM-DD HH24:MI:SS')timestamp是字符串类型(不推荐,但如果是这种情况),可以直接用字符串对比:timestamp >= '$$session_end_time' - 验证参数加载:
在会话配置的「参数」标签下,确认已经指定了正确的参数文件路径,并且勾选了“使用参数文件”。运行会话后,在日志里搜索$$session_end_time,可以看到实际传入的参数值,检查是否符合预期。 - 常见坑规避:
- 时区问题:如果源数据的timestamp带时区,要确保参数的时间和源数据时区一致,或者在
TO_DATE转换时指定时区(比如TO_DATE('$$session_end_time', 'YYYY-MM-DD HH24:MI:SS TZH:TZM')); - 参数优先级:如果工作流和会话都配置了参数文件,会话级的参数会覆盖工作流级的,所以优先在会话级配置更稳妥;
- 测试方法:先手动设置一个测试时间(比如
2024-05-01 00:00:00),运行会话后查看加载的记录是否都是timestamp大于这个时间的,验证没问题再正式上线。
- 时区问题:如果源数据的timestamp带时区,要确保参数的时间和源数据时区一致,或者在
内容的提问来源于stack exchange,提问作者Jyo
相关产品推荐
相关产品推荐

