Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

シェルキックする際のパラメータについて

お世話になっております。

 

TalendであるDBを参照して、データが1件以上あったらシェルをキックするというジョブを作成しております。

(tDBInput→(main)→tJavaRow→(if)→tSSH)

 

DBからselectした結果をシェルをキックする際にパラメータとしてセットすることは可能でしょうか?

 

例えば、InputのDBのカラムは、No,コード,グループ,名称だとします。

シェルをキックする際に、No,コード,グループの値をパラメータとしてセットすることができますでしょうか?

それぞれのカラムは可変のため、tSSHのコマンドを記載する際に、べた書きはできないものとします。

 

対応方法がございましたら、どなたかお教えいただきたいです。

よろしくお願いいたします。

 

Labels (1)
4 Replies
Anonymous
Not applicable
Author

@SU_ANNさん

 

例えば、tWaiteForSqlDataというコンポーネントを使うと、指定されたインターバル時間(秒単位)でDBテーブルへ該当データがあるかないかを見に行くことが出来ます。条件に合致した(SQLを発行します)データが見つかれば、次のコンポーネントに制御を移すことが可能です。また、このループは処理を継続するか、いちど実行できればループから抜けるかなども設定できます。

 

しかし、データの発生を認識する条件が都度異なるとなると、ちょっと要件に当てはめるのは難しいかもしれないですね。where句で指定するカラムが可変するという意図で理解しましたが正しいでしょうか?

 

0683p000009LzFH.jpg

 

 

Anonymous
Not applicable
Author

ご返信ありがとうございます。

 

既に作成しているジョブで、where句をして

Anonymous
Not applicable
Author

ご返信ありがとうございます。

既に作成済みのジョブではwhere句で条件を一部指定して、データは抽出しており、条件が都度異なります。
条件パターンが複数あるので、やはり難しいですよね…

また、データを抽出する際にwhere句で条件は絞らず、それぞれのカラムのデータをcontextなどにもって、シェルをキックする際に、それをパラメータとして渡すことはできますでしょうか?
msminek
Creator
Creator

 環境が準備できず、アイデアだけなのですが。

 tSSH コンポーネントは初期化時にパラメータを組み立ててしまうので、ロウ

から直接パラメータを拾うことは難しい、ということはご理解の通りです。

 

> (tDBInput→(main)→tJavaRow→(if)→tSSH)

 

 ふた通りの方法で実現できる可能性があります。

  1.  tSSH を別のジョブにして、引数をコンテキストに、tRunJob で呼び出す。
  2. tFlowToIterate コンポーネントを使ってイテレートに変更、引数をグローバルマップ経由で受取る。

 1. は、確実に実装できると思います。

 2. は、たぶん下記のような構成でできそうです。

 

> (tDBInput→(Main)→tJavaRow→(Main)→tFilterRow→(フィルター)→tFlowToIterate→(Iterate)→tSSH)

 ・if の代わりに tFilterRow を置いてみました。 

 ・tFlowToIterate に入力された行はグローバルマップに格納されます。

 ・tSSH のコマンド欄でグローバルマップから取得します。

 

もう解決されたとは思いますが、ご参考までにどうぞ。