メイン コンテンツをスキップする 補完的コンテンツへスキップ

変換、タイプ、形式に関する追加情報

Type converterプロセッサーでは、入力レコードに対して複数の変換操作を適用できます。

プリミティブデータ型でもセマンティックデータ型でも変換できます。

ソースとデスティネーションのタイプ

入出力レコード(Avro形式)は以下のいずれかのデータ型に相当します。
  • プリミティブ型: nullbooleanintlongfloatdoublebytesstring、および次のデータ型:
    • 複合型: recordenumarraymapunionfixed

    • 論理型: 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には暦日と時刻の両方の情報が含まれます。

情報メモ警告: Avro日付/時刻LogicalTypesにはタイムゾーン情報が含まれません。そのため、これは形式内でオプションとする必要があり、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

DateTimeでは同じフォーマットルールと以下のルールが使用されます。
  • Date形式には日よりも小さなフィールドは使用できません。Dateタイプには"時"がありません: yyyy-MM-dd

  • Time形式には時よりも大きなフィールドは使用できません。Time形式には"日"がありません: HH:mm:ss.SSS

数値形式(プリミティブ型のみ)

ソースまたはデスティネーションの値が数値指向の値で、かつその他が文字列の場合は、[NumberFormat][NumberFormat]の説明に従い、形式が変換に使用されます。形式が存在しない場合、文字列はデフォルトのJava数値を使用して解析されます。

形式

文字列

'#'#

#1、#12345、#-123

$#、##0.00;($#、##0.00)

$1、234.56、$0.50、($1.00)、($1、234.56)

変換に適用される論理ルールがあります。

  • IntegerLongの形式にたとえば小数点が含まれていると、エラーの原因になります。

  • Primitive conversion OK: 情報が失われない拡張プリミティブ変換。

  • Primitive conversion with error: 情報が失われる可能性のあるプリミティブ変換(拡張または縮小)。

  • Date conversion: DateFormatパターンがある場合は、日付/時刻タイプのString変換に使用されます。
    • ソースが論理型のdatetime-millistimestamp-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'
  • Numeric conversion: 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

Primitive conversion OK 12345L (拡張変換では失われるものはありません)

long

12345L

-

Integer

Primitive conversion with error 12345 (縮小変換は可能で、通常は有効な桁が少ないデータに対して行われます)

long

1234567890123456789L

-

Integer

Primitive conversion with error 2112454933 (縮小変換を行うとデータが失われる可能性がありますが、明確に定義された方法で行われます。この場合、longの最後の4バイトがintとして再解釈されました)

long

1234567890123456789L

-

Double

Primitive conversion with error 1234567890123456770.0d (拡張変換によっては、明確に定義された方法により精度が低下することがあります)

long

0x8000000000000000L(MIN_VALUE)

-

Integer

0 (縮小変換では最後の4バイトが使用されます)

String

"1234.5"

-

Integer

エラー--形式なしの浮動小数点は解析できません。

String

"1234.5"

#

Integer

Numeric conversion 1234 (形式により小数点以下が削除されます)

string

"1234.5"

#.#

Integer

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

文字列

Date conversion 20171128
情報メモ注: timestamp-millis > Stringの変換は、テストデータセットには使用できません。

String

20171128

yyyyMMdd

timestamp-millis

Date conversion 2017-11-28T00:00:00Z (時、分、秒が0)

文字列

"20171128"

yyyyMMdd

Date

Date conversion 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に変更されています)

情報メモ注: IntからStringへの変換は、Talendによってはサポートされていません。

このページは役に立ちましたか?

このページまたはコンテンツにタイポ、ステップの省略、技術的エラーなどの問題が見つかった場合はお知らせください。