仅当 table 中的数据更新时才重建 Informatica 持久缓存

Rebuild Informatica persistent cache only when data is updated in the table

由于性能问题,我需要在 Informatica 中为大型 table 构建持久缓存。我的要求是仅当 table(数据库是 oracle)发生一些变化时才构建此缓存。在我的例子中 table 更新数据 weekly/monthly。

我正在尝试弄清楚 informtica 将如何理解 table 中的一些变化,它现在需要重建缓存。有什么优雅的方法可以实现这一目标吗?

我能想到的一种方法是,每次更新查找 table 时创建一个包含查找 table 数据的平面文件。使用平面文件作为查找。 现在,在我的情况下这是可能的,因为查找 table 正在通过 Informatica 加载。如果它在 informatica 之外更新怎么办?

谢谢

在此示例中,我在查询中使用源 table emp_location,作为您的示例 table。缓存文件也以 emp_location*.

开头

我在你的主要 session 之前创建了 2 个虚拟 session。

  1. 创建一个运行table,将最后的session运行时间保存在里面

     select * 
     from run_history
     where process_name='EMP_DIM'
    
    +--------------+----------------------+
    | PROCESS_NAME |    LAST_READ_TIME    |
    +--------------+----------------------+
    | EMP_DIM      | 15-MAY-2016 12:00:07 |
    +--------------+----------------------+
    

    在你的主要 session 的前 session 任务中,使用类似这样的东西。

    update run_history 
    set last_read_time = sysdate
    where process_name='EMP_DIM';
    

现在找时间,你的table已经更新了。如果 table 没有 update time 列,使用它来获取 table.

的最新更新时间
select scn_to_timestamp(max(ora_rowscn)) 
from emp_location;

现在是第一个虚拟 session,使用这个查询。如果在 last_read_time 之后在源 table 中更新了某些内容,它将 return 1 行。如果没有,那么它将 return 0 行。

select 1 from dual
where 
    (select scn_to_timestamp(max(ora_rowscn)) 
      from emp_location)
>
    (select last_read_time 
       from run_history
       where process_name='EMP_DIM')
  1. 在 link 任务中,将条件设为 $s_check_last_update.TgtSuccessRows=1

    所以接下来 session 只会 运行 当有真正的变化时。在其post_session_task 运行 一条命令中清除缓存文件。

    Windows: del $PMCacheDir\emp_location* Unix:rm -rf $PMCacheDir\emp_location*

  2. 此 link 任务的条件如下。 IIF($s_check_last_update.TgtSuccessRows=1,0,1)

  3. 在主 session 中,打开 General 选项卡并使用 Treat Input links as OR

    现在集成服务将重新创建新的缓存文件,如果它们被删除。

或者,您可以通过 shell/bash 脚本实现相同的目的,该脚本将连接到 Oracle 并检查在上次读取时间后 table 中是否有更新。如果为真,它应该删除缓存文件。