はじめに
今回は、Talendで区切り文字列データを分割して、通常のカラム分割されたrowデータに変換する方法についての記事です。
最近、文字列データとして流れて来たデータを扱う場面がありました。
その際に、どうやって区切り文字含みの1カラム(列)しか持たないデータを、通常の複数カラムを持つデータに分割しようか少し迷いましたので、記事に残しておくことにします。
区切り文字列?tFileInputDelimitedっしょ?え?使えない?
カンマやタブ区切りの”ファイル入力”データは、以前の記事でも扱った通り、tFileInputDelimitedというコンポーネントを使えば難なく区切った結果をカラムに分割してrowデータにすることができます。
ですが、今回のケースでは、入力はファイルではありませんので、tFileInputDelimitedは使えません。
区切り文字列をカラムに分割するコンポーネント
tJavaRowを使用して、文字列をsplitした後にrowに流しても良いんですが、ちゃんとコンポーネントがありますので、そちらを使用することにします。
ずばり、tExtractDelimitedFieldsコンポーネントです。
こんな感じの部品です。
ジョブで使用してみる
それでは、実際にジョブで使ってみましょう。
ベースとするジョブは、前回記事で取り上げたSAPと連携するジョブです。
tSAPInputコンポーネントからの戻り値は、区切り文字で区切られた単一のStringです。
(区切り文字は、Initialize inputのDELIMITERで与えた値になります)
この返却された文字列に対して、tExtractDelimitedFieldsを適用してみます。
tExtractDelimitedFieldsコンポーネントをジョブに配置し、tSAPInputのout(WA)を接続します。上記ジョブではtLogRowが挟まっていますが、このコンポーネントは無害なので気にしないでください。
設定ですが、
- Filed to split
- 分割するカラムを選択
- Field separator
- 区切り文字を設定(今回は”;”区切りなので”;”をセット)
- スキーマは下記の通り設定
- 左側(入力側)はそのままで、出力側を編集します。
列名は、tSAPInputから伸びるもう一方のFIELD_NAMEの出力値を参考に定義しました。
- 左側(入力側)はそのままで、出力側を編集します。
この状態で実行すると、無事区切り文字列を持つ単一のカラムが、区切り文字列でカラム分割されることが確認できます。
無事、カラム分割されたrowデータを得ることができました。
ちなみに、tExtractDelimitedFieldsコンポーネント以外にも、tExtractシリーズには文字列をパースしてくれる便利な部品群が存在しますので、覚えておくと良いと思います。
今回は以上です!