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

Set Mapping variable in Expression and use it in Source Filter

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

然后我在 table A 的源限定符的源过滤器中使用这个 $$LOAD_DATE 变量来仅加载比 $$LOAD_DATE 变量中存储的日期更早的新记录.

我的问题是我无法正确设置 $$LOAD_DATE 变量。它始终是日期 1753-1-1-00.00.00,这是 date/time.

类型映射变量的默认值

我该如何解决这个问题?如何将日期存储在该变量中并稍后在 Source Qualifiers 源过滤器中使用它?有可能吗?

编辑:Table A 的记录太多,无法全部读取并稍后过滤。这会很昂贵,因此必须在源过滤器级别对其进行过滤。

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

如果你真的想使用映射变量来实现它,你必须创建两个映射,一个用于设置映射变量,另一个用于实际的增量加载。您可以使用工作流变量将映射变量值从工作流中的一个会话传递到另一个会话。

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

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

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


在第一个会话配置中,您必须定义 Post-session on success variable assignment:



第二张地图(与你的 table A)将在 会话前变量分配 中的会话配置后获取变量:

它会起作用。

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