Informations supplémentaires relatives aux conversions, types et formats - Cloud

Guide des processeurs de Talend Cloud Pipeline Designer

EnrichVersion
Cloud
EnrichProdName
Talend Cloud
EnrichPlatform
Talend Pipeline Designer
task
Création et développement > Création de Pipelines

Le processeur Type converter vous permet d'appliquer plusieurs opérations de conversion sur un enregistrement entrant.

Types de sources et destinations

L'enregistrement entrant est Avro, le type de source est représentable via l'un des types Avro suivants :
  • Primitifs : null, boolean, int, long, float, double, bytes, string

  • Complexes : record, enum, array, map, union, fixed

  • Logiques (peut être considéré comme le type primitif/complexe sous-jacent) : date:int, time-millis:int, time-micros:long, timestamp-millis:long, timestamp-micros:long, duration:fixed(12), decimal:fixed|bytes

Les types de destination ont été choisis pour sembler familiers aux utilisateurs et utilisatrices finaux·les et correspondre étroitement aux types Avro :
  • Boolean, Integer, Long, Float, Double, String, Date, Time:time-millis, and DateTime:timestamp-millis.

Erreurs et avertissements

Toutes les erreurs causent l'arrêt du pipeline. l'utilisateur ou l'utilisatrice doit s'assurer que ses données sont compatibles avec la conversion. Les types d'erreurs que vous pouvez rencontrer comprennent :
  • Erreurs de parsage avec modèles DateFormat/DecimalFormat incorrects.

  • Toute erreur relative aux sources provenant de mauvaises conversions parse ou valueOf.

  • Octets source insuffisants pour créer une valeur de destination.

Formats orientés date

Lorsque la valeur de la source ou de la cible est une valeur orientée date/heure et que l'autre est une chaîne de caractères, le format est utilisé lors de la conversion, comme décrit dans la documentation DateTimeFormatter (en anglais). Si aucun format n'est présent, le format ISO 8601 par défaut, fourni par Java, est utilisé.

DateTime comprend les informations du jour calendaire et de l'heure.

Avertissement : Les types Avro LogicalTypes de date et heure ne comprennent pas d'informations relatives au fuseau horaire, elles doivent donc être facultatives dans le format et ne seront pas présentes dans la chaîne de caractères. Les exemples ci-dessous comprennent les fuseaux horaires à des fins d'illustration.

Format

String

EEE, MMM d, ''yy 'at' h:mm a

Tue, Nov 28, '17 at 12:44 PM

yyyyy.MMMM.dd GGG hh:mm a

02017.November.28 AD 12:44 PM

Date et Time utilisent les mêmes règles de formatage, notamment :
  • Aucun champ inférieur à une journée ne doit s'afficher dans un format Date. Il n'y a pas d'heure dans le type Date : yyyy-MM-dd

  • Aucun champ supérieur à une heure ne doit s'afficher dans un format Time. Il n'y a pas de jour dans le format Time : HH:mm:ss.SSS

Formats des nombres

Lorsque la valeur de la source ou de la cible est une valeur numérique et que l'autre est une chaîne de caractères, le format est utilisé dans la conversion, comme décrit dans [NumberFormat][NumberFormat]. Si aucun format n'est présent, la chaîne de caractères est parsée à l'aide des valeurs numériques Java par défaut.

Format

String (Chaîne de caractères)

'#'#

#1, #12345, #-123

$#,##0.00;($#,##0.00)

$1,234.56, $0.50, ($1.00), ($1,234.56)

Les mêmes règles logiques s'appliquent aux conversions :

  • Les formats Integer et Long incluant un point décimal créent une erreur, par exemple.

