変換、タイプ、形式に関する追加情報
Type converterプロセッサーでは、入力レコードに対して複数の変換操作を適用できます。
プリミティブデータ型でもセマンティックデータ型でも変換できます。
ソースとデスティネーションのタイプ
-
プリミティブ型: null、boolean、int、long、float、double、bytes、string、および次のデータ型:
-
複合型: record、enum、array、map、union、fixed
-
論理型: date:int、time-millis:int、time-micros:long、timestamp-millis:long、timestamp-micros:long、duration:fixed(12)、decimal:fixed|bytes
-
- セマンティックタイプ: データセットのフィールドを取得する際にTalend Cloudが提案する、定義済みのセマンティックタイプです。詳細は、セマンティックタイプを管理をご覧ください。
エラーと警告
-
不良なDateFormat/DecimalFormatパターンによる解析例外
-
どんなソースも不良なparseまたはvalueOf変換からの例外の原因になります
-
ソースのバイトが不足しているためデスティネーション値を作成できない
日付指向の形式(プリミティブ型のみ)
ソースまたはデスティネーションの値が日付/時刻指向の値で、その他が文字列の場合は、DateTimeFormatterのドキュメンテーションの説明に従い、形式が変換に使用されます。形式が存在しない場合は、Javaに提供されているデフォルトのISO 8601形式が使用されます。
DateTimeには暦日と時刻の両方の情報が含まれます。
形式 |
文字列 |
---|---|
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形式には日よりも小さなフィールドは使用できません。Dateタイプには"時"がありません: yyyy-MM-dd
-
Time形式には時よりも大きなフィールドは使用できません。Time形式には"日"がありません: HH:mm:ss.SSS
数値形式(プリミティブ型のみ)
形式 |
文字列 |
---|---|
'#'# |
#1、#12345、#-123 |
$#、##0.00;($#、##0.00) |
$1、234.56、$0.50、($1.00)、($1、234.56) |
変換に適用される論理ルールがあります。
- IntegerとLongの形式にたとえば小数点が含まれていると、エラーの原因になります。
例
-
: 情報が失われない拡張プリミティブ変換。
-
: 情報が失われる可能性のあるプリミティブ変換(拡張または縮小)。
-
: DateFormatパターンがある場合は、日付/時刻タイプのString変換に使用されます。
-
ソースが論理型のdate、time-millis、timestamp-millis (time-microsおよびtimestamp-microsはlongとして扱われます)、またはデスティネーションがDate、Time、DateTimeのいずれかの場合。
-
パターンが存在しない場合は、Date/Time/DateTimeタイプは特定のISO-8601パターンを使用します。
- 日付: yyyy-MM-dd
- 時刻: HH:mm:ss
- 日時: yyyy-MM-dd'T'HH:mm:ss'Z'
-
-
: DecimalFormatパターンが存在する場合は、数値タイプのString変換に使用されます。存在しない場合は、Integer.valueOf()またはInteger.toString()にフォールバックされます(適切なデスティネーション値を使用)。
-
サポートされている日付指向のタイプと数値の間で変換する場合、形式は使用されません。
-
Date: 入力/出力の数字は、1970-01-01から数えた日数です(int)。
-
Time: 入力/出力の数字は、00:00:00から数えたミリ秒です(int)
-
DateTime: 入力/出力の数字は、1970-01-01 00:00:00から数えたミリ秒です(long)
-
-
ソースとデスティネーションがサポートされている日付指向のタイプと数値の場合、日付と時刻のコンポーネントは2つの間で一貫性が保たれます。不明なものはすべて1970-01-01 00:00:00を基準に設定されます。たとえば、Time (日付コンポーネントなし)をDateに変換すると、常に1970-01-01が返されます。
詳細は、Oracleのドキュメンテーションを参照してください。
ソースタイプ(Avro) |
ソースの値 |
形式 |
デスティネーションのタイプ |
デスティネーションの値 |
---|---|---|---|---|
int |
12345 |
- |
Long |
12345L (拡張変換では失われるものはありません) |
long |
12345L |
- |
Integer |
12345 (縮小変換は可能で、通常は有効な桁が少ないデータに対して行われます) |
long |
1234567890123456789L |
- |
Integer |
2112454933 (縮小変換を行うとデータが失われる可能性がありますが、明確に定義された方法で行われます。この場合、longの最後の4バイトがintとして再解釈されました) |
long |
1234567890123456789L |
- |
Double |
1234567890123456770.0d (拡張変換によっては、明確に定義された方法により精度が低下することがあります) |
long |
0x8000000000000000L(MIN_VALUE) |
- |
Integer |
0 (縮小変換では最後の4バイトが使用されます) |
String |
"1234.5" |
- |
Integer |
エラー--形式なしの浮動小数点は解析できません。 |
String |
"1234.5" |
# |
Integer |
1234 (形式により小数点以下が削除されます) |
string |
"1234.5" |
#.# |
Integer |
1234 (小数点のある形式でも、入力文字列を数字に変換するのに役立ちます) |
ブール値 |
false |
- |
Integer |
0 |
boolean |
true |
- |
Integer |
1 |
boolean |
false |
- |
Date |
1970-01-01 (1970-01-01から数えた日数がゼロ) |
boolean |
true |
- |
Date |
1970-01-02 (1970-01-01から数えた日数が1) |
boolean |
false |
- |
Time |
00:00:00.000 (午前0時から数えたミリ秒がゼロ) |
boolean |
true |
- |
Time |
00:00:00.001 (深夜から数えたミリ秒数が1。ビューにミリ秒が表示されない場合は、ベースとなるデータが異なっていても、この表示はfalseとまったく同じになります) |
timestamp-millis |
2017-11-28T12:44:22Z |
yyyyMMdd |
文字列 |
20171128
情報メモ注: timestamp-millis > Stringの変換は、テストデータセットには使用できません。
|
String |
20171128 |
yyyyMMdd |
timestamp-millis |
2017-11-28T00:00:00Z (時、分、秒が0) |
文字列 |
"20171128" |
yyyyMMdd |
Date |
2017-11-28 |
int |
20171128 |
- |
Date |
+57196-09-03 (1970-01-01から数えて20、171、128日) |
time-millis |
12:44:22 |
- |
DateTime |
1970-01-01T12:44:22Z(ソース時刻に日付部分がないため、1970-01-01が使用されます) |
timestamp-millis |
2017-11-28T12:44:22Z |
- |
Date |
2017-11-28 (時刻コンポーネントが削除され、ベースとなる数字が1511873062123Lから17498に変更されています) |