netezza 双精度输出截断值
netezza Double Precision Output Truncates Vaules
我注意到 nzsql 和 'nzunload' 只是截断了双精度列的尾数值。这是问题所在:
select tot_amt
来自表 1;
tot_amt
~~~~~~~
123.124
567.678
而当我使用 Aginity 等其他客户端进行数据分析时 - 我得到的输出是
tot_amt
~~~~~~~
123.1240535
567.6780122
我还发现 'truncation' 当 netezza 在 3 个尾数数字后遇到 0 时会发生这种情况。
我们正在尝试将此数据库迁移到 oracle,由于这个问题,整个项目都一团糟,客户不信任我们的迁移脚本。有没有人遇到过这个问题?唯一的解决方法,即使是 IBM 工程师也是如此 TO_CHAR( '999,999.999', col )
如果我必须为数十亿行执行此操作,这将终止卸载脚本。
我可以在创建一个 table 列作为 FLOAT(6) 的地方重现此问题,例如:
USERDB.USER(USER)=> create table ZZ (
USERDB.USER(USER)(> YY FLOAT(6)
USERDB.USER(USER)(> );
CREATE TABLE
USERDB.USER(USER)=> insert into ZZ (yy) values (123.123456789);
INSERT 0 1
USERDB.USER(USER)=> insert into ZZ (yy) values (12.123456789);
INSERT 0 1
USERDB.USER(USER)=> select * from ZZ;
YY
---------
123.123
12.1234
(2 rows)
USERDB.USER(USER)=> select CAST ( YY as FLOAT(15) ) from ZZ;
?COLUMN?
----------------
123.1234588623
12.123399734497
(2 rows)
USERDB.USER(USER)=>
我可以将列值转换为更宽的类型,但是我看到的问题是我插入的值与返回的值不同。如果我也用Aginity查询也是一样,数值不对。
检查 table1 中 'tot_amt' 列的精度(和小数位数),我猜用于存储值的数据类型非常小(可能是 FLOAT(6)?),并且NZSQL 会根据数据类型告诉您正确的值。
我注意到 nzsql 和 'nzunload' 只是截断了双精度列的尾数值。这是问题所在:
select tot_amt
来自表 1;
tot_amt
~~~~~~~
123.124
567.678
而当我使用 Aginity 等其他客户端进行数据分析时 - 我得到的输出是
tot_amt
~~~~~~~
123.1240535
567.6780122
我还发现 'truncation' 当 netezza 在 3 个尾数数字后遇到 0 时会发生这种情况。
我们正在尝试将此数据库迁移到 oracle,由于这个问题,整个项目都一团糟,客户不信任我们的迁移脚本。有没有人遇到过这个问题?唯一的解决方法,即使是 IBM 工程师也是如此 TO_CHAR( '999,999.999', col )
如果我必须为数十亿行执行此操作,这将终止卸载脚本。
我可以在创建一个 table 列作为 FLOAT(6) 的地方重现此问题,例如:
USERDB.USER(USER)=> create table ZZ (
USERDB.USER(USER)(> YY FLOAT(6)
USERDB.USER(USER)(> );
CREATE TABLE
USERDB.USER(USER)=> insert into ZZ (yy) values (123.123456789);
INSERT 0 1
USERDB.USER(USER)=> insert into ZZ (yy) values (12.123456789);
INSERT 0 1
USERDB.USER(USER)=> select * from ZZ;
YY
---------
123.123
12.1234
(2 rows)
USERDB.USER(USER)=> select CAST ( YY as FLOAT(15) ) from ZZ;
?COLUMN?
----------------
123.1234588623
12.123399734497
(2 rows)
USERDB.USER(USER)=>
我可以将列值转换为更宽的类型,但是我看到的问题是我插入的值与返回的值不同。如果我也用Aginity查询也是一样,数值不对。
检查 table1 中 'tot_amt' 列的精度(和小数位数),我猜用于存储值的数据类型非常小(可能是 FLOAT(6)?),并且NZSQL 会根据数据类型告诉您正确的值。