ETL ツールとは
ETL ツールとは、以下のような処理工程を指しています。- Extract : 外部にある情報源からデータを抽出すること
- Transform : 抽出したデータを必要に応じて変換・加工すること
- Load : データウェアハウス等に変換・加工済みのデータを登録すること
昨今のシステムでは非常に多くの異なるシステムからデータを収集してきますが、それぞれデータ形式(フォーマット)が異なっています。そのデータを収集して変換及び加工し、最終的に変換・加工されたデータをデータベース等に蓄積します。
このような一連の処理を行うのが ETL と呼ばれるものです。またこうした処理を簡単に作成できるソフトウェアが ETL ツールと呼ばれています。
Talend Open Studio for Data Integration でのジョブ作成方法Talend Open Studio for Data Integration で Oracle 接続が失敗あるいは遅い
何故 ETL ツールが必要なのか
これまで Windows / UNIX / Linux 等でのバッチ処理は基本的に Windows バッチファイルや UNIX/Linux シェルスクリプト等、また Java / Python / Ruby 等のプログラム言語で作成したプログラムを Windows タスク・スケジューラあるいは cron で自動化してきていると思います。しかし全ての開発・システム管理メンバーが複雑なプログラムやシェルスクリプトを完全に理解出来るケースは稀ですし、ドキュメントも揃っていないことが往々にしてあるかと思います。もしそれらのスクリプトやプログラムの内容を理解できたとしても、それらをメンテナンスする際にはかなり苦労するかと思います。
加えて開発者やシステム管理者、人それぞれジョブやプログラムの書き方は千差万別ですので統一性が取れていないこともあるでしょう。よくあるパターンは、前任者が大量のジョブを作成していたが退職や異動により急に自分が引き継ぐことになった、なんてことがあるかと思います。
しかし著名な ETL ツールは、基本的に画面上に必要な部品を配置してそれぞれの部品をつなげていき、最終的に ETL 処理 (データ収集、データ加工・変換、データ登録・蓄積)を実現できるものです。非常に簡単に処理を作ることが出来るとともに、各処理同士の連携もとても簡単に実装できます。また部品同士の繋がりを見ることで、誰でも処理の流れを把握することが出来ます。
Talend Open Studio for Data Integration とは
Talend Open Studio for Data Integration というソフトウェアを使えば GUI 操作によってバッチ処理を作成することができ、かつ比較的容易に処理の流れをグラフィカルに把握することが出来るので、特に複雑なバッチ処理には大変効果的です。バッチ処理のみならず単発のデータ変換処理や、ファイルをデータベースに取り込む処理、逆にデータベースのデータをファイルに出力する(Oracle では SQL*Plus コマンドで CSV を出力するのは苦労しますよね?)、API 呼び出し等、様々な処理を簡単に作成できます。さらに様々なデータベースからデータを集めて結果を集約するような処理も非常に簡単に実装できます。
しかもTalend Open Studio for Data Integration というソフトウェアは無料ですので是非試して業務の効率化を図りましょう。類似ツールは Pentaho や Jasper 等の企業も提供していますが、いくつか評価した結果 Talend が最も優れていました。
Talend を利用する利用する利点
Talend Open Studio for Data Integration を利用することの利点は次の通りです。- ツールの利用は完全無料 (商用版もあり)
- 作成した処理は Java コードに変換されるので、Windows でも Linux でも動く
- 部品が大変充実している (ほぼ全てのメジャーなデータベース及びクラウドサービス用の部品もある)
- 必要であれば自分で部品を作成することも出来る
- 必要な部品を配置し部品同士を繋いでいくことで一連の処理を作成できるので、視覚的に処理の流れが分かり易い
- 細かな制御は各部品の設定を行うことで柔軟な処理が記述できる
- コミュニティーが充実しているので質問の回答が得られやすい
- 生成されるプログラムは Java なので、ほぼ自由にパラメータを調整可能
Talend を使った簡単な例
ここでは Google の緯度・経度を取得する API を呼び出して、東京の緯度・経度についての結果を取得するジョブを作成してみました。ジョブというのは一連の処理をまとめた処理の実行単位を指します。全く実用性はありませんが、こんなことも出来るよ!という例です。
ジョブ作成手順
作業の流れは次の通りですが非常にシンプルに1つの完結したジョブを作成することが出来ます。
- tRESTClient という外部のウェブ API を呼び出して結果を自動的に取得してくれる部品を配置
- tLogRow というある部品の結果を受け取って画面に表示してくれる部品を画面に配置
- tRESTClient と "tLogRow" という部品同士を繋いであげることによりウェブ API の呼び出し結果を画面に表示できるようになる
- tRESTClient 部品に対してどのウェブ API を呼び出すのか URL を指定し、必要なパラメータを設定する
つまり Google の緯度・経度取得 API を呼び出すリクエストに、"address : Tokyo" というパラメータを渡して、東京の緯度・経度を Google API から取得するというものです。
このようにプログラムコードを一切書くこと無く必要な処理を作ることが出来ます。
API を呼び出すための設定画面
下図は tRESTClient という部品の設定画面を開いた状態ですが、基本的には呼び出したいウェブ API の URL と必要なパラメータを指定するだけです。ジョブ実行結果
上記ジョブを実行すると、API 呼び出し結果が Google GeoCode API から返却されてきます。以下は実際にジョブを実行した直後の画面です。画面中央下の部分に XML 形式で結果が表示されています。Google の緯度・経度を取得する API を呼び出し、結果として得られた情報 (結果は XML 形式で返ってきています) は次の通りです。
ジョブ RESTfulTest を 13:56 04/09/2017 に開始しました。 [statistics] connecting to socket on port 4031 [statistics] connected 200|<?xml version="1.0" encoding="UTF-8"?> <GeocodeResponse> <status>OK</status> <result> <type>administrative_area_level_1</type> <type>locality</type> <type>political</type> <formatted_address>Tokyo, Japan</formatted_address> <address_component> <long_name>Tokyo</long_name> <short_name>Tokyo</short_name> <type>administrative_area_level_1</type> <type>locality</type> <type>political</type> </address_component> <address_component> <long_name>Japan</long_name> <short_name>JP</short_name> <type>country</type> <type>political</type> </address_component> <geometry> <location> <lat>35.6894875</lat> <lng>139.6917064</lng> </location> <location_type>APPROXIMATE</location_type> <viewport> <southwest> <lat>35.5288730</lat> <lng>139.5105740</lng> </southwest> <northeast> <lat>35.8178130</lat> <lng>139.9102020</lng> </northeast> </viewport> <bounds> <southwest> <lat>24.2241404</lat> <lng>138.9427580</lng> </southwest> <northeast> <lat>35.8986468</lat> <lng>153.9876916</lng> </northeast> </bounds> </geometry> <place_id>ChIJ51cu8IcbXWARiRtXIothAS4</place_id> </result> </GeocodeResponse>| [statistics] disconnected ジョブ RESTfulTest が 13:56 04/09/2017 に終了しました。 [終了コード=0]
考察
このように非常に簡単かつプログラミング無しでウェブ API を呼び出して実行結果を画面に表示するジョブを作成できました。どんな部品があるのかを覚えてその使い方を覚えてしまえば爆速でジョブを作成することが出来ます。私はこのツールの存在を長いこと知りませんでしたが、このツールの存在を知ってからはジョブを自作する気が一切起きなくなってしまいました。
Talend Open Studio for Data Integration はとてもオススメなツールです。