よくあるご質問 - Qlik Talend
機能について(応用編)
- Q
tMapを使用して複数ファイルからの結合を行いたいが、MainをtMapに接続した後にLookupを接続しようとすると進入禁止マークが出て接続できません。
接続できる場合とできない場合があり違いがわかりません。どのような場合にLookupの接続ができなくなるのでしょうか?
またLookupの接続ができるようにする方法があれば教えてください。 - A
Talendの仕様として、一度tMapで分割したデータを一つのサブジョブ内でtMapで再度合体することはできません。
回避策としては、 例えば一度tHashOutputでメモリに出力し、tHashInputでメモリのデータを読み込み、再度tMapでJoinさせる、2つのサブジョブにより構成されるジョブを作成する必要があります。 その際、以下の2点にご注意ください。
データを分割するサブジョブとデータを合体させるサブジョブはトリガの[サブジョブが成功した場合(OnSubjobOk)]で接続します。
対応するtHashOutputとtHashInputのカラムの内容が一致していないとエラーになります。
(tHashOutputのスキーマの編集の画面でスキーマを選択コピーし、 tHashInputのスキーマの編集の画面でスキーマ情報を貼り付ける手順でカラムの内容を簡単に一致させることができます。)
なお、tHashInput/OutputがHide(隠れた)状態になっている場合は、Studio画面のツールバーから[ファイル] > [プロジェクトプロパティの編集]を選択し、 プロジェクトの設定の画面で[デザイナ] > [パレット設定]を開き、 左のHide側に表示されているフォルダ又はコンポーネントを右のShow側に移動させてください。
機能について(応用編)
- Q
ファイルデータでレコード件数0件とそれ以外で後続処理を制御するコンポーネントはありますか。
- A
レコード件数の有無によって処理を分けるコンポーネントはないので、ジョブの組み方を工夫します。
例えばファイルからデータを読み込みtHashOutputに格納します。 この際にtJavaをトリガの「サブジョブが成功した場合(OnsubjobOk)」でtHashOutputの後に配置し、GlobalMap.get(“tHashOutput_1_NB_LINE”)を取得して一旦コンテキスト変数に格納しておくと行数のデータを後で参照する際には便利です。
トリガの[IF]で「context.row_count>0」の場合のみtHashiInputからデータを読み込み処理を行う後続のサブジョブを実行するようにすれば、レコード件数が1以上の場合の処理を組むことができます。 また、 「context.row_count=0」という指定をした[IF]を使用することで、レコード件数が0件の場合の処理を組むこともできます。
機能について(応用編)
- Q
tWarnコンポーネントを使用し警告処理を実装したのですが、Basic statusには「Ok」が設定されてしまいました。
Basic statusを「Warning」にするにはどのように実装すればよいでしょうか。 - A
tWarnを使用するだけでは、ジョブのステータスはエラーと判断されません。
ジョブを実行した際に問題が発生し完了しないまま異常終了した場合、又はtDieでジョブが強制終了された際に、Basic StatusにはWarning(三角に!マークのアイコン)が表示されます。
tWarnの単体での使用方法としては、Logにメッセージを残すことしか基本的にできません。
ただしtWarnの警告メッセージ、警告コード、優先度(3つともユーザがtWarn使用時に任意に設定可能)が変数として使用できます。従って、tDieや他のコンポーネントを組み合わせる(変数を使用する)ことでより効果を発揮します。
使用方法の一例として、ジョブ実行時のtWarnの警告コードまたは優先度をtJavaで集計し一定以上の場合tDieでジョブを強制終了する事が可能です。
機能について(応用編)
- Q
tFileInputExcelの「ヘッダー」「フッター」「制限」とは何でしょうか。
- A
ヘッダーとは「ファイルの最初にスキップするレコード数」を指定します。 ここで指定された数字分の行数を読み飛ばして、データの取り込みを開始します。
フッターとは「ファイルの最後部でスキップするレコード数」を指定します。 これは、たとえばExcelの表で、下端に合計行がある場合に、その合計行の行数を指定しておくことで、データを上から読んでいったときに、下端の合計行をデータとして取り込まないようにすることができる、というものです。
ただしセルの内容が空でもExcelの書式設定などがされていると、それを有効なセルと判断し、結果、フッターの認識位置が期待と違ってしまう場合があるようで、使用には注意が必要です。
制限とは「処理する最大行数」を指定します。これは上から読んでいったときに、何行まで読み込むか、という制限値になります。
機能について(応用編)
- Q
エクスポートしたjarファイルを実行する際に、何らかの引数を渡して挙動を変更させることはできますか。
- A
tFileInputPropertiesとtContextLoadコンポーネントにより可能です。
その他の方法としては、設定ファイルを使用するのではなく、ジョブにContext変数を準備しておき、バッチ実行時に引数で値を渡す方法も考えられます。
機能について(応用編)
- Q
DBから異なるDBへ大量のデータをロードする際にOutOfMemoryが発生してINSERTできません。何か方法はありますか。
- A
tMap上のルックアップの処理でOutOfMemoryが発生した場合には、大量のデータを利用する場合には「基本設定」の「一時データをディスクに保存」を選択することで、データが一時的にファイルに書き込むことが可能なので、メモリがパンクするのを防げます。
機能について(応用編)
- Q
次のようなトランザクション制御を行いたい時に、tMysqlOutputがコミットしないようにすることは可能でしょうか?
- A
tMysqlOutputがコミットしてしまうため、途中でエラーが発生してしまった場合にRollBackができません。
[tMysqlOutput]の設定項目には「既存の接続を使用」という項目があり、それを選択することで[tMysqlConnection]でコネクションを張った接続を使用することができます。その上でトリガでtMysqlRollBackコンポーネントとエラートリガで接続して制御します。
これを選択しない場合は、[tMysqlOutput]自体でコネクションを新規に張りますので、[tMysqlOutput]のコンポーネントを実行したタイミングでコミットが発生します。
機能について(応用編)
- Q
tMapでフルアウタージョインの設定が可能ですか?
- A
フルアウタージョインの設定は、製品の標準機能としては提供しておりません。 その他の方法としては、フルアウターの実装方式は、ソース・ターゲット、データ量等を加味して、様々な実装方式が考えられます。
性能や稼働環境の資源面で、一様な方式に実装を束縛することが得策ではないため、製品機能としては提供しておりません。
Talendでの対応としては、フルアウタージョインの結果を出力するジョブを作成する必要があります。
例えばIDをメモリ中のハッシュに保持し次にルックアップで不要なデータを読み飛ばし、最後に直列結合する方法が考えられます。
機能について(応用編)
- Q
<DB>Outputで、一意制約エラー等が発生しても処理を継続し、エラーデータを特定できますか?
- A
可能です。
t<DB>Outputコンポーネントから「row-reject」接続により、エラー発生時にエラーデータを出力することが可能です。
ただし「row-reject」接続は、下記の設定をすることで利用可能になります。
(1) t<DB>Outputの基本設定で「エラーで停止」をOFFにする。
(2) Advanced Settingsで、MySQLの場合は「挿入の拡張」をOracleやPostgreSQLでは「バッチサイズの使用」をOFFにする。
※バッチジョブとして実行できなくなるため、パフォーマンスに影響があります。
機能について(応用編)
- Q
リスト形式のプロパティでパラメタ指定は可能でしょうか?
- A
リスト形式は固定値になってしまうため、JOB実行時毎にコンパイルする必要があるように見えます。
しかし、リスト形式で選択するプロパティは一番上の空白を選ぶと手入力できるので、そこに context.xxx のような形でコンテキストを指定できます。
機能について(応用編)
- Q
ジョブが出力するログについてローテーションの仕組みはありますか?
- A
ジョブ側では実行毎に決められたログに追記するのみで、ローテーションの機能はありません。
そこで、例えばログの出力ファイル名の設定にGlobalMapを使用して「プロジェクト名」「ジョブ名」「GetCurrentDate」を付加しておいて、ログを分けるようにします。
別にログファイル削除用の仕組みをShellや、必要な場合Talendのファイル操作ジョブにて用意し、定期的に実行すると言った方法が考えられます。
機能について(応用編)
- Q
いくつかのジョブを実行すると、log4jの警告メッセージが標準出力されます。
「log4j:WARN No appenders could be found for logger (com.amazonaws.internal.config.InternalConfig). log4j:WARN Please initialize the log4j system properly.」 - A
コンポーネントの中にlog4jを使用するものと使用しないものがあります。
使用するものについては、Talend Studioのプロジェクト設定で、log4jの出力を有効に(log4jコンポーネントをアクティベーションにチェック)することで、log4jの設定ファイルが含まれたバッチがエクスポートされるようになり、ジョブの実行時の警告もでなくなります。
デフォルトでは上記の設定がオフになっているため、警告が出力されます。
