由于性能问题,我要求在Informatica中为大型表构建持久性缓存。我的要求是只有在表中有一些变化(数据库是oracle)时才构建这个缓存。在我的情况下,表每周/每月更新数据。
我试图弄清楚informtica将如何理解表格中有一些变化,现在需要重建缓存。是否有任何优雅的方法来实现这一目标?
我能想到的一种方法是,每次更新查找表时,使用查找表数据创建一个平面文件。使用平面文件作为查找。 现在,在我的情况下这是可能的,因为查找表是通过Informatica加载的。如果它在informatica之外更新怎么办?
谢谢
答案 0 :(得分:2)
在此示例中,我在查询中使用源表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个虚拟会话。
创建一个运行表,并将最后一个会话运行时间保存在其中。
emp_location
在主会话的会话前任务中,使用类似的内容。
emp_location*
现在找时间,你的桌子已经更新了。如果表没有 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;
在链接任务中,将条件设为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*
此链接任务将具有类似的条件。 Unix:
。
在主会话中,打开rm -rf $PMCacheDir\emp_location*
标签并使用IIF($s_check_last_update.TgtSuccessRows=1,0,1)
。
现在,Integration服务将重新创建新的缓存文件(如果已删除)。
或者,您可以通过shell / bash脚本实现相同的功能,该脚本将连接到Oracle并在上次读取时间之后检查表中是否更新了某些内容。如果为true,则应删除缓存文件。