【发布时间】:2019-11-02 19:27:31
【问题描述】:
这是一件非常奇怪的事情,我不知道为什么。我创建了一个映射,它通过表达式转换数据并根据对同一目标的查找将数据加载到目标(文件)中。
Source table
#CompanyName
Acne Lmtd
Acne Ltd
N/A
None
Abc Ltd
Abc Ltd
X
映射
Source
->Exp(trim..)
->Lookup(source.company_name
= tgt.company_name)
ReturnPort is CompId
-> filter(ISNULL(CompId))
-> Target
Compid (via sequence
gen)
CompName
上述映射逻辑插入重复的公司名称,就像在源 2 Abc Ltd 记录中一样,在目标中也重复。我不知道为什么。我也尝试过调试,即使该记录已经插入到目标中,过滤器中的条件评估为 true,companyid 为空。
另外,我认为这可能是查找缓存的情况,我也启用了动态,但结果相同。它应该像 sql 查询一样工作
select company_id
From lkptarget where
company_name
In (select company_name
from
Source)
因此,对于 Abc Ltd,过滤条件应为 false
Isnull(company_id) false
但是,这正在成为现实。如何在不使用 distinct 的情况下通过查找获得唯一记录?
注意:使用的查找已经是动态查找
【问题讨论】:
-
您始终可以使用
Aggregator transform并按您想要使其与众不同的所有数据进行分组。因此,如果您按所有列分组,则只有那些不同的列最终会出现。 -
嗯,但我不想以任何方式使用 distinct,我想我已经在上面提到过。我在上面所做的是在目标上应用查找记录(如果存在),但在过滤时它显示为空,这意味着记录不存在,即使它确实存在
-
有什么特别的理由不想用吗?
-
这是给我的任务。即使我什至不需要聚合器,我也可以在源限定符中使用 distinct,但正如我所说,它的任务是通过查找来实现它
-
那么您可以使用 group by 子句来删除 distinct。
标签: sql oracle11g informatica informatica-powercenter