2016-06-23 14 views
0

Ich habe festgestellt, dass die nzsql und 'nzunload' nur die Mantisse-Werte der Doppelpräzisionsspalte abschneidet. Hier ist das Problem:netezza Double Precision Output schneidet Vaules

wählen Sie tot_amt aus Tabelle1;

tot_amt 
~~~~~~~  
123.124  
567.678 

während, wenn ich andere Kunden wie Aginity für Datenanalyse verwenden - der Ausgang ich erhalte, ist

tot_amt 
~~~~~~~ 
123.1240535 
567.6780122 

Auch habe ich das ‚Abschneiden‘ gefunden passiert, wenn Netezza 0 nach 3 Mantisse Ziffern Begegnungen .

Wir versuchen, diese Datenbank nach Oracle zu migrieren, und aufgrund dieses Problems wird das gesamte Projekt durcheinander gebracht und der Client vertraut unseren Migrationsskripts nicht. Ist jemand auf dieses Problem gestoßen? Die einzige Problemumgehung, auch für IBM-Entwickler, ist das Umwandeln von TO_CHAR('999,999.999', col). Dies wird die Entlade-Skripte beenden, wenn ich es für Milliarden von Zeilen tun muss.

+1

Bitte geben Sie das ddl für die Tabelle und die Version von netezza an. Die einzige Frage in dem, was Sie geschrieben haben, ist "Ist jemand auf dieses Problem gestoßen?" Ich kann "Ich habe nicht" sagen und ein Beispiel von nzsql einfügen, das doppelt präzise Spalten richtig und wie erwartet meldet, aber das ist wahrscheinlich keine nützliche Antwort. – ScottMcG

Antwort

0

kann ich dieses Problem reproduzieren, wo ich eine Tabelle mit Spalte als FLOAT (6) wie geschaffen haben:

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)=> 

Ich kann werfen die Spaltenwerte zu einem größeren Typ, aber das Problem, das ich sehe ist, dass Der eingegebene Wert entspricht nicht dem zurückgegebenen Wert. Und das gleiche gilt, wenn ich Aginity auch zur Abfrage verwende, sind die Werte falsch.

Überprüfen Sie die Genauigkeit (und Skalierung) der 'tot_amt' Spalte in Tabelle1, ich denke, der Datentyp zum Speichern von Werten ist ziemlich klein (FLOAT (6) vielleicht?), Und NZSQL sagt Ihnen die richtigen Werte erzwungen durch den Datentyp.