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
-
Boolean、Integer、Long、Float、Double、String、Date、Time:
time-millis
、およびDateTime:timestamp-millis
エラーと警告
-
不良な
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
とTime
では同じフォーマットルールと以下のルールが使用されます。-
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 |
|
- |
Long |
|
long |
|
- |
Integer |
12345 (縮小変換は可能で、通常は有効な桁が少ないデータに対して行われます) |
long |
|
- |
Integer |
|
long |
|
- |
Double |
|
long |
|
- |
Integer |
|
String |
|
- |
Integer |
エラー--形式なしの浮動小数点は解析できません。 |
String |
|
|
Integer |
|
String |
|
|
Integer |
|
boolean |
|
- |
Integer |
|
boolean |
|
- |
Integer |
|
boolean |
|
- |
Date |
|
boolean |
|
- |
Date |
|
boolean |
|
- |
Time |
|
boolean |
|
- |
Time |
|
timestamp-millis |
|
|
String |
20171128 注: timestamp-millis > Stringの変換は、テストデータセットには使用できません。
|
String |
|
|
timestamp-millis |
|
String |
|
|
Date |
|
int |
|
- |
Date |
|
time-millis |
|
- |
DateTime |
|
timestamp-millis |
|
- |
Date |
|