Informatica 10.2跨数据库基于关联表日期过滤主表数据实现方案
如何在Informatica 10.2中实现跨库过滤主表数据?
嘿,作为Informatica新手碰到这种跨库过滤的需求完全不用慌,我给你拆解一套清晰易懂的实现步骤,跟着做就行!
核心思路
咱们的需求是用Db2中Table2的last_pull_time值,过滤Db1中Table1里last_updated晚于这个时间的数据。因为Table2指定表名后只返回一行,所以最简洁的方式是在主Mapping里直接通过Lookup获取这个时间值,再用它做过滤条件。
具体操作步骤
1. 先搞定数据库连接配置
首先得确保Informatica能同时连上Db1和Db2:
- 打开Workflow Manager,在Connections菜单里选Relational
- 分别给Db1和Db2创建对应的关系型连接,测试连接确保能成功(这一步很重要,别跳过!)
2. 构建主Mapping(关键步骤)
这是核心部分,咱们一步步来:
2.1 导入两个源表的定义
- 在Designer里打开你的文件夹,选Sources → Import from Database
- 分别导入Db1的Table1和Db2的Table2,确保字段都正确导入
2.2 添加Lookup组件获取last_pull_time
我们用Lookup来从Table2里拿到唯一的时间值:
- 在Mapping里拖入一个Lookup Transformation,选择Relational Lookup类型
- 配置Lookup的连接为Db2的连接,选中Table2作为Lookup的源表
- 切换到Condition标签,设置过滤条件:
Tablename = 'Table1'(这里替换成你实际用来定位Table2行的表名) - 切换到Ports标签,把
last_pull_time字段勾选为输出端口 - 最后在Properties标签里,勾选Lookup on entire source(因为只需要获取一次这个值,不用每一行都查)
2.3 添加Filter组件过滤Table1数据
现在用拿到的时间值过滤Table1:
- 拖入一个Filter Transformation,把Table1的所有字段都连接到这个Filter
- 同时把Lookup输出的
last_pull_time端口也连接到Filter - 双击Filter,在Filter Condition里设置:
Table1.last_updated > LAST_PULL_TIME(直接在可视化界面里选对应的字段就行,不用手动敲全)
2.4 连接到目标表
把Filter的所有输出端口连接到你要加载数据的目标表定义(提前导入好目标表的结构哦)
3. 配置Session和Workflow
- 回到Workflow Manager,创建一个Session,关联咱们刚才做的主Mapping
- 在Session的Mapping标签页里,给两个源表分别指定对应的数据库连接(Table1对应Db1,Lookup的Table2对应Db2)
- 创建一个Workflow,把这个Session拖进去,保存后就可以运行测试啦!
新手必看的注意事项
- 一定要确保两个数据库的时间字段类型匹配(比如都是TIMESTAMP或者DATE),不然会报类型不兼容的错误
- 如果Table2的
last_pull_time可能为NULL,记得在Lookup里设置默认值(比如1900-01-01 00:00:00),避免过滤掉所有数据 - 测试的时候可以先把Filter组件去掉,先验证Lookup是否能正确拿到
last_pull_time的值,确认没问题再加上过滤条件
内容的提问来源于stack exchange,提问作者user3600663
相关产品推荐
相关产品推荐

