はじめに
Hello, World!!
はじめましての方ははじめまして。
3年半ほどTalendというETLツールの技術者をやっています。
スキマ時間を見つけてはQiitaの記事投稿を行っておりますが、需要があるかはともかくとして、今回で5回目の投稿となりました。
さて、記念すべき5回目の題材は、Talendの技術者らしく、Talend Studioでのジョブの作り方や、利用できるコンポーネントについて書いてみようと思います。
なお、表題は(1)となっていますが、(2)以降の執筆は未定です。
今回紹介するコンポーネント
とはいったものの、Talend Studioでジョブを作成する際に使用できるコンポーネントの数はとてつもなく多いです。
コンポーネントについては、下記ドキュメント参照。
このため、ジョブ作成の初歩ということで
前処理/メインの処理/後処理の流れで実装を行う
という部分にフォーカスし、実装する際に使用する
について記載します。
tPreJob
メイン処理開始前に行っておきたい処理がある場合に使用するコンポーネント。
このコンポーネント自体は、あくまで「前処理を行い、その後メイン処理を行う」というジョブデザインを明確にするためのコンポーネントであり、このコンポーネント自体が何かの処理を行うわけではありません。
使用ケース
- 外部サービスへの接続を開始 (tDBConnection/tS3Connectionなど)
- 必要なファイルの存在確認 (tFileExistなど)
といった場合に利用します。
tPostJob
メイン処理終了後に行っておきたい処理がある場合に使用するコンポーネント。
tPreJob同様、このコンポーネント自体は、あくまで「メイン処理後に後処理を行う」というジョブデザインを明確にするためのコンポーネントであり、このコンポーネント自体が何かの処理を行うわけではありません。
使用ケース
- 外部サービスへの接続を切断 (tDBClose/tS3Closeなど)
- 作成した一時ファイルの削除 (tFileDeleteなど)
といった場合に利用します。
サンプルジョブ
- 前処理 : DB接続を行う
- メイン処理 : 前処理に成功した場合、DBからレコードを抽出し、その内容をファイル出力する
- 後処理 : DB切断を行う
という処理のサンプルを実装してみます。
この場合、全体像は以下の図のようになります。
前処理
前処理では、
- tDBConnectionコンポーネントでDB接続を行う
- (1. に成功した場合) tJavaコンポーネントでコンテキスト変数の変更を行う
の処理を行います。
コンポーネントの接続を"tCompornentOK"等で行うと、前処理で行うDB接続の成否にかかわらず、メイン処理が行われます。このため筆者は
「boolean型の変数 (デフォルト値は"false"に設定) を一つ用意しておき、前処理のDB接続に成功した場合、"true"に変更する。」
といった実装をよく行います。今回もその形式です。
メイン処理
メイン処理では、前処理でDB接続に成功した場合のみ
- tDBInputコンポーネントでSelect文を実行
- tMapコンポーネントで1. の結果をメモリ上に保持
- tFileOutputDelimitedコンポーネントで2. の結果をファイルに出力
の処理を行います。
後処理
後処理では
- tDBCloseコンポーネントでDB切断
の処理を行います。
(今回はDB接続のみなので行っていませんが) たとえば、別のサーバからファイルを取得し、処理後に取得元のファイルを削除するようなケースの場合、今回前処理で実装したようなメイン処理の成否を管理するフラグを1つ用意し、フラグが"true"の場合のみ削除する、といった実装にしておくのが無難です。
おわりに
ここまで読んでいただきありがとうございました。今回は、Talendにおけるジョブ作成の基礎の基礎を紹介させていただきました。
最初はもうちょっといろいろ書こうと思っていたのですが、ボリュームがえげつないことになりそうだったので分けて記述することにしました。※なお、2回目以降があるかは不明です。
今回この記事を記述していて、自分では当たり前のようにやってることを他人に説明する難しさを感じていて、「言語化って大事だな」とあらためて思いました。
以上。