Zusätzliche Informationen zu Konvertierungen, Typen und Formaten
Der Prozessor vom Typ Type converter (Typkonverter) ermöglicht Ihnen die Durchführung zahlreicher Konvertierungsvorgänge für einen eingehenden Datensatz.
Sie können entweder die Datentypen Primitive (Primitiv) oder die Datentypen Semantic (Semantisch) konvertieren.
Quell- und Zieltypen
-
Primitive Typen: null, boolean, int, long, float, double, bytes, string. Dazu gehören ebenfalls folgende Typen:
-
Komplexe Typen: record, enum, array, map, union, fixed
-
Logische Typen: date:int, time-millis:int, time-micros:long, timestamp-millis:long, timestamp-micros:long, duration:fixed(12), decimal:fixed|bytes
-
- Semantische Typen: Hierbei handelt es sich um vordefinierte, von Talend Cloud beim Abrufen der Felder eines Datensatzes vorgeschlagene semantische Typen. Weitere Informationen finden Sie unter Verwalten semantischer Typen.
Fehler und Warnungen
-
Parsing-Ausnahmen mit ungültigen DateFormat/DecimalFormat-Mustern.
-
Quellen, die eine Ausnahme aufgrund ungültiger parse- oder valueOf-Konvertierungen auslösen.
-
Nicht genügend Quellbytes für die Erstellung eines Zielwerts.
Datumsorientierte Formate (nur für primitive Typen)
Wenn es sich beim Quell- oder Zielwert um einen datums-/zeitorientierten Wert handelt UND der andere Wert eine Zeichenfolge (String) ist, wird das Format in der Konvertierung verwendet, wie in der DateTimeFormatter-Dokumentation beschrieben. Ist kein Format vorhanden, dann wird das mit Java bereitstehende ISO 8601-Standardformat verwendet.
DateTime umfasst Informationen zu Kalendertag und Uhrzeit.
Format |
String |
---|---|
EEE, MMM d, ''yy 'at' h:mm a |
Tue, Nov 28, '17 at 12:44 PM (Dienstag, 18. Nov. 17 um 12:44 Uhr) |
yyyyy.MMMM.dd GGG hh:mm a |
02017.November.28 AD 12:44 PM |
-
Kein Feld kleiner als ein Tag darf in einem Date-Format vorhanden sein. Im Date-Typ sind keine "Stunden" enthalten: yyyy-MM-dd (jjjj-MM-tt).
-
Kein Feld größer als eine Stunde darf in einem Time-Format vorhanden sein. Im Time-Format ist kein "Tag" enthalten: HH:mm:ss.SSS.
Nummernformate (nur für primitive Typen)
Format |
String |
---|---|
'#'# |
#1, #12345, #-123 |
$#,##0.00;($#,##0.00) |
$1,234.56, $0.50, ($1.00), ($1,234.56) |
Für Konvertierungen gelten einige logische Regeln:
- Die Formate Integer und Long beispielsweise, die einen Dezimalpunkt enthalten, verursachen einen Fehler.
Beispiele
-
: Erweiternde primitive Konvertierungen, bei denen keine Informationen verloren gehen.
-
: Erweiternde primitive Konvertierungen, bei denen möglicherweise Informationen verloren gehen.
-
: Das DateFormat-Muster wird, wenn vorhanden, für String-Konvertierungen mit date/time-Typen verwendet.
-
Wenn es sich bei der Quelle um einen logischen Typ date, time-millis, timestamp-millis handelt (time-micros und timestamp-micros werden als lange Werte behandelt) oder das Ziel „Date“, „Time“ oder „DateTime“ ist.
-
Wenn kein Muster vorhanden ist, verwenden die Typen „Date/Time/DateTime“ spezifische ISO-8601-Muster.
- Datum: yyyy-MM-dd
- Uhrzeit: HH:mm:ss
- Datum/Uhrzeit: yyyy-MM-dd'T'HH:mm:ss'Z'
-
-
: Das DecimalFormat-Muster wird, wenn vorhanden, für String-Konvertierungen mit numerischen Typen verwendet. Andernfalls wird auf Integer.valueOf() oder Integer.toString() zurückgegriffen (mit dem entsprechenden Zielwert).
-
Bei einer Konvertierung zwischen unterstützten datumsorientierten Typen und Zahlen wird das Format nicht verwendet.
-
Date (Datum): Die ein-/ausgehende Zahl ist die Anzahl an Tagen seit 01.01.1970 (int).
-
Time (Uhrzeit): Die ein-/ausgehende Zahl ist die Anzahl an Millisekunden seit 00:00:00 (int).
-
DateTime (Datum/Uhrzeit): Die ein-/ausgehende Zahl ist die Anzahl an Millisekunden seit 01.01.1970 00:00:00 (int).
-
-
Wenn es sich bei Quelle und Ziel um datumsorientierte Typen und Zahlen handelt, werden die Datum- und Uhrzeitkomponenten zwischen den zwei Werten konsistent gehalten. Alles, was unbekannt ist, wird relativ zu 1970-01-01 00:00:00 festgelegt. Bei der Konvertierung einer Uhrzeit (ohne Datumskomponente) in ein Datum beispielsweise wird stets 1970-01-01 (01.01.1970) zurückgegeben.
Weitere Informationen finden Sie in der Oracle-Dokumentation.
Quelltyp (Avro) |
Quellwert |
Format |
Zieltyp |
Zielwert |
---|---|---|---|---|
int (Intern) |
12345 |
- |
Long (Lang) |
12345L (bei der erweiternden Konvertierung geht nichts verloren) |
Long (Lang) |
12345L |
- |
Integer (Ganzzahl) |
12345 (eingrenzende Konvertierungen können OK sein, in der Regel mit Daten mit wenig signifikanten Stellen) |
Long (Lang) |
1234567890123456789L |
- |
Integer (Ganzzahl) |
2112454933 (bei eingrenzenden Konvertierungen können Daten verloren gehen, allerdings auf gut definierte Weise – in diesem Fall werden die letzten vier Byte von long als int interpretiert) |
Long (Lang) |
1234567890123456789L |
- |
Double (Doppelwert) |
1234567890123456770.0d (bei einigen erweiternden Konvertierungen kann sich die Genauigkeit auf gut definierte Weise verschlechtern) |
Long (Lang) |
0x8000000000000000L(MIN_VALUE) |
- |
Integer (Ganzzahl) |
0 (eine eingrenzende Konvertierung verwendet die letzten vier Byte) |
string |
"1234.5" |
- |
Integer (Ganzzahl) |
Fehler -- Parsing von Gleitkommawerten ohne Format nicht möglich |
string |
"1234.5" |
# |
Integer (Ganzzahl) |
1234 (Format nach dem Dezimalpunkt verworfen) |
string |
"1234.5" |
#.# |
Integer (Ganzzahl) |
1234 (selbst bei einem Format mit Dezimalpunkt kann die eingehende Zeichenfolge in eine Zahl konvertiert werden) |
boolean (boolescher Wert) |
false |
- |
Integer (Ganzzahl) |
0 |
boolean (boolescher Wert) |
true |
- |
Integer (Ganzzahl) |
1 |
boolean (boolescher Wert) |
false |
- |
Date (Datum) |
1970-01-01 (null Tage seit 01.01.1970) |
boolean (boolescher Wert) |
true |
- |
Date (Datum) |
1970-01-01 (ein Tag seit 01.01.1970) |
boolean (boolescher Wert) |
false |
- |
Time (Uhrzeit) |
00:00:00.000 (null Millisekunden seit Mitternacht) |
boolean (boolescher Wert) |
true |
- |
Time (Uhrzeit) |
00:00:00.001 (eine Millisekunde seit Mitternacht - beachten Sie, dass, wenn keine Millisekunden angezeigt werden, dies genau wie false aussieht, obwohl die zugrunde liegenden Daten andere sind) |
timestamp-millis (Zeitstempel-Millisekunden) |
2017-11-28T12:44:22Z |
yyyyMMdd (jjjjMMtt) |
String (Zeichenfolge) |
20171128
InformationshinweisAnmerkung: Die Konvertierung timestamp-millis > String ist mit Testdatensätzen nicht möglich.
|
String (Zeichenfolge) |
20171128 |
yyyyMMdd (jjjjMMtt) |
timestamp-millis (Zeitstempel-Millisekunden) |
2017-11-28T00:00:00Z (Stunden, Minuten und Sekunden sind 0) |
String (Zeichenfolge) |
"20171128" |
yyyyMMdd (jjjjMMtt) |
Date (Datum) |
2017-11-28 |
int (Intern) |
20171128 |
- |
Date (Datum) |
+57196-09-03 (20.171.128 Tage nach 01.01.1970) |
time-millis (Uhrzeit-Millisekunden) |
12:44:22 |
- |
DateTime (Datum/Uhrzeit): |
1970-01-01T12:44:22Z (das in der Quelluhrzeit kein Datumsteil enthalten ist, wird „1970-01-01“ verwendet) |
timestamp-millis (Zeitstempel-Millisekunden) |
2017-11-28T12:44:22Z |
- |
Date (Datum) |
2017-11-28 (die Zeitkomponente wird entfernt, die zugrunde liegende Zahl wird von 1511873062123L in 17498 geändert) |