Zu Hauptinhalt springen Zu ergänzendem Inhalt springen

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

Die Ein- und Ausgabedatensätze (Avro-Format) entsprechen einem der folgenden Datentypen:
  • 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

Alle Fehler zerstören die Pipeline. Sie müssen sicherstellen, dass Ihre Daten mit der Konvertierung kompatibel sind. Sie könnten folgende Typen von Fehlern antreffen:
  • 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.

InformationshinweisWarnung: Die Datums-/Uhrzeit-Logiktypen von Avro enthalten keine Informationen zur Zeitzone, d. h. das muss im Format optional sein und wird nicht in die Zeichenfolge aufgenommen. Die nachstehenden Beispiele enthalten Zeitzonen zur Illustration.

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

Date und Time verwenden dieselben Formatierungsregeln:
  • 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)

Wenn es sich beim Quell- oder Zielwert um einen numerischen Wert handelt UND der andere Wert eine Zeichenfolge (String) ist, wird das Format in der Konvertierung verwendet, wie unter [NumberFormat][NumberFormat] beschrieben. Ist kein Format vorhanden, dann erfolgt das Parsing der Zeichenfolge mithilfe der numerischen Standardwerte von Java.

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

  • Primitive conversions OK (Primitive Konvertierung OK): Erweiternde primitive Konvertierungen, bei denen keine Informationen verloren gehen.

  • Primitive conversion with error (Primitive Konvertierung mit Fehler): Erweiternde primitive Konvertierungen, bei denen möglicherweise Informationen verloren gehen.

  • Date conversion (Datumskonvertierung): 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'
  • Numeric conversion (Zahlenkonvertierung): 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)

Primitive conversion OK (Primitive Konvertierung OK) 12345L (bei der erweiternden Konvertierung geht nichts verloren)

Long (Lang)

12345L

-

Integer (Ganzzahl)

Primitive conversion with error (Primitive Konvertierung mit Fehler) 12345 (eingrenzende Konvertierungen können OK sein, in der Regel mit Daten mit wenig signifikanten Stellen)

Long (Lang)

1234567890123456789L

-

Integer (Ganzzahl)

Primitive conversion with error (Primitive Konvertierung mit Fehler) 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)

Primitive conversion with error (Primitive Konvertierung mit Fehler) 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)

Numeric conversion (Numerische Konvertierung) 1234 (Format nach dem Dezimalpunkt verworfen)

string

"1234.5"

#.#

Integer (Ganzzahl)

Numeric conversion (Numerische Konvertierung) 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)

Date conversion (Datumskonvertierung) 20171128
InformationshinweisAnmerkung: Die Konvertierung timestamp-millis > String ist mit Testdatensätzen nicht möglich.

String (Zeichenfolge)

20171128

yyyyMMdd (jjjjMMtt)

timestamp-millis (Zeitstempel-Millisekunden)

Date conversion (Datumskonvertierung) 2017-11-28T00:00:00Z (Stunden, Minuten und Sekunden sind 0)

String (Zeichenfolge)

"20171128"

yyyyMMdd (jjjjMMtt)

Date (Datum)

Date conversion (Datumskonvertierung) 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)

InformationshinweisAnmerkung: Die Konvertierung Int in String wird von Talend nicht unterstützt.

Hat diese Seite Ihnen geholfen?

Wenn Sie Probleme mit dieser Seite oder ihren Inhalten feststellen – einen Tippfehler, einen fehlenden Schritt oder einen technischen Fehler –, teilen Sie uns bitte mit, wie wir uns verbessern können!