[Talend] Talend Open Studioチュートリアル③ 〜結合してDBに書き出し〜

2016.07.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

以前弊社能登が書いたブログを参考にしながらやってみましたので併せてどうぞ。
以前投稿したブログでtMapを使うところまでやりましたので、そこからの続きになります。

今回の作業はCSVのデータとMysqlのデータをtMapを使いマッピングして、Mysqlに新しいテーブルを作り書き出す処理になります。 公式のチュートリアルはこちらです。

環境

Mac 10.10.5
Talend 6.2.0
Mysql 5.7.9
Java 1.7.80

準備

公式のチュートリアルではmysqlにdemo5mnというデータベースがあり、サンプルデータを書き込んだテーブルがある前提で解説していますので、その部分について説明します。

ローカルマシンのmysqlにdemo5mnというデータベースを用意します。あとでmysqlのユーザー名・パスワード・DB名を入力する箇所があります。
mysqlの操作については今回は割愛します。

公式のチュートリアルにあるサンプルデータを使います。

スクリーンショット 2016-07-05 10.27.30

次の手順で使うのでexampleFile.zipをダウンロードします。

スクリーンショット 2016-07-13 14.09.08

① 左ペインのジョブを右クリックして「アイテムのインポート」を選択します。
② アーカイブファイルの選択をクリックして参照でファイルを選びます。ここで選ぶファイルは上でダウンロードしたexampleFile.zipにあるdemo5mn_prerequisite.zipになります。
③ ジョブが表示されますので全て選択します。

次にDB接続を作ります

スクリーンショット 2016-07-13 14.38.05

左ペインのDB接続を右クリックしてDB接続の作成を選択します。名前は適当につけてNextを押します。

スクリーンショット 2016-07-13 14.39.12

DBタイプにmysqlを選択してユーザ名・パスワード・サーバを入力します。Databaseに入力するのは事前に用意したDatabase名になります。
全て入力したらチェックを押します。

スクリーンショット 2016-07-13 14.39.27

成功しましたと出ればOKです。

では次に、最初にインポートしたジョブと、今作ったDB接続を使ってテーブルmysqlにテーブルを作成します。

スクリーンショット 2016-07-13 15.00.56

インポートしたCustomersというジョブを選択し、コンポーネントビュー上で区切り記号付きファイルを選択し、下ペインのコンポーネントタブを選択します。 ファイル名/ストリームでダウンロードしたsampleFile.zipにあるcustomers_demo5mn.csvを選びます。

スクリーンショット 2016-07-13 15.10.30

コンポーネントビュー上でDB接続を選択し、下ペインのコンポーネントタブを選択します。 プロパティタイプをリポジトリにして、「...」を押して、上で作ったDB接続を選択します。

スクリーンショット 2016-07-13 15.20.14

実行するとcustomerテーブルが作られます。 statesについても同様の操作でテーブルを作ります。

これで準備は完了です。

マッピング

まずスキーマ情報を取得してコンポーネントビュー上で扱えるようにします。 上で作成したDB接続を右クリックして。スキーマ情報の取得を選択します。

スクリーンショット 2016-07-13 15.40.01

今回はデフォルトで構わないのでNextを押します。

スクリーンショット 2016-07-13 15.43.55

扱いたいテーブルを選択してNextを押します。

スクリーンショット 2016-07-13 15.54.35

ここで取得するスキーマを確認することができます。

スクリーンショット 2016-07-13 16.08.48

これでローカルマシンのmysqlを使うことができるようになりましたので、statesをコンポーネントビューにドラッグします。 ドロップすると「作成するコンポーネントを一つ選択してください」と表示されますのでtMysqlInputを選択します。

スクリーンショット 2016-07-13 16.24.04

ドラッグしたstatesのコンポーネントタブのクエリフィールドの横にある「...」を押してクエリビルダーを表示します。

スクリーンショット 2016-07-13 16.22.24

デザイナタブを押すとチェックボックス付きの表が出ますので、ID、Capital、MostPopulousCityのチェックを外してクエリを実行します。 実行は上の走っている人のアイコンです。これを見つけるのに非常に苦労しました。

クエリを実行して左下に結果が表示されればOKです。

スクリーンショット 2016-07-13 16.37.33

statesを右クリックして、「ロウ」→「メイン」と選択してtMapにつなぎます。

スクリーンショット 2016-07-13 16.56.08

DB接続のcustomersをドラッグして任意の位置に配置します。 作成するコンポーネントを一つ選択してくださいと表示されるのでtMysqlOutputを選択します。
※チュートリアル②の続きなのでtLogRowがありますが、削除して構いません。

コンポーネントタブのテーブル操作フィールドをテーブルが存在する場合、削除してから作成を選択します。

スクリーンショット 2016-07-13 17.32.09

tMapを→クリックして「ロウ」→「メイン」と選択してcustomersにつなぎます。

スクリーンショット 2016-07-13 18.22.37

① row1のstatesをrow3へドラッグします。
② row3のStateをrow2へドラッグします。
③ row2で受け取るstatesの値を14に変更します。
変更していないと、書き込む値に対して書き込める値が小さいため以下のように怒られます。
Data truncation: Data too long for column 'states' at row 1

row3についてはPostalとStateのカラムのみ追加してください。上でstatesのtMysqlInputを作った箇所でPostalとStateのみ選択している箇所と整合性が取れずエクセプションを吐きます。

※ここでいうrow1、row2、row3は前画面の矢印の名前なので適宜読み替えてください。

スクリーンショット 2016-07-13 18.46.21

これでCSVからmysqlにテーブルを作って値を代入ができました。statesカラムの値もちゃんとstatesテーブルの値が書き込まれていることが確認できます。 デバッグ実行は実行タブのデバッグ実行でできます。

最後に

少し長くなりましたが、入力元が違うデータをマッピングして新しくテーブルを作ることができましたので、ここまで理解できれば応用していろいろなことができそうです。
はジョブのエクスポートをやってみます。