LoginSignup
7
3

More than 1 year has passed since last update.

Talend入門 (8) ~Global Map~

Last updated at Posted at 2019-05-10

全体の目的

Talendの超簡単なサンプルジョブを作成して,ETLジョブ開発に必要なスキルを習得することが目的です。

対象者

ETL / EAI技術者

環境

使用環境 バージョン
OS Windows10
Talend 7.1.1

サンプル一覧

以下の順番で習得していきます

# 内容
1 はじめてのTalend
2 ファイルI/O
3 データベースI/O
4 tMap
5 イテレータ
6 メタデータ
7 Context変数
8 Global Map(今回)
9 tHashInput/tHashOutput
10 エラーハンドリング
11 ロギング
12 子ジョブ(ジョブのネスト)
13-1 設定ファイル読み込みオリジナル版
13-2 設定ファイル読み込みコンポ版
14 tJava

サンプルコード(Talendプロジェクトデータ)

今回の目的

Global Mapについて理解する。

Global Mapとは

ジョブ内で扱うことのできるハッシュマップです。一時的なグローバル変数としても便利に利用できます。

サンプルプログラム概要

バッチの処理開始時間と終了時間をファイル名で出力するバッチジョブを作成してみます。

Global Mapを利用したジョブ

それではサンプルジョブを作成していきましょう。
リポジトリの[ジョブ]を右クリックし[ジョブの作成]を選択します。
[名前]にglobalmapと入力し[Finish]ボタンをクリックします。
GS000210.png

バッチのメイン処理を作成

[tRowGenerator]と[tFileOutputDelimited]を配置します。
GS000211.png

[tRowGenerator]の設定

[tRowGenerator]のスキーマの編集で1カラムだけ準備します。
GS000212.png

RowGeneratorエディターで関数を設定します。

カラム 関数
newColumn TalendDataGenerator.getFirstName()

GS000213.png

[tFileOutputDelimited]の設定

項目名 設定内容 説明
ファイル名 "C:/work/globalmap/tmp.csv"
追加 チェックを入れておく スクショ取り忘れました。。

GS000214.png

テスト実行

二つのコンポーネントをロウでつなぎ実行確認しておきましょう。
GS000216.png

tmp.csvが作成されればOKです。
GS000217.png

開始終了時刻の取得

[tJava]を2つと[tSleep]を一つ配置します。
GS000218.png

[tJava_1]の設定

開始時刻を取得しています

コード

String start_datetime = TalendDate.getDate("CCYYMMDDhhmmss");

// プリントデバッグ
System.out.println(start_datetime);

// startというキーのグローバルマップに値を格納
globalMap.put("start", start_datetime);

ポイント
globalMap.put(key, val)でGlobal Mapにオブジェクトを格納することができます。

GS000219.png

[tSleep]の設定

項目名 設定内容 説明
一時停止(秒) 3 メイン処理が3秒かかったという状態にしている

GS000220.png

[tJava_2]の設定

終了時刻の取得とファイル名を作成しています

コード

String end_datetime = TalendDate.getDate("CCYYMMDDhhmmss");

// プリントデバッグ
System.out.println(end_datetime);

// startというキーのグローバルマップを取得
String start = (String)globalMap.get("start");

// outfileというキーのグローバルマップに値を格納
// CCYYMMDDhhmmss-CCYYMMDDhhmmss.csv というファイル名を準備する
globalMap.put("outfile", start + "-" + end_datetime + ".csv");

ポイント
globalMap.get(key)でGlobal Mapからキーで設定したオブジェクトを取得できます。
GS000221.png

処理フローの設定

つなぐコンポーネント 設定内容 説明
[tJava_1] と [tSleep_1] OnComponentOk
[tSleep_1] と [tRowGenerator_1] OnComponentOk
[tRowGenerator_1] と [tJava_2] OnSubjobOk ファイル出力まで終わってから処理する

GS000222.png

テスト実行

エラーがなく開始および終了時刻が標準出力されることを確認しておきましょう。
GS000224.png

仕上げ(ファイルリネーム)

tmp.csvを[tJava_2]で準備したファイル名にリネームします。
[tFileCopy]を配置しパラメータを設定します。

[tFileCopy_1]の設定

項目名 設定内容 説明
ファイル名 "C:/work/globalmap/tmp.csv" [tFileOutputDelimited]で指定したもの
コピー先ディレクトリ "C:/work/globalmap"
名前の変更 チェックを入れる
宛先ファイル名 (String)globalMap.get("outfile") [tJava_2]でGlobal Mapに格納しておいた値を取得
コピー元ファイルの削除 チェックを入れる
つなぐコンポーネント 設定内容 説明
[tJava_2] と [tFileCopy_1] OnComponentOk ひとつしかコンポーネントがないのでOnSubjobOkでもよい

GS000225.png

実行

それでは実行してましょう。
ファイル名に開始と終了時刻を持ったファイルが作成できました。
GS000228.png

tips(格納済みのGlobal Map)

実はあらかじめ利用できるGlobal Mapがあります。
Outlineに表示されている値はGlobal Mapに格納されているのです。
確認してみましょう。

[tJava_3]の設定

まずは本日3つ目の[tJava]を配置します。
コードの設定を開いたらOutlineにある[tFileCopy_1]の[デスティネーションファイルパス]をマウスでドラッグ&ドロップします。
すると((String)globalMap.get("tFileCopy_1_DESTINATION_FILEPATH"))というようにGlobal Mapの取得コードをキャストまで含めて用意してくれます。

GS000225b2.png

ファイルパスを標準出力

コード設定とコンポーネントを接続し設定を完了させます。

System.out.println( ((String)globalMap.get("tFileCopy_1_DESTINATION_FILEPATH")) );
つなぐコンポーネント 設定内容 説明
[tFileCopy_1] と [tJava_3] OnComponentOk ひとつしかコンポーネントがないのでOnSubjobOkでもよい

GS000225c.png

実行

ファイルパスが出力できました。
GS000226.png

Context変数との使い分け

Context変数Global Mapはどちらもグローバル変数として利用できますが、次ような使い分けが良いと思います。

  • Context変数
    • コンフィグ値のように実行時に決まっている値
    • 実行時引数
  • Global Map
    • 一時的な変数
    • 動的なリストオブジェクトなど使いまわす値

まとめ

今回はGlobal Mapの使い方を確認しました。
Key - Value型のハッシュマップであることが分かってもらえたと思います。
あらたに利用したコンポーネントと用途をおさらいしておきます。

  • tJava
    • Javaのコードをそのまま記載できる。(詳しくは第14回tJavaで。。)
  • tSleep
    • ジョブをスリープさせる
  • tFileCopy
    • 今回はリネーム(コピー&削除)で利用

毎度のことですが、ほんのさわりの部分だけを解説していますのでぜひここから深掘りしてみてください。
お疲れ様でした。

次回以降

次回は tHashInput/Output をやっていきます。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3