Zusätzliche Informationen zu Konvertierungen, Typen und Formaten - Cloud

Prozessorhandbuch für Talend Cloud Pipeline Designer

Version
Cloud
Language
Deutsch
Product
Talend Cloud
Module
Talend Pipeline Designer
Content
Design und Entwicklung > Konzeption von Pipelines

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.

Warnung: 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

  • : Erweiternde primitive Konvertierungen, bei denen keine Informationen verloren gehen.

  • : Primitive Konvertierungen (erweiternd und eingrenzend), bei denen 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 (Zeichenfolge)

"1234.5"

-

Integer (Ganzzahl)

Fehler -- Parsing von Gleitkommawerten ohne Format nicht möglich

string (Zeichenfolge)

"1234.5"

#

Integer (Ganzzahl)

1234 (Format nach dem Dezimalpunkt verworfen)

string (Zeichenfolge)

"1234.5"

#.#

Integer (Ganzzahl)

1234 (selbst bei einem Format mit Dezimalpunkt kann die eingehende Zeichenfolge in eine Zahl konvertiert werden)

Boolescher Wert

false

-

Integer (Ganzzahl)

0

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
Anmerkung: 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)

Anmerkung: Die Konvertierung Int in String wird noch nicht von Talend unterstützt. Weitere Informationen finden Sie unter Bekanntes Problem.