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
-
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
-
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.
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 |
-
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)
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 primitives (d'élargissement ou de réduction) avec possible perte d'informations.
-
: 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 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 |
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
Note InformationsRemarque : 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 |
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) |