Accéder au contenu principal Passer au contenu complémentaire

Informations supplémentaires relatives aux conversions, types et formats

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

Vous pouvez convertir des types de données Primitive (Primitifs) ou Semantic (Sémantiques).

Types de sources et destinations

Les enregistrements d'entrée et de sortie (format Avro) correspondent à l'un des types de données suivants :
  • Types primitifs : null, boolean, int, long, float, double, bytes, string. Ils comprennent également :
    • Complexes : record, enum, array, map, union, fixed

    • Types logiques : date:int, time-millis:int, time-micros:long, timestamp-millis:long, timestamp-micros:long, duration:fixed(12), decimal:fixed|bytes

  • Types sémantiques : ce sont des types sémantiques prédéfinis suggérés par Talend Cloud lors de la récupération des champs d'un jeu de données. Pour plus d'informations, consultez Gérer les types sémantiques.

Erreurs et avertissements

Toutes les erreurs causent l'arrêt du pipeline. Vous devez vous assurer que vos 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 (pour les types primitifs uniquement)

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.

Note InformationsAvertissement : 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 de nombres (pour les types primitifs uniquement)

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

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

  • Primitive conversion with error : conversions primitives (d'élargissement ou de réduction) avec possible perte d'informations.

  • Date conversion : 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'
  • Numeric conversion : le modèle DecimalFormat, s'il est présent, est utilisé pour les conversions de chaînes de caractères de 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

Primitive conversion OK 12345L (conversion élargissante sans perte de contenu)

long

12345L

-

Integer

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

long

1234567890123456789L

-

Integer

Conversion primitive avec une erreur 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

Primitive conversion with error 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

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

string

1234.5

#.#

Integer

Numeric conversion 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

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

String

20171128

yyyyMMdd

timestamp-millis

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

String

20171128

yyyyMMdd

Date

Date conversion 2017-11-28

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)

Note InformationsRemarque : La conversion de Int à String n'est pas supportée par Talend.

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.