在Expression中设置Mapping变量并在Source Filter中使用它

时间:2016-03-09 14:22:24

标签: informatica informatica-powercenter

我在不同的数据库中有两个表。在表A中是数据,在另一个表B中是来自第一个表的数据的增量加载的信息。我想从表B加载并将表A中最后一次成功加载的日期存储在映射变量$$LOAD_DATE中。为此,我从表B中读取了一个日期,并使用表达式中的SETVARIABLE()函数来设置$$LOAD_DATE变量。我这样做的端口被标记为输出并写入虚拟平面文件。我只阅读了这个来源的一行!

然后我在表A的源限定符的源过滤器中使用此$$LOAD_DATE变量,仅加载比$$LOAD_DATE变量中存储的日期更年轻的新记录。

我的问题是我无法正确设置$$LOAD_DATE变量。始终为日期1753-1-1-00.00.00,这是映射日期/时间类型变量的默认值。

我该如何解决这个问题?如何在该变量中存储日期并稍后在源限定符源过滤器中使用它?它甚至可能吗?

编辑:表A有太多的记录要读取它们并稍后过滤它们。这将是昂贵的,因此必须在源过滤器级别进行过滤。

3 个答案:

答案 0 :(得分:2)

是的,这是可能的。
在第一张地图中,您必须初始化变量,如下所示:

enter image description here


在第一个会话配置中,您必须定义成功变量赋值后的会话

enter image description here

第二个映射(使用表A)将在会话前变量赋值中的会话配置后获取变量: enter image description here

它会起作用。

答案 1 :(得分:1)

无法设置映射变量并在同一运行中的其他位置使用它的值,因为该变量实际上是在会话完成时设置的。

如果您真的想使用映射变量实现它,则必须创建两个映射,一个用于设置映射变量,另一个用于实际增量加载。您可以使用工作流变量将映射变量值从工作流中的一个会话传递到另一个会话。 https://stackoverflow.com/a/26849639/2626813

其他解决方案可能是在B之后使用查找和之后的过滤器。

您还可以编写一些脚本来查询表B,并在执行映射之前使用最新的$ LOAD_DATE值修改参数文件。

答案 2 :(得分:0)

由于我们有两个不同的DB,因此请使用两个会话。获取第一个中的值并将参数传递给第二个。