2017-11-04 6 views
0

Ich habe eine Hive-Abfrage, die die Summe einer Spalte in exponentieller Form (3.52504582E+8) generiert. In SQL erhalte ich einen numerischen Wert aus einer RDBMS-Tabelle. Beide Ausgaben schreibe ich in Dateien und vergleiche die Diff der beiden Dateien in UNIX für die Validierungsprüfung.Hive- oder UNIX-Ausgabe in Exponential E

Gibt es eine Möglichkeit, 3.52504582E+8 in 352504582 entweder in Hive oder auf UNIX-Ebene zu konvertieren, so dass die Validierung erfolgreich ist?

Hive Tabelle Summe: 3.52504582E+8

RDBMS Tabelle Summe: 352504582

diff <file1> <file2> Validierung fehlgeschlagen.

+0

aber '352504582E8' nicht gleich' 352504582' bei allen – RomanPerekhrest

+0

Dies ist, was Hive wird in die Textdatei zu schreiben. Gibt es eine Möglichkeit, dies auf UNIX-Ebene zu tun? 352504582E8 bis 352504582 – Dudul

+0

Hive unterstützt "printf()" seit V0.9, so dass Sie Ihre Summe direkt in einen String mit dem gewünschten Format konvertieren können. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF –

Antwort

0

Gibt es eine Möglichkeit 3.52504582E + 8-352.504.582 entweder in hive oder auf UNIX Gültigkeitsprüfungsstufe sothat zu konvertieren gelingt?

$ printf "%.f\n" 3.52504582E+8 
352504582 

$ awk '{print $1+0}' <<< "3.52504582E+8" 
352504582 

$ awk '{printf("%.f\n",$1)}' <<< "3.52504582E+8" 
352504582 

Ich brauche das Ergebnis in der Ausgabedatei von Hive zu ändern. Wird die oben nur drucken oder dauerhafte Änderungen vornehmen? Die Datei wird 2 Felder und ~ getrennt haben. 262 ~ 3.52504582E + 8

# if this is your input file 
$ cat infile 
262~3.52504582E+8 

# result after 
$ awk 'BEGIN{FS=OFS="~"}{$2+=0}1' infile 
262~352504582 

Erläuterung:

  • FS - Eingabefeldtrenn, OFS - Ausgabefeldtrenn setzen wir sowohl FS und OFS als ~

  • $2+=0 awk konvertiert automatisch hier

  • 1 Am Ende wird der Standardvorgang ausgeführt, der aktuell/record/row, print $0 gedruckt wird. Um zu wissen, wie awk funktioniert, versuchen Sie awk '1' infile, die alle Datensätze/Zeilen drucken wird, während awk '0' infile nichts druckt. Eine andere Zahl als Null ist true, die das Standardverhalten auslöst.

+0

Ich muss das Ergebnis in der Ausgabedatei von Hive ändern. Werden die oben genannten nur drucken oder dauerhafte Änderungen vornehmen? Die Datei hat 2 Felder und ~ getrennt. 262 ~ 3.52504582E + 8 – Dudul

+0

@Dudul sehe ich aktualisiert –

+0

Oh cooler Mann. Vielen Dank. Hoffe, das funktioniert für meinen Fall. Vielen Dank. Ich habe den zweiten Teil jedoch nicht verstanden, den in Klammern. – Dudul