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

标签 oracle etl informatica informatica-powercenter

由于性能问题,我需要在 Informatica 中为大型表构建持久缓存。我的要求是仅当表中有一些更改时才构建此缓存(数据库是oracle)。就我而言,表每周/每月更新数据。

我试图弄清楚 informtica 如何理解表中存在一些变化,并且现在需要重建缓存。有什么优雅的方法来实现这一点吗?

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

谢谢

最佳答案

enter image description here

在此示例中,我在查询中使用源表 emp_location 作为示例表。此外,缓存文件以 emp_location* 开头。

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

  1. 创建一个运行表,并在其中保存最后一次 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';
    

现在查一下时间,您的表格已更新。如果表没有更新时间列,请使用它来获取表的最新更新时间。

select scn_to_timestamp(max(ora_rowscn)) 
from emp_location;

现在是第一个虚拟 session ,请使用此查询。如果在 last_read_time 之后源表中发生了更新,它将返回 1 行。如果不是,那么它将返回 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')
  • 在链接任务中,将条件设置为 $s_check_last_update.TgtSuccessRows=1

    因此,只有在发生真正的更改时才会运行下一个 session 。在其 post_session_task 中运行命令来清除缓存文件。

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

  • 此链接任务将具有如下条件。 IIF($s_check_last_update.TgtSuccessRows=1,0,1)

  • 在主 session 中,打开常规选项卡并使用将输入链接视为 OR

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

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

    关于oracle - 仅当表中的数据更新时才重建 Informatica 持久缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37234416/

    相关文章:

    java - 使用 Jsoup 提取 HTML 数据

    适用于 Informatica 9.5 的 MySQL

    php - 通过 PHP PDO 从 Oracle SP 获取数据【Output is cursor】

    javascript - 每当节点服务器上的数据发生变化时写入整个 SQL 表(很奇怪,请耐心等待)

    sql-server - 如何为平面文件中的每个项目执行 SSIS 包?

    performance - 使用Hive/Hadoop连接两个排序的文件

    sql - 如何使用转换在 INFORMATICA 中创建一系列日期范围?

    sql-server - 由于 SQL Server 没有包,程序员如何绕过它呢?

    mysql - 在oracle中选择动态列

    MySQL - 行到列