[Talend]複数のテーブルからカラムデータを取得し別テーブルへ登録する(ELTコンポーネント)
データをロードする際にETL処理してからRedshiftへロードするというパターンとオリジナルデータをそのままRedshiftやRDBへロードしてから必要なデータをかき集めてテーブルにデータを入れるというELT処理の2パターンがありますが、今回はその後者をやってみます。
動作させた環境
- Talend Open Studio 6.1 for MACOS
- 読み出し元D/B:仮想OS上のWindows7 on MySQL5.5
今回使用するコンポーネント
- tELTMysqlInput
- tELTMysqlMap
- tELTMysqlOutput
の3つのコンポーネントです
コンポーネントを配置してみる
- 3つのテーブルからデータを集約するので、tELTMysqlInputを3つ配置します
- 3つのテーブルから集約したものをマッピングして集約するのでtELTMysqlMapを配置します
- 最終的に必要なデータをテーブルへ書き出すためにtELTMysqlOutputを配置します
コンポーネントのプロパティ定義を実施する
STEP1.関係線を定義します。(すべて メイン で定義します) それぞれのコンポーネントのラベルをcity,country,countrylanguageに変更しました。
STEP2.メタデータ/DB接続/接続するDB定義の部分で右クリックして「スキーマ情報の取得」を選択します。
Next > をクリックすると更に下記のようなウィンドウが開きます。
3つのテーブルが存在していることが確認できますので、ここでは全て選択して Next > をクリックします。
DBの情報を取得できたので Finish をクリックします。
STEP3.それぞれ3つのtELTMysqlInputに対してプロパティを設定します。 下記のようにスキーマをリポジトリに変更し、 ・・・ をクリックして city を指定します。
正しく設定が完了するとコンポーネント右上にある黄色いビックリマークアイコンが消えていることが確認できると思います。
同じようにあと2つのコンポーネントのプロパティ設定 country,countrylanguage も設定します。
STEP4.tELTMysqlMapのプロパティを設定します。
tELTMysqlMapの ELT Mysqlマップエディタを立ち上げてマッピングの設定を行います。 エディタが立ち上がると下記のようなウィンドウが立ち上がります。
右側上にある + ボタンをクリックし、出力テーブルの追加します。(ここでは aggregate_result にしています) 次に左側 + ボタンをクリックして 新規のエイリアスの追加を行います。
今回は「3つのテーブルから結合し、出力結果をMySQLの別テーブルへ登録する」をやりたいので下記のようにcity,country,countrylanguageの3テーブル分エイリアスを追加します。 抽出したい条件は外部カラム式の部分に記載することが可能です。 また、出力テーブル(aggregate_result)側にはCreate_Atカラムを追加して、タイムスタンプが入るようにしています。
STEP5.最後にtELTMysqlOutputのプロパティを設定します。
カラム同期をクリックした後、スキーマの編集をクリックすると下記のような画面が表示されます。
DB定義に問題無いことを確認できたらデータ操作を 挿入 デフォルトテーブルを aggregate_result として設定します。
※MySQL上に予めaggregate_resultテーブルは作成しておいて下さい。
これでジョブの定義は完了しました。
ジョブを実行してみる
作成したジョブを早速実行してみます。
ジョブが正常に終了し、134レコードが該当したことが確認できます。
まとめ
とにかく早くDWHを立ち上げたいって要件の場合にはETL処理の設計を実施することが足かせとなり立ち上げるまでに時間を要することが考えられます。そう言う場合にはRAWデータをそのままDWHにロードしてしまうゴリ押しも必要になるケースがあります。あとRAWデータがDWH内にあるので、その時は不要だったデータが施策のPDCAを回しているうちに必要になってくるケースもあるかと思いますので良い面もありますが、デメリットとしては明らかに不要となるカラムデータもロードすることになってしまっているケースの場合はDWHのストレージ容量を圧迫することが挙げられます。