我有一些映射,在转换逻辑之后填充业务实体。行卷位于较高的一侧,并且有相当多的业务属性默认为某些静态值。
因此,为了减少从映射推送的数据,我在目标表上创建了“default”子句,并停止从映射本身提供它们。现在,当我在“正常”模式下运行会话时,这很好用。这有效地为我提供了目标表行,其中一些列由映射提供,其余列根据表DDL上的“default”子句获取值。
但是,由于我们正在处理更高端的卷,因此我希望以批量模式运行会话(目标表上没有预先存在的索引)。
只要我将会话切换到批量模式,此特定功能(默认值)就会停止工作。因此,我在目标列中获取NULL值,而不是定义“默认”值。
我想知道 -
我的配置 -
Informatica 9.5.1 64位, 同 Oracle 11g r2(11.2.0.3) 继续前进 Solaris(SunOS 5.10)
期待在这里提供帮助......
答案 0 :(得分: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,则为null 值被插入到数据库中。
这可能就是这种行为的原因。
答案 1 :(得分:1)
我不相信你会看到不包括默认值的好处,特别是与直接路径加载的好处相比。如果数据是只读的,那么也要考虑压缩。
您还应该注意,SQL * Net在同一列中对相同值进行压缩,因此即使在传统路径插入中,网络开销也不如您想象的那么高。