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

Five Stars

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

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

 

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

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

 

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

 

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

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

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

 

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

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

 

Moderator

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

@SU_ANNさん

 

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

 

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

 

waitforsqldata.JPG

 

 

---
Have fun!
Five Stars

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

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

 

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

Five Stars

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

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

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

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

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

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

 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 のコマンド欄でグローバルマップから取得します。

 

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

 

Tutorial

Introduction to Talend Open Studio for Data Integration.

Definitive Guide to Data Integration

Practical steps to developing your data integration strategy.

Definitive Guide to Data Quality

Create systems and workflow to manage clean data ingestion and data transformation.