LoginSignup
42
47

More than 5 years have passed since last update.

Talendのこんな時どうすればいいの?をまとめてみました

Last updated at Posted at 2016-10-24

はじめに

この記事は、私がこっそり書いているTalendブログ記事のTipsを、逆引きな感じでまとめたものです。

Talendでジョブを組んでいたんだれど...これどうやって実装するのよ!?
といった悩みから、解決方法を逆引きする用途を想定して書いています。

そこそこ端折っていますので、詳しく知りたい場合などは各シーンごとに貼られているリンク先の記事でも参考にしてみてください。

csvデータやDB(のテーブル)を扱いたい。

Qiitaで書いています。

スキーマ定義(項目)を手で打ってたら日が暮れた...一瞬でスキーマ定義する方法はないの!?

こちらに項目名からTalendで取り込めるXMLに変換してくれるツールがあります。
これを使用して、項目変換⇒Talendのスキーマ編集画面でXMLインポートすれば、ものの数秒で何件のスキーマ定義でも行えます。
alt

参考

開発画面の下側に見たいタブ無いんだけど!(JobとかContextsとComponentとか...)

Window-> Show viewと進む
!qiita_talend01.png

表示されたShow Viewウインドウで必要なものを選択してOK押下
qiita_talend02.png

tMap内でif文が書けない...

ifで値のセット内容を変えたいんだけどエラーになってしまう...値がxxの時yyをセットする、ってどうやって書けばいいの?

三項演算子(条件演算子)を使います。
is_hungry ? "yes" : "no"

エラーが出たんだけど、どうすればいい?

コンパイルエラーの場合

  1. ジョブデザイナの左下にある「デザイナ」(Designer)タブを「コード」(Code)タブに切り替えて、赤字になっているエラー行を探す。
  2. エラー行のコードを見て、エラーを出しているコンポーネントの該当処理を「デザイナ」(Designer)タブに切り替えてから直す

参考

ジョブ実行中エラーの場合

  1. エラーを出しているコンポーネントの物理名を知る("tMap_1"などの名称)
  2. デバッグ実行(「実行」タブ⇒「デバッグ」(Debug)⇒「Javaデバッグ」(Java Debug))
  3. 1.で得たコンポーネント物理名でJavaコードのコンポーネント処理開始行を検索/特定する
  4. ブレークポイントを張る. 落ちそうな処理にあたりを付けてブレークポイントをその先もいくつか張っておく
  5. エラー落ちした部分を特定する
  6. デザイナでエラー落ちした処理を修正する

参考

グローバル変数ってないの?どうやって使うの?

contextを使用する

ジョブ内で共通のコンテキスト定義は、下のContextsで定義できます。
alt

プロジェクト内で共通のコンテキスト定義は、左のリポジトリ⇒Contextsで定義できます。
alt

何れの場合も、context. を付与することでjavaコードや、tMapなどで参照することができます。

globalMapを使用する

globalMapは、Talendジョブで必ず定義されるグローバルなハッシュオブジェクトです。

値格納

globalMap.put(key, val)

alt

値取り出し

globalMap.get(key)

alt

参考

連番を振りたいんですけど...とあるグループごとに

Talendのsequenceを使う。

Numeric.sequence(シーケンスを振るグループで共通の文字列, 初期値, 増える幅)

という感じでパラメータを与えます。

出力結果は下記のような感じです。2カラム目がグループごと(例では1カラム目のIDごと)に連番が振られています。
alt

参考

何件処理したのかを知りたい。

(Integer)globalMap.get("tXXXX_N_NB_LINE")

殆どのコンポーネントは、rowを何件処理したのかを、[globalMapのコンポーネント物理名]_NB_LINE というキーで保持していますので、それを利用します。

参考

row(行)をx倍したいんだが。

1.row-> tFlowToIterate-> tRowGenerator(x行作る)

2.row-> tJavaFlex(x回ループ)

ストレートに行をx倍する方法は無いようですので、rowをループ系コンポーネントに繋いでx倍します。

alt

参考

SAP(ERPパッケージ)と連携したい...Talendじゃ無理かな?

SAPから値を取得

tSAPInputコンポーネントで、RFC_READ_TABLEすれば多くのテーブルの値を取得してTalendで扱えます。
alt

参考

SAPの関数(BAPI)を呼び出したい

取得側と同じく、tSAPInputコンポーネントでBAPIコールできます。
ただし、伝票起票BAPIなどは入力パラメータがテーブル構造になる場合は、事前にglobalMapにListとしてputしておかないといけません。
alt

参考

Javaのコードを書きたい部分があるんだけど!

tJava, tJavaRow, tJavaFlex コンポーネントを使用すればok

参考

「This workspace is already in use(ワークスペースが使用中です。同一ワークスペースで複数のStudioは起動出来ません。)」のエラーでTalendが起動できない!

ケース1. ガチで2重起動しようとしている

これはNGなんで、諦めます。

ケース2. 確実にTalendは起動していないし、タスクマネージャのプロセスにもいない。のに開けない(Talend起動中にPCフリーズなどで強制終了した場合などに起こりがち)

  1. 開けないWorkspaceルートへ
  2. workspace/.metadataへ
  3. .lockファイルを削除(念のためどこかにコピーしておくと安心)

とすることでワークスペースが解放されます。

42
47
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
42
47