データローダ作成チュートリアル
本チュートリアルでは、Talend を 使って CSV ファイルからデータを読み込み、加工したのちデータローダ API でテーブルに挿入する、といった内容のジョブ作成手順を説明します。
Talend Open Studio のインストール・環境設定
まずは、お使いの PC に Talend Open Studio をインストールします。下記を参照してインストールから環境設定を行ってください。
本チュートリアルは、Talend のバージョン 8.0.1 で動作を確認しています。
xData ジョブのインポート
本チュートリアルでは、データローダ API へのアクセスを簡単に行うため、「xData ジョブ」を利用します。xData ジョブとは、各種 xData API を Talend から簡単に使用するためのラッパーモジュールです。xData ジョブを使用するために、下記の手順でモジュールのインポートを行う必要があります。
本チュートリアルは、xData ジョブのバージョン 2.0 の利用を想定しています。
データローダジョブの作成
以上で準備は整いました。ここからは、実際にデータローダのジョブを作成してゆきます。
まず、はじめに完成形のジョブを示します。本チュートリアルでは、このジョブの完成までの手順を解説してゆきます。
ジョブの新規作成
- Talend の左のツリーの Job Designs で右クリックし Create Job を選択します。
- Name(必須) と Purpose, Description(任意) を入力し、Finish をクリックします。
- 新しいジョブが Job Designs の下に追加されます。
- 作成されたジョブをダブルクリックで開き、以降の手順を行ってください。
CSV ファイルの読み込み処理作成
- 画面右にある Palette の検索ボックスに「tFileInputDelimited」と入力し Enter キーを押します。
- コンポーネント tFileInputDelimited がヒットするので、これをドラッグ & ドロップで開いているジョブに追加します。
- tFileInputDelimited をクリックして選択状態にし、画面下部の Component タブを選択してコンポーネント設定を開きます。
- CSV 読み込みの設定を行います。読み込む CSV ファイルに合わせて設定を行ってください。
- Basic Settings > File name/Stream には、CSV ファイルのパスを入力
- Basic Settings > Row Separator には "\r\n" を、Field Separator には "," を入力
- Advanced Settings > Encoding は UTF-8 を選択
- Basic Settings > Edit Schema からスキーマ設定を行います。読み込む CSV ファイルに合わせて設定を行ってください。
- start_datetime : String
- end_datetime : String
- longitude : Double
- latitude : Double
- no2 : Double
- so2 : Double
TIPS
- Talend では値を指定する際、文字列にはダブルクオテーション囲みが必要になります。
- 文字列の中で
\
は\\
にエスケープする必要があります。
データの加工処理作成
- 画面右にある Palette の検索ボックスに「tMap」と入力し Enter キーを押します。
- コンポーネント tMap がヒットするので、これをドラッグ & ドロップで開いているジョブに追加します。
- 先ほど作成した tFileInputDelimited から出力端子を tMap に向けてドラッグ & ドロップし、コネクタを繋ぎます。
- tMap をダブルクリックしてエディタを開きます。
- エディタ右側のプラスボタンをクリックして出力を 1 つ追加します。出力の名称はここでは out1 とします。
- エディタ右下にて加工後データのスキーマを設定します。start_datetime, end_datetime, geometry の 3 カラムはデータローダに必須のカラムなので必ず含め、残りは挿入先のテーブルに合わせて設定します。
- start_datetime : String
- end_datetime : String
- geometry : String
- risk : number
- エディタ右側で Expression を編集し、入力と出力とをマッピングします。
- start_datetime, end_datetime カラム : XdataUtils.ConvertDatetimeFormat を使って日付のフォーマットをデータローダ用に変換
- geometory カラム : longitude, latitude を組み合わせ、GeoJSON 形式の文字列を作成
- risk カラム : no2, so2 を足し合わせたあと、XdataUtils.Round を使って小数点以下 3 桁未満を四捨五入
- Ok ボタンを押して確定します。
TIPS
- 上で挙げた XdataUtils. で始まる関数は xData ジョブが提供するユーザ定義関数です。
- Java コーディングの知識があれば、ユーザ定義関数を自作することができます。左のツリーの Code > Global Routine > users で右クリックし Create Routine を選択し、表示されるガイドに沿って作成します。
- GeoJSON 形式とは、地理情報を json 形式で表すフォーマットです。例えば点の地理情報は
{"type":"Point","coordinates":[138.7309, 35.3628]}
と表されます。
JSON 出力
- 画面右にある Palette の検索ボックスに「tFileOutputJSON」と入力し Enter キーを押します。
- コンポーネント tFileOutputJSON がヒットするので、これをドラッグ & ドロップで開いているジョブに追加します。
- 先ほど作成した tMap で右クリックし、Row から out1 を選択します。
- コネクタが現れるので、tFileOutputJSON に向けて接続します。
- tFileOutputJSON をクリックして選択状態にし、画面下部の Component タブを選択してコンポーネント設定を開きます。
- JSON ファイル出力の設定を行います。
- Basic Settings > File Name に JSON ファイルの出力先のパスを入力
- Basic Settings > Generate an array json をチェック
TIPS
- xData ジョブにデータを渡すためには、一度 JSON 形式のファイルとして出力する必要があるため、本手順が必要となります。
ここまで作成したら、次へ進む前に一度ジョブをテスト実行してみることをお勧めします。実行した際にエラーが発生せず、指定したパスに JSON ファイルが出力されればここまで正しく作成できています。
データローダ API の呼出
- 左ツリーの Job Designs > xdata_jobs から以下の 3 項目をドラッグ & ドロップで開いているジョブに追加します。
- xdata_loaderwebapi_init
- xdata_loaderwebapi_register_loader(挿入先のテーブルが既に存在する場合は不要)
- xdata_loaderwebapi_add_record
- tFileOutputJSON -> xdata_loaderwebapi_init -> xdata_loaderwebapi_register_loader -> xdata_loaderwebapi_add_record の順となるように、トリガー On Component Ok で接続します。接続元で右クリックし、Triggers から On Component Ok を選択することでコネクタが現れます。
- xdata_loaderwebapi_init をクリックして選択し、画面下部の Component タブの Basic Settings > Context Param に 3 つの項目を追加し、以下の通り設定します。
- apiEndpoint : データローダ API のエンドポイント URL
- apiKey : データローダ API の Key
- apiSecret : データローダ API の Secret
- xdata_loaderwebapi_register_loader をクリックして選択し、画面下部の Component タブの Basic Settings > Context Param に 4 つの項目を追加し、以下の通り設定します。パラメータについて、詳細は API リファレンス を参照ください。
- data_name : 作成するデータ挿入先テーブルのデータ名
- schema : 作成するテーブルのスキーマ名
- record_def : 作成するテーブルのカラム定義(必須カラム start_datetime, end_datetime, location を除く)
- unique_columns : テーブルのユニークキーとするカラム
- xdata_loaderwebapi_add_record をクリックして選択し、画面下部の Component タブの Basic Settings > Context Param に 2 つの項目を追加し、以下の通り設定します。パラメータについて、詳細は API リファレンス を参照ください。
- data_name : データ挿入先テーブルのデータ名
- input_file_path : 挿入するデータを読み取るファイルパス(先ほど tFileOutputJSON で指定した JSON ファイルの出力パス)
データローダジョブのテスト実行
画面上部の緑の再生ボタンを押すことで、開いているジョブを実行できます。
TIPS
- 画面下部の Run タブを選択すると、ジョブからの出力を見ることができます。
- 出力では、データローダ API に送信した payload およびその結果受信した result を確認することができます。
テスト実行でエラーが発生せず、テーブルに想定通りのデータが挿入されていれば、ジョブは完成となります。
ジョブの実行モジュール作成
必要であれば、作成したジョブの実行モジュールをエクスポートすることができます。手順は下記を参照ください。
エクスポートしたモジュールは Talend から独立した Java プログラムなので、Java が実行可能な環境であればポータブルに利用できます。
チュートリアルのサンプル
チュートリアルで作成したジョブのサンプルをダウンロードできます。
サンプルジョブは以下の手順でインポートできます。
- Talend 起動後、左のツリーで右クリックし Import items を選択します。
- Select archive file でジョブの zip ファイルを選択し、全てのアイテムにチェックを入れ(Select All)、Finish ボタンを押します。
- インポート成功すると、ジョブがツリーの Job Designs の下に追加されます。