我在Teradata数据库中有两个表。我需要在那里进行Informatica BDM的查找转换。查找条件如下:
table1.col1 = table2.col1
table1.col2 = table2.col2
table1.col3 = table2.col3
table1.col4 = table2.col4
问题是,在table1中,在col2,col3,col4中,可以有值'*',这类似于通配符,这意味着例如col3中的这个值可以连接到table2.col3中的任何值。换句话说,我需要创建查找transforamtion,如下面的代码>
select a.*, b.col4, b.col5
from tablea a left join
tableb b
on (b.col2 = a.col2 or b.col2 = '*') and
(b.col3 = a.col3 or b.col3 = '*')
qualify 1 = row_number() over (partition by a.id order by (case when b.col2 = '*' then 2 else 1 end), (case when b.col3 = '*' then 2, else 1 end))
先感谢您!
我以某种方式想出来,所以我提供了可能的解决方案,以防它对任何人有帮助。
在查找转换中定义更复杂的查找条件是不可能的。即使您选择通过 - >参数指定并尝试定义查找条件。 Informatica只允许简单的条件,如input_col1 = lookup_col1和input_col2 = lookup_col2。不允许使用更复杂的条件,如b.col2 = a.col2或b.col2 ='*'。
但在这种情况下,可以使用连接器转换,可以在连接类型 - >参数中定义之前提到的更复杂的条件。
这解决了我的问题。希望它可以帮助某人。