informatica多相关子查询实现

informatica multi correlated subquery implementation

我面临一项任务,由于我缺乏使用 Informatica 组件的经验,尤其是 SQL 转换,我尚未实施。 那么 PowerCenter 中实现这种子查询的最佳方法是什么:

SELECT
   A.ID,
   NVL2(A.SACHKONTO, B.KLAMMER, A.ID) AS KLAMMER
FROM
Table1 A,
    (SELECT
       A.ID AS KLAMMER,
       B.ID
FROM
    (SELECT
        ID,
        ID AS VON_ID,
        LEAD(ID,1) OVER (ORDER BY ID) - 1 AS BIS_ID
    FROM
        Table1
    WHERE
        SACHKONTO IS NULL) A,
    Table1 B
WHERE
    B.ID BETWEEN A.VON_ID AND A.BIS_ID
) B
WHERE
  A.ID = B.ID

所以我尝试了不同的方法并取得了小成功。 第一个是 "decompose" SQL 的一小部分(我会在必要时参考或编辑问题)。 我还尝试放置所有查询(在将其适应 Informatica SQL "language" 之后,但没有成功。

这是我在不考虑性能重要性的情况下复制此类查询的最接近的解决方案(我确实在 SQ 中使用了 SQL 覆盖),但是从 table 结果来看,加入没有得到适当的处理,那么我相信我需要添加另一个管道让以正确的顺序执行加入:

我的映射解决方案:

您可以将子查询放入查找转换中,然后匹配来自外部查询的记录(我假设这将是您根据 A.ID = B.ID 来自原始查询,然后稍后过滤空值)

或者您可以类似地使用 2 个源限定符(一个用于父查询,另一个用于子查询),然后是具有普通连接类型的连接器转换。这种方式将比我的第一个选项更快地过滤您的源数据,因此性能方面应该更好。

最终选择是使用源限定符 sql 重写与您当前的查询相同...过滤记录就在数据库中,所以在那里加号(只要查询本身是最佳的)但是sql 覆盖未在更广泛的映射上下文中得到验证,并且可能 spring 出乎意料的意外,因此应谨慎使用。