2

我有一些映射,在转换逻辑之后填充业务实体。行卷偏高,有不少业务属性默认为某些静态值。

因此,为了减少从映射推送的数据,我在目标表上创建了“默认”子句,并停止从映射本身提供它们。现在,当我在“正常”模式下运行会话时,效果很好。这有效地为我提供了目标表行,其中一些列由映射提供,其余列基于表 DDL 上的“默认”子句获取值。

但是,由于我们正在处理更高端的卷,我想以批量模式运行我的会话(目标表上没有预先存在的索引)。

一旦我将会话切换到批量模式,此特定功能(默认值)就会停止工作。因此,我在目标列中得到 NULL 值,而不是定义的“默认”值。

我想知道 -

  1. 这是预期的行为吗?
  2. 如果没有,我是否错过了某处的某些配置?
  3. 我应该给甲骨文买票吗?或 Informatica ?

我的配置-

Informatica 9.5.1 64 位,Oracle 11g r2 (11.2.0.3) 在 Solaris (SunOS 5.10) 上运行

期待在这里提供帮助...

4

2 回答 2

3

可能是预期的行为。

似乎 Informatica 中的批量模式在 Oracle 中使用“直接路径”API(参见例如https://community.informatica.com/thread/23522

从本文档(http://docs.oracle.com/cd/B10500_01/server.920/a96652/ch09.htm,搜索字段“直接路径上的默认值”)我收集到:

使用直接路径加载时,数据库中定义的默认列规范不可用。需要默认值的字段必须使用 DEFAULTIF 子句指定。如果未指定 DEFAULTIF 子句且字段为 NULL,则将空值插入数据库。

这可能是这种行为的原因。

于 2013-06-19T21:19:09.097 回答
1

我不相信您会从不包括默认值中看到很大的好处,特别是与直接路径加载的好处相比。如果数据是只读的,那么也要考虑压缩。

您还应该注意,SQL*Net 对同一列中的相同值进行压缩,因此即使在传统的路径插入中,网络开销也没有您想象的那么高。

于 2013-06-19T22:13:25.050 回答