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

Talend Cloud Pipeline Designerプロセッサーガイド

author
Talend Documentation Team
EnrichVersion
Cloud
EnrichProdName
Talend Cloud
task
ジョブデザインと開発 > パイプラインのデザイン
EnrichPlatform
Talend Pipeline Designer

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

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

入力レコードはAvroです。したがって、ソースタイプは次のAvroタイプの1つを使用して表記できることが保証されています。
  • プリミティブ: nullbooleanintlongfloatdoublebytesstring

  • 複合型: recordenumarraymapunionfixed

  • 論理型(常にベースとなるプリミティブ/複合タイプと見なして問題ありません): date:int、time-millis:int、time-micros:long、timestamp-millis:long、timestamp-micros:long、duration:fixed(12)、decimal:fixed|bytes

デスティネーション型は、エンドユーザーになじみがあり、Avroタイプに密接に対応することを条件に選択されました。
  • Boolean、Integer、Long、Float、Double、String、Date、Time:time-millis、およびDateTime:timestamp-millis

エラーと警告

どのエラーもパイプラインを強制終了します。ユーザーは、変換と互換性のあるデータを使用する責任があります。発生する可能性のあるエラーのタイプは次のとおりです。
  • 不良な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の形式にたとえば小数点が含まれていると、エラーの原因になります。

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

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

  • : 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'
  • : 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 (小数点のある形式でも、入力文字列を数字に変換するのに役立ちます)

boolean

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

String

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

String

20171128

yyyyMMdd

timestamp-millis

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

String

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

注: IntからStringへの変換はまだTalendによってサポートされていません。詳細は、このknown issueを参照してください。