源限定符允许值超过 Informatica 中定义的大小

Posted

技术标签:

【中文标题】源限定符允许值超过 Informatica 中定义的大小【英文标题】:Source qualifier allowing value more than defined size in Informatica 【发布时间】:2021-06-28 09:53:42 【问题描述】:

我的一个 informatica 会话表现异常。对于特定列的精度和刻度值分别定义为 17,16 并启用高精度。 根据精度和比例值,它应该允许小数点前只有一位数的数字,但在我的会话中,它允许小数点前最多 2 位,小数点前 3 位失败,错误 无效数字 .我很困惑为什么它允许 2digits 数字,因为它也应该失败? 例如:精度 17,刻度 16 1.4567--允许 12.4567--允许 123.4567--拒绝

除此之外,我观察到在源中,该列的数据类型为数字,但进入源限定符时,同一列的数据类型为十进制。为什么会发生这种内部转换?

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

至于问题的第二部分:Source Qualifier 转换功能之一是将任何 Source 数据类型转换为 PowerCenter 数据类型。无论您使用什么来源,Source Qualifier 都会转换数据类型。这样您就可以得到相同的数据类型,并且在 Orace 和 MS SQL Server 之间进行比较不会有问题。

【讨论】:

【参考方案2】:

这是在“12.4567 -- 允许”的情况下发生的情况。由于您启用了高精度模式,因此 infa 会自动将十进制转换为双精度。 Double 是 8 字节数据。所以,如果你设置一些东西 col(11,9) 并尝试插入 1234567890.1,infa 将失败。 摘要 -如果您指定的精度大于最大位数,数据集成服务会在高精度模式下将十进制值转换为双精度值。

这是根据 Infa 文档

8 bytes (if high precision is off or precision is greater than 38) 
16 bytes (if precision <= 18 and high precision is on) 
20 bytes (if precision > 18 and <= 28) 
24 bytes (if precision > 28 and <= 38)   

具有声明精度和小数位数的十进制值。比例必须小于或等于精度。 对于支持高达 38 位精度的转换,精度为 1 到 38 位,比例为 0 到 38。 对于支持高达 28 位精度的转换,精度为 1 到 28 位,比例为 0 到 28。 如果您指定的精度大于最大位数,数据集成服务会在高精度模式下将十进制值转换为双精度值。

https://docs.informatica.com/data-integration/powercenter/10-2/developer-tool-guide/data-type-reference/transformation-data-types.html

【讨论】:

以上是关于源限定符允许值超过 Informatica 中定义的大小的主要内容,如果未能解决你的问题,请参考以下文章

第3章—高级装配—创建自定义的限定符

Informatica参考

尾随返回类型的“覆盖”限定符在哪里?

spring:自定义限定符注解@interface, 首选bean

java成神之——注释修饰符

const限定符