使用带小数的模式文件进行数据存档文件序列导入

时间:2013-10-09 20:26:49

标签: database etl datastage

我有一系列CSV,我通过Datastage导入数据库。我试图使用RCP和模式文件来做到这一点。

我使用CSV附带的附带主表格列表从CSV生成模式文件。

我遇到了一个问题。当我发现数字是特定表中的最后一列时,它是模式文件中的最后一个条目。我的问题是空处理。 CSV以逗号分隔,字符串双引号,无null数据。

主列表将这些数列中的一些列标识为number(),这表示输出的oracle描述。为此,我正在尝试这个:

:nullable decimal [38,9] {default = 0,text}; 在这个例子中,除非在别处指定,否则比例和精度默认为38,9 ......,如十进制[10,2]。

空条目会导致此错误: 验证导入/导出功能时:APT_GFIX_Decimal :: validateParameters:十进制“text”格式是可变长度,没有指定外部长度; 你应该指定一个合适的“宽度”属性;外部格式:{text,padchar = 32,nofix_zero,precision = 38,scale = 9,round = trunc_zero,ascii}。 [十进制/ impexp.C:939]

所以我试过了: :nullable decimal [38,9] {default = 0,text,width = 47}; 在此示例中,比例和精度默认为38,9。宽度是两个值的总和(38 + 9 = 47 ......除非在别处指定,例如十进制[10,2]。

我得到了: ODBC_Connector_3,0:字段“”处的输入缓冲区溢出,偏移量为:### [impexp / group_comp.C:6006]

最后,我完全按照它说的做了,并做了这个: :nullable decimal [38,9] {default = 0,text,padchar = 32,nofix_zero,precision =,scale =,round = trunc_zero,ascii,width = 47}; 在此示例中,比例和精度默认为38,9。宽度是两个值的总和(38 + 9 = 47 ......除非在别处指定,例如十进制[10,2]。

第三次,我收到了这个错误:输入缓冲区溢出字段“”,偏移量:### [impexp / group_comp.C:6006]

有没有人碰到这个?如果十进制是表中的最后一列,则只会发生这种情况。

我的记录设置为:{完整,final_delim =无,record_delim ='\ n',charset ='UTF8',delim =','}

非常感谢你。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我试图将上述答案中提到的解决方案以及问题。它没有用。原来,我的目标列有 -decimal(14,10),即小数点前 4 位和小数点后 10 位。尽管我在源中有实际数据,但我在目标中获得了空值。但问题是来源在小数点前有超过 4 位数字。我将目标和源列修改为十进制(16.10)。最重要的是,就像问题中提到的,当我们使用模式文件时,我们不应该把十进制列放在最后。我在源代码的最后放了一个字符串列,将这些和中提琴结合起来!我可以看到我的数据正确加载到目标中。