Informatica:如何为两个表加入执行条件
Informatica: How to make a condition for two tables joining execution
实际上,此映射中总共调用了 4 个表:Market、Cost、A、B,
Read_sourceTB_B-----FIL1------->---------JNR4 \
| | |
| Read_sourceTB_Market--\ | |
| Read_sourceTB_Cost------JNR1--\ | |
| Read_sourceTB_A-----------------JNR2 JNR5--->EXP... -->TGT
| | | |
| | | |
| | | |
---------------------FIL2->---------JNR3 /
SQ_TABLEB --FIL1-> -- JNR1 \
| | |
| SQ_TABLEA --| JNR3-->EXP.... -->TGT
| | |
|--FIL2-> -- JNR2 /
**第一个**加入条件
A LEFT JOIN B
ON A.MEMBERSHIPID = B.MEMBERSHIPID
Where B.System_Code='University'
IF <第一个加入条件>失败,则执行
**第二个**加入条件
A LEFT JOIN B ON
A.address = B.address and A.phonenumber = B.phonenumber
Where B.System_Code='Policy'
我应该使用哪种转换?我不会Informatica,我的版本是Informatica Developer 10.5,求助me.Thanks!
我只会
A left join B on `condition` `System_Code='University'`
left join B on `condition` `System_Code='Policy'`
但我不知道如何做决定
如果 A 加入 B System_Code='University'
失败,
然后A加入BSystem_Code='Policy'
您需要根据两种不同的条件将 A 与 B 连接(两次),然后将它们连接回一个管道以获得 decision/if-else 条件。
另请注意,您所有的左联接实际上都是内部联接,因为您在 where
子句中使用了 B.xxx='something'
条件。
所以,考虑到上面的问题 -
B的source qualified后,并联添加两个filter FIL1(system_Code='University')和FIL2(System_Code='Policy') .
然后使用 JNR1 在 A.MEMBERSHIPID = B_F1.MEMBERSHIPID 上使用 JOINER 连接 A 和 B(FIL1)。使用 A 作为详细信息 table 并使用 'inner join'.
然后在 A.address = B_F2.address 和 A.phonenumber = B_F2.phonenumber 上使用 JOINER(JNR2) 连接 A 和 B(FIL2)。使用 A 作为详细信息 table 并使用 'inner join'.
然后使用另一个 Joiner(JNR3) 将以上两个管道连接成一个管道。它应该是正常连接并且连接应该是 table A 的主键。获取所有必需的列。
(EXP)然后使用表达式转换。使用类似于以下的逻辑。
out_col1 = IIF( isnull(col_tableB_F1_jnr1),col_tableB_F2_jnr2, col_tableB_F1_jnr1)
整个映射应该是这样的 -
SQ_TABLEB --FIL1-> -- JNR1 \
| | |
| SQ_TABLEA --| JNR3-->EXP.... -->TGT
| | |
|--FIL2-> -- JNR2 /
不过我觉得你的需求可能是这样的-
A LEFT JOIN B
ON A.MEMBERSHIPID = B.MEMBERSHIPID AND B.System_Code='University'
如果是,则将JNR1和JNR2中的inner join
改为master outer join
。
实际上,此映射中总共调用了 4 个表:Market、Cost、A、B,
Read_sourceTB_B-----FIL1------->---------JNR4 \
| | |
| Read_sourceTB_Market--\ | |
| Read_sourceTB_Cost------JNR1--\ | |
| Read_sourceTB_A-----------------JNR2 JNR5--->EXP... -->TGT
| | | |
| | | |
| | | |
---------------------FIL2->---------JNR3 /
SQ_TABLEB --FIL1-> -- JNR1 \
| | |
| SQ_TABLEA --| JNR3-->EXP.... -->TGT
| | |
|--FIL2-> -- JNR2 /
**第一个**加入条件
A LEFT JOIN B
ON A.MEMBERSHIPID = B.MEMBERSHIPID
Where B.System_Code='University'
IF <第一个加入条件>失败,则执行
**第二个**加入条件
A LEFT JOIN B ON
A.address = B.address and A.phonenumber = B.phonenumber
Where B.System_Code='Policy'
我应该使用哪种转换?我不会Informatica,我的版本是Informatica Developer 10.5,求助me.Thanks!
我只会
A left join B on `condition` `System_Code='University'`
left join B on `condition` `System_Code='Policy'`
但我不知道如何做决定
如果 A 加入 B System_Code='University'
失败,
然后A加入BSystem_Code='Policy'
您需要根据两种不同的条件将 A 与 B 连接(两次),然后将它们连接回一个管道以获得 decision/if-else 条件。
另请注意,您所有的左联接实际上都是内部联接,因为您在 where
子句中使用了 B.xxx='something'
条件。
所以,考虑到上面的问题 -
B的source qualified后,并联添加两个filter FIL1(system_Code='University')和FIL2(System_Code='Policy') .
然后使用 JNR1 在 A.MEMBERSHIPID = B_F1.MEMBERSHIPID 上使用 JOINER 连接 A 和 B(FIL1)。使用 A 作为详细信息 table 并使用 'inner join'.
然后在 A.address = B_F2.address 和 A.phonenumber = B_F2.phonenumber 上使用 JOINER(JNR2) 连接 A 和 B(FIL2)。使用 A 作为详细信息 table 并使用 'inner join'.
然后使用另一个 Joiner(JNR3) 将以上两个管道连接成一个管道。它应该是正常连接并且连接应该是 table A 的主键。获取所有必需的列。
(EXP)然后使用表达式转换。使用类似于以下的逻辑。
out_col1 = IIF( isnull(col_tableB_F1_jnr1),col_tableB_F2_jnr2, col_tableB_F1_jnr1)
整个映射应该是这样的 -
SQ_TABLEB --FIL1-> -- JNR1 \
| | |
| SQ_TABLEA --| JNR3-->EXP.... -->TGT
| | |
|--FIL2-> -- JNR2 /
不过我觉得你的需求可能是这样的-
A LEFT JOIN B
ON A.MEMBERSHIPID = B.MEMBERSHIPID AND B.System_Code='University'
如果是,则将JNR1和JNR2中的inner join
改为master outer join
。