きれいなデータを作る仕組み。Talendを使ってみる。 ~その2~

こんにちはCoffeeです。

きれいなデータを作る仕組み。Talendを使ってみる。~その1~では、Talend(タレンド)の概要について説明しました。

今回はTalend(タレンド)を実際に使用してみて、

「データ収集」⇒「データ加工」⇒「データ出力」を体験してもらいたいと思います。

以下の図は作成する処理の大まかな流れです。

talend02_1

最初に顧客情報をデータベースから、

顧客情報と商品情報をファイルから収集します。
次に収集したデータを加工して、

最後にCSVファイルとしてデータ出力する流れです。

~私が試した実行環境~
・Windows7 64bit
・Java1.8
・Talend6.3
・PostgreSQL9.6

それでは、Talend(タレンド)によるデータ加工の詳細を見ていきます。

■加工前のデータを確認

今回は、私が用意したデータで加工をしていきます。
「データをきれいにする」にするとは、データを扱いやすいように、ルールに従ってデータを整形するということです。

以下のような「取引情報」「顧客情報」「商品情報」を用意しました。
あえて、同一項目のデータでありながら統一感の無い「汚い」データとなっています。

<取引情報>

talend02_2

取引情報は、データベースに格納されているデータをCSVとして表示しています。

文字列でもっている日付の型がバラバラだと、
後々この日付のデータを使って、集計や、並べ替えの際に、
同じ日を指しているのに、別の日と認識されてしまったりします。
データの形を合わせるというのは、結構重要なポイントです。

<顧客情報>

talend02_3

余談ですが、会社の名前って、でたらめで登録されていることが多いので、システムに携わる方であれば、あるあるネタです。

同じ会社でも例えばですが、こんなにバリエーションがあります。

AAA株式会社、AAA(株)、エーエーエー株式会社、エーエーエー株式会社

<商品情報>

商品情報ではデータ加工は行いません。

talend02_4

■データの加工方法と最終アウトプット

データが「汚い」度合いは、
システムの要件や、人それぞれかと思いますが、
このデータを以下のようなルールに従って整形していきます。

<取引情報>

talend02_5

<顧客情報>

talend02_6

データを整形する際は、データをどのように利用するかイメージ出来ている度合いが高いと、システム開発時や、システム運用時にトラブルが少ないと思います。

最終的な出力データは、下記のアウトプットを目指します。

talend02_7

■データ加工処理のポイント

前置きが少し長くなりましたが、次はTalendでの具体的な処理内容を見てみます。

先に説明した、データの加工方法に合わせて作成したTalendのジョブです。

talend02_8

順番としては、下記の流れになります。

1.取引情報をデータベースから取得する(tPostgresssqlInput_1)
2.顧客情報をファイルから取得する(tFileInputDelimited_1)
3.商品情報をファイルから取得する(tFileInputDelimited_2)
4.取引情報に対して、顧客情報と商品情報を突き合わせつつ、データの加工を施し、最終的なアウトプット情報を生成する。(tMap_1)
5.4で作成した情報を、ファイルとして保存する。(tFileOutputDelimited_1)

4の部分が今回データ加工の処理本体となり、先に記載したルールに従って変換させています。
今回の整形は難しくないため、1つのコンポーネントでデータ加工を実現しています。

下図の左の青枠から抽出したデータ(取引情報、商品情報、顧客情報)を選択して、右の赤枠でデータ加工処理を記載します。

talend02_9

では、Talend上で「汚い」データをどのようにデータ加工したかというと、Talendで用意された関数を利用して、加工を行いました。

<取引情報の加工>

talend02_10

<顧客情報の加工>

talend02_11

ちなみに、今回はわかりやすく理解してもらいやすいように簡単なデータとルールでの変換でしたが、tReplaceコンポーネントというものを使用すると、法人格(「㈱」、「(株)」、「(株)」、「㈲」等)を綺麗に統一することも可能です。今回の場合、顧客情報からtMapへリンクする間にtReplaceコンポーネントを挟んでtReplaceに定義を入れておくようなやり方もあります。

■ジョブを実行して、きれいなデータを作成する

では、実行してみましょう。
Talendを実行するには、下図の赤四角で囲った、実行ボタンを押すだけです。

1

正常に動作しました!

赤丸の数値は流れているデータの件数です。
処理された時間も表示され、視覚的にデータ処理がどのように行われたのかを見ることができます。
今回は数件のデータでしたので、一瞬で終わってます。

作成されたCSVファイルは以下の通りの結果となりました。

<出力結果>

talend02_13

データ加工のルールに従って、見事にきれいなデータが作成出来ました!

■バッチ化(処理を自律的に動かすための仕組み)

データを整形する業務は、ほとんどが、定常業務として決まった時間に実行されることが大半です。
人がポチポチ押して、昼間にやるのではなく、夜中にシステムが勝手に動いてデータを整形してくれるのがやっぱり楽ですよね。

というわけで、ジョブをボタンを押して実行するのではなく、Windowsのタスクスケジューラーで実行する方法を紹介します。

Talendにおいては、「実行ジョブを生成」という機能で、簡単にスケジュール実行するための、実行ジョブを作成することが出来ます。

<実行ジョブを生成画面>

talend02_14

<出力される実行ファイル>

talend02_15

今回、作成した一連の処理に関するものが出力されます。
.batと拡張子が付いたファイルがWindows上で処理を自律的に動かすためのプログラムになります。

talend02_16

出力された、batファイルを開いてみると、なんと、Javaを起動して実行していることがわかりますね。
画像にはありませんが、同じく出力されたsamplejob_0_1.jarを呼び出している記述になっています。

次に、実行ジョブを作っただけでは、自動的に実行されませんので、Windowsの機能にあるタスクスケジューラーを使って、以下のように設定します。
毎日22時になるとsample_JOB_run.batを動かします。

talend02_17

■ドキュメント化

HTML形式のドキュメントを出力することも可能です。
詳細設計書の代わりなるため、開発工数を削減できる可能性がありますね。

<ドキュメンテーションの生成機能>

talend02_18

<出力イメージ>

talend02_19

■今回のまとめ

Talendで簡単な「データ収集」⇒「データ加工」⇒「データ出力」の処理を実現しました。

2つ、3つのジョブを作成すれば開発ツールにも慣れて、サクサクとTalendのジョブを作成出来ると思います。

今回、小さな処理でしたが、次回は、様々なコンポーネントを利用してもう少し複雑な処理を実現してみようと思います。

ではまた、次回をお楽しみに!