仅在表中更新数据时重建Informatica持久高速缓存

时间:2016-05-15 04:00:21

标签: oracle etl informatica informatica-powercenter

由于性能问题,我要求在Informatica中为大型表构建持久性缓存。我的要求是只有在表中有一些变化(数据库是oracle)时才构建这个缓存​​。在我的情况下,表每周/每月更新数据。

我试图弄清楚informtica将如何理解表格中有一些变化,现在需要重建缓存。是否有任何优雅的方法来实现这一目标?

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

谢谢

1 个答案:

答案 0 :(得分:2)

enter image description here

在此示例中,我在查询中使用源表gen myvar = $letter (Note: this doesn't work) 作为示例表。缓存文件也以 //popups var element = document.getElementById('popup'); var popup = new ol.Overlay({ element: element, positioning: 'bottom-center', stopEvent: false }); map.addOverlay(popup); // display popup on hover map.on('pointermove', function(evt) { var feature = map.forEachFeatureAtPixel(evt.pixel, function(feature, layer) { return feature; }); if (feature) { var geometry = feature.getGeometry(); var coord = geometry.getCoordinates(); popup.setPosition(coord); $(element).popover({ 'placement': 'top', 'html': true, 'content': feature.get('name') }); $(element).popover('show'); } else { $(element).popover('destroy'); } }); 开头。

我在主会话之前创建了2个虚拟会话。

  1. 创建一个运行表,并将最后一个会话运行时间保存在其中。

    emp_location

    在主会话的会话前任务中,使用类似的内容。

    emp_location*
  2. 现在找时间,你的桌子已经更新了。如果表没有 select * from run_history where process_name='EMP_DIM' +--------------+----------------------+ | PROCESS_NAME | LAST_READ_TIME | +--------------+----------------------+ | EMP_DIM | 15-MAY-2016 12:00:07 | +--------------+----------------------+ 列,请使用此列来获取表的最新更新时间。

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

    现在是第一个虚拟会话,使用此查询。如果在update time之后在源表中更新了某些内容,它将返回1行。如果没有,那么它将返回0行。

    select scn_to_timestamp(max(ora_rowscn)) 
    from emp_location;
    
    1. 在链接任务中,将条件设为last_read_time

      所以下一个会话只会在真正的变化时运行。在其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 post_session_task Windows: del $PMCacheDir\emp_location*

    2. 此链接任务将具有类似的条件。 Unix:

    3. 在主会话中,打开rm -rf $PMCacheDir\emp_location*标签并使用IIF($s_check_last_update.TgtSuccessRows=1,0,1)

      现在,Integration服务将重新创建新的缓存文件(如果已删除)。

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