[Talend]tConvertTypeを利用して型変換をする

今回はTalendのコンポーネント「tConvertType」を紹介したいと思います。
2018.10.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。DI部の大高です。

今回はTalendのコンポーネント「tConvertType」を紹介したいと思います。

前提条件

Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.0.1」で検証しています。

tConvertTypeについて

「tConvertType」を利用すると、コンポーネントでデータ型の変化を行うことができます。

「tConvertType」コンポーネントのTalend Helpページはこちらです。

tConvertType

では、具体的に以下で解説していきます。

ジョブの説明

「tFixedFlowInput」で文字列型のカラムを2つ用意してサンプルデータを設定しています。このうちの1カラムのデータを「tConvertType」で数値型に変換して「tLogRow」で標準出力に表示し、ついでに「tJavaRow」で型情報についても標準出力に表示しています。

サブジョブを2つ作成しており、上は「tConvertType」で「自動キャスト」を設定したもの、下は「tConvertType」で「手動キャスト」を設定したものになります。

「tFixedFlowInput」コンポーネントの設定

「tFixedFlowInput」コンポーネントでサンプルデータを設定します。データは「Year」と「Name」のどちらも文字列を設定しています。

スキーマ定義については、どちらも「タイプ」を「String」に設定しています。

下の方の「tFixedFlowInput」も設定は同じで、値だけ変えています。

(2108/10/05 追記:本筋とは全く関係ありませんが、サンプルの値は「Build」の誤りですね…。)

「tConvertType」コンポーネントの設定

上の方の「tConvertType」コンポーネントでは、「自動キャスト」と「エラー強制終了」にチェックを入れています。

スキーマ定義を見てみます。スキーマ定義は左右で型が異なるように設定しています。
右側のスキーマ定義で「Year」カラムを「Integer」に設定して文字列型から数値型へ型変換が行われるようにします。

「tConvertType」の設定で「自動キャスト」に設定を入れましたが、これにより「カラム」の名前と「タイプ」から自動的に該当するカラムの型変換が実行されます。なお、「エラー強制終了」にチェックを入れたことで、エラー時にはエラーを出力してジョブが終了します。

下の方の「tConvertType」コンポーネントでは「自動キャスト」を利用せずに「手動キャスト」を利用しました。初期状態では「入力カラム位置」と「出力カラム」になにも設定されていないので、下部の「+」ボタンをクリックしてカラムを追加する必要があります。

「手動キャスト」の場合には「入力カラム位置」と「出力カラム」をプルダウンから自分でマッピングすることができます。これにより、例えば「Year」と「Name」を逆にマッピングすることも可能です。ただ、今回の例では"Ex-Aid"を数値に変換することになってしまうので、以下のようなエラーが発生します。

Exception in component tConvertType_2 (tConvertType)
java.lang.NumberFormatException: For input string: "Ex-Aid"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)
    at routines.system.TypeConvert.String2Integer(TypeConvert.java:4506)
    at sandbox.tconverttype_0_1.tConvertType.tFixedFlowInput_2Process(tConvertType.java:2039)
    at sandbox.tconverttype_0_1.tConvertType.tFixedFlowInput_1Process(tConvertType.java:1320)
    at sandbox.tconverttype_0_1.tConvertType.runJobInTOS(tConvertType.java:2561)
    at sandbox.tconverttype_0_1.tConvertType.main(tConvertType.java:2410)

なお、「Year」から「Year」だけの変換を設定したらどうなるのか試したところ、「Name」はnullとして出力されました。「手動キャスト」と使いどころとしては、左右でカラムの名前や数が違う場合に使うとよいのかと思われます。

「tLogRow」コンポーネントの設定

「tLogRow」コンポーネントは、デフォルトのまま特になにも設定しなかったので、ここでは説明を省略します。

「tJavaRow」コンポーネントの設定

「tJavaRow」コンポーネントでは、「tLogRow」コンポーネントでは出力されない型情報について出力させて、本当に型変換されたか確認できるようにします。

コードとしては以下のとおり、型を出力するだけになります。

System.out.println("Year(Type): " + input_row.Year.getClass().getName());
System.out.println("Title(Type): " + input_row.Title.getClass().getName());

実行結果

設定は以上です。実際にこのジョブを実行すると以下のように出力されます。

[statistics] connecting to socket on port 3786
[statistics] connected
2018|ZI-O
Year(Type): java.lang.Integer
Title(Type): java.lang.String
2017|Ex-Aid
Year(Type): java.lang.Integer
Title(Type): java.lang.String
[statistics] disconnected

「自動キャスト」と「手動キャスト」のそれぞれで、「Year」の文字列型が数値型に変換されました!

まとめ

以上、「tConvertType」コンポーネントの紹介でした。

型変換を簡単に済ませたい時にはとても便利なコンポーネントだと思います。

それでは。