【ETLツール】Talendの基本機能を紹介!

はじめに

お疲れ様です。DX推進開発部です。
みなさんは「Talend」というETLツールをご存知でしょうか?
以前参加したプロジェクトで初めてTalendによる開発を行いましたが、
なかなか新鮮だったので今回のテーマに選んでみました!

ETLツール Talendとは

f:id:css_blog:20190408181041p:plain

ETLとはExtract(抽出)、Transform(変換)、Load(集積)の頭文字です。 必要なデータを「抽出」し、分析しやすいように「変換」を施してDWH(データウェアハウス)に「集積」するというデータ統合のプロセスを表しています。 ETLツールを使用すると、企業が集めた様々なデータを加工して一元化し、活用することが出来ます。

開発環境

開発環境は以下の通りです。

  • Java 8
  • Talend Open Studio for Data Integration Version 7
    ※Talendは企業向けに様々な製品が提供されていますが、今回は無償版を使用しました。

Talendの基本用語

最初に基本用語を解説します。

  • ジョブ: Talendで作成するバッチをジョブと呼びます。ジョブは以下で紹介するコンポーネントおよびサブジョブで構成されます。
  • コンポーネント:「データの読込」,「データの加工」など実処理を行う機能群です。コンポーネントを組み合わせることでジョブを開発していきます。
  • サブジョブ:ジョブにおける処理のグループで、複数のコンポーネントから構成されます。

Talendのジョブは基本的にコンポーネントとサブジョブ同士を接続して開発します。 接続にもいくつか種類があるので紹介します。

  • ロウ(行):データの各行に対して処理を行う接続です。
    • メイン(Lookup):データの各行に対して行う標準処理を接続します。Lookup接続は2つ目以降のロウ接続を示します。
    • リジェクト:メイン処理で定義されるフィルタ条件を満たさないデータ行の処理を接続します。
  • 反復:ループ処理を実装するために使用します。
  • トリガー:サブジョブやコンポーネント同士を接続します。
    • 接続元のサブジョブやコンポーネントにおいて、 エラーの有無でフローを分岐します。
    • Run If:If分岐を実装できる接続方法です。

その他にもコンテキストやメタデータなど様々な用語がありますが、今回は省略します。( ˘ω˘ )

csvファイルを変換してDBに保存するジョブ

今回の検証では、csvファイルを加工してテーブルを作成する簡単なジョブを作成しました。以下が作成したジョブになります。 f:id:css_blog:20190408184453p:plain

開発画面にあるアイコンがコンポーネントで、青い枠がサブジョブです。トリガーやロウの接続(オレンジ色の線)で紐づいています。 それでは、処理順にコンポーネントの詳細設定を紹介していきます。

①tFileExist
指定したファイルの有無を確認してくれるコンポーネントです。  f:id:css_blog:20190408190958p:plain

ファイル名に変数を設定できるため、動的なファイルの確認も可能です。
今回はジョブの実行日がファイル名に含まれているcsvファイルが実在することを確認しています。
また、Run If接続でファイルが存在した場合にのみ次の処理を実行するようにしています。

②tFileInputDelimited
csvファイルを読み込むためのコンポーネントです。

f:id:css_blog:20190408191108p:plain

①で存在を確認したcsvファイル内のデータを読み込みます。
ちなみにcsvファイルのデータはこんな感じです。

f:id:css_blog:20190408192328p:plain

コンポーネントの設定ではcsvファイルの形式に合わせてヘッダーや
フィールド区切り,ファイルの文字コード等を設定しています。

③tDBInput
データテーブルからデータを取得するためのコンポーネントです。
データの加工にテーブルに保存している商品マスタ(画像参考)を使用します。
データベースはPostgreSQL 9.2を使用しています。

▼商品マスタ
f:id:css_blog:20190408191206p:plain

④tMap
tMapは Talendで最も重要といっても過言ではないコンポーネントです。
複数データの処理,変換,フィルタリングなどデータの加工にあたる処理を提供します。
設定方法は以下の通りです。
tMapコンポーネントからマップエディターを選択すると以下の画面が開きます。
f:id:css_blog:20190408191221p:plain

3つに区切られていますが、左からInputロウ、変数設定、outputロウに分かれています。
今回はこのようなデータの加工を行いました。

  • csvファイルと商品マスタの商品IDでテーブルを結合し、必要なデータを抽出
  • ステータスが”完了”以外のデータをフィルタリング
  • 以下2つの変数を設定
    • SALES_ID:フィルタリングでデータ数が減るため、新しく連番を付与
    • Profit:csvファイルのPRICE(価格)から商品マスタの(COST)を引き、利益を算出  

⑤tDBOutput
データベースにデータを保存するためのコンポーネントです。
tMapで加工したデータのフローをtDBOutputに接続しています。
DBの接続設定を行えばOKです。

  3-3.ジョブのデプロイ ジョブが完成したらデプロイします。 「リポジトリ」を右クリックし、「ジョブをエクスポート」を選択してください。エクスポートするジョブを選択後、Zipファイルが作成されます。

ジョブを実行する環境に展開します。
実行用のbatファイルやshellファイルがZipファイル内に作成されているので、実行してみます。
 ※今回の検証ではジョブの実行はDockerコンテナ上で行いました。

PostgreSQLに加工済みのデータが保存されたテーブルが作成されていました! f:id:css_blog:20190408192717p:plain

おわりに

簡単にですが、Talendの基本的なジョブの作成方法を紹介しました。以下にTalendを使用した所感を記載します。

コンポーネントの種類がかなり豊富で「こんな機能はないだろうか」と思い立って調べると大体用意されていました。
各種データベースの接続は当たり前、AWSやAzuruといったクラウドサービスと連携するためのコンポーネントも用意されています。
時々、かゆいところに手が届かないような機能もありましたが、Javaのコードを記述できるコンポーネントが用意されているため、基本的に対応可能です。

また、GUIによる開発は直感的で大変分かりやすかったです。
が、いざジョブを実行すると裏で自分の意図とは全く異なる動作だったこともあるため、コード内容もしっかり確認しつつ開発を進める必要があります。当たり前ですね。
今回はTalendの基本機能について紹介しました。
実際の開発では様々なコンポーネントを使用したので、機会がありましたらそれらも紹介したいです。現場からは以上です。

リンク

当社問い合わせフォーム:https://www.css-net.co.jp/contact/