Exemples

  • : conversions primitives d'élargissement sans perte d'information.

  • : conversions primitive (élargissement ou rétrécissement) avec possible perte d'information.

  • : le modèle DateFormat, s'il est présent, est utilisé pour les conversions de chaînes de caractères de types date/time.
    • Si la source est un type logique date, time-millis, timestamp-millis (time-micros et timestamp-micros sont traités comme des Long) ou si la destination est Date, Time ou DateTime.

    • Si aucun modèle n'est présent, les types Date/Time/DateTime utilisent les modèles ISO-8601 spécifiques.
      • Date : yyyy-MM-dd
      • Time : HH:mm:ss
      • DateTime : yyyy-MM-dd'T'HH:mm:ss'Z'
  • : Le modèle DecimalFormat, s'il est présent, est utilisé pour les conversions de chaînes de caractères avec des types numériques. S'il n'est pas présent, Integer.valueOf() ou Integer.toString() est utilisé (avec la valeur de destination appropriée).

  • Le format n'est pas utilisé lors de la conversion de types et nombres orientés date.
    • Date Le nombre entrant/sortant est le nombre de jours écoulés depuis 1970-01-01 (int)

    • Time Le nombre entrant/sortant est le nombre de millisecondes écoulées depuis 00:00:00 (int)

    • dateTime Le nombre entrant/sortant est le nombre de millisecondes écoulées depuis 1970-01-01 00:00:00 (long)

  • Lorsque la source et la destination sont des types orientés date supportés, la date et l'heure restent cohérentes entre la source et la cible. Les éléments inconnus sont définis comme relatifs à la date 1970-01-01 00:00:00. Par exemple, convertir un type Time (sans composant de date) en une Date retourne toujours 1970-01-01.

Pour plus d'informations, consultez la documentation Oracle (en anglais).

Type de source (Avro)

Valeur de la source

Format

Type de destination

Valeur de destination

int

12345

-

long

12345L (conversion élargissante sans perte de contenu)

long

12345L

-

Integer

12345 (les conversions rétrécissantes peuvent être bonnes, notamment sur les données comportant peu de chiffres)

long

1234567890123456789L

-

Integer

2112454933 (les conversions rétrécissantes peuvent conduire à une perte de données, mais d'une manière définie.) Dans ce cas, les quatre derniers octets du long sont réinterprétés comme int)

long

1234567890123456789L

-

double

1234567890123456770.0d (certaines conversions d'élargissement peuvent perdre de la précision d'une manière définie)

long

0x8000000000000000L(MIN_VALUE)

-

Integer

0 (la conversion de rétrécissement utilise les quatre derniers octets)

string

1234.5

-

Integer

Message d'erreur : Error -- Cannot parse floating point without a format.

string

1234.5

#

Integer

1234 (le format supprime ce qui se trouve après le symbole décimal)

string

1234.5

#.#

Integer

1234 (un format avec un point décimal permet de convertir la chaîne de caractères d'entrée en un nombre)

boolean

false

-

Integer

0

boolean

true

-

Integer

1

boolean

false

-

Date

1970-01-01 (zéro jour depuis 1970-01-01)

boolean

true

-

Date

1970-01-02 (un jour depuis 1970-01-01)

boolean

false

-

Time

00:00:00.000 (zéro milliseconde depuis minuit)

boolean

true

-

Time

00:00:00.001 (une milliseconde depuis minuit, notez que si votre vue n'affiche pas les millisecondes, cela semblera false même si les données sous-jacentes sont différentes)

timestamp-millis

2017-11-28T12:44:22Z

yyyyMMdd

String

20171128
Remarque : La conversion timestamp-millis > String ne fonctionne pas sur les jeux de données de test.

String

20171128

yyyyMMdd

timestamp-millis

2017-11-28T00:00:00Z (les heures, les minutes et les secondes sont de 0)

String

20171128

yyyyMMdd

Date

20171128

int

20171128

-

Date

+57196-09-03 (20 171 128 jours après 1970-01-01)

time-millis

12:44:22

-

dateTime

1970-01-01T12:44:22Z(comme il n'y a pas de date dans l'heure source, 1970-01-01 est utilisée)

timestamp-millis

2017-11-28T12:44:22Z

-

Date

2017-11-28 (le composant de temps est supprimé, le nombre sous-jacent passe de 1511873062123L à 17498)

Remarque : La conversion de Int à String n'est pas supportée par Talend. Consultez ce problème connu pour plus d'informations.