メイン コンテンツをスキップする 補完的コンテンツへスキップ

各行でルックアップをリロードして詳細なマッピングを行う

次のシナリオでは、年齢の結合に基づいて、ルックアップデータベースから人の詳細を取得するジョブについて説明します。メインフローのソースデータは、people_ageというMySQLデータベーステーブルから読み取られます。これには、数値ID、英数字の姓と名、数値の年齢など、人の詳細が含まれます。人の年齢は40歳か60歳です。このテーブルのレコード数は、意図的に制限されています。

参照またはルックアップ情報は、large_data_volumeというMySQLデータベーステーブルにも保管されます。このルックアップテーブルには、メインフローの人が訪れた都市を含む多数のレコードが含まれています。わかりやすくするためにレコードの数は制限されていますが、通常の使用では、以下の例で説明する機能の有用性は、非常に大きな参照データボリュームの場合により明白になります。

パフォーマンスを最適化するために、ルックアップテーブルから行をロードするたびに実行しなくて済むように、データベース接続コンポーネントをジョブの最初に使って、ルックアップデータベーステーブルへの接続を開きます。

年齢が60または40の人からのデータのみを選択するために、このルックアップソースフローに式フィルターが適用されます。このようにして、ルックアップデータベーステーブルの関連する行のみがメインフローから各行にロードされます。

したがって、このジョブは、限られた数のメインフロー行から、式キーに一致する結果のみをロードするようにルックアップ結合を最適化する方法を示しています。

情報メモ注:

一般的に、ルックアップロードは各メインフロー行に対して実行されるため、このオプションは主に、限られた行数がメインフローで処理され、多数の参照行がルックアップされる場合に役立ちます。

結合はageフィールドで解決されます。次に、tMapコンポーネントエディターの関連するロードオプションを使って、ルックアップデータベース情報が各メインフローの受信行に対してロードされます。

このジョブでは、ソースコンポーネントと接続コンポーネントのメタデータが準備されています。データベース接続スキーマメタデータの設定方法は、データベースメタデータを一元管理をご覧ください。

このジョブは、5つのコンポーネント、4つのデータベースコンポーネント、およびマッピングコンポーネントで形成されます。

コンポーネントをリンク

Procedure

  1. [Repository] (リポジトリー)[Metadata] (メタデータ)ノード下にあるDB接続をデザインワークスペースにドロップします。この例では、ソーステーブルはpeople_ageという名前です。
  2. コンポーネントをドロップする時にポップアップするリストからtMysqlInputを選択します。
  3. ルックアップDB接続テーブルを[Metadata] (メタデータ)ノードからデザインワークスペースにドロップし、ポップアップするリストからtMysqlInputを選択します。このジョブでは、ルックアップの名前はlarge_data_volumeです。
  4. 同様に、DB接続を[Metadata] (メタデータ)ノードからデザインワークスペースにドロップし、ポップアップするリストからtMysqlConnectionを選択します。このコンポーネントは、ルックアップテーブルから行をロードするたびに操作を繰り返さずに済むように、ルックアップデータベーステーブルへの永続的な接続を作成します。
  5. エディターの右側にある[Palette] (パレット)で、[Processing] (処理)ファミリーからtMapコンポーネントを、[Database] (データベース)ファミリーからコンポーネントtMysqlOutputtMysqlCommitを選択します。
  6. ここで、すべてのコンポーネントを相互に接続します。そのためには、peopleテーブルに対応するtMysqlInputコンポーネントを右クリックし、リンクをtMapにドラッグします。
  7. tMapコンポーネント上のリンクをリリースすると、メイン行フローが自動的にセットアップされます。
  8. メインフローデータの識別を容易にするために、[Main] (メイン)行リンクの名前をpeopleに変更します。
  9. 同じ操作を実行して、ルックアップテーブル(large_data_volume)をtMapコンポーネントに、tMaptMysqlOutputコンポーネントに接続します。
  10. ダイアログボックスが開き、出力リンクに名前を入力するよう求めます。この例では、出力フローの名前はpeople_mixandmatchとなっています。
  11. 参照データフローの識別に役立つよう、ルックアップ行接続リンクの名前もlarge_volumeに変更します。
  12. トリガーリンクOnSubjobOkを使って、tMysqlConnectiontMysqlInputに接続します。
  13. トリガーリンクOnSubjobOkを使って、tMysqlInputコンポーネントをtMysqlCommitコンポーネントに接続します。

コンポーネントを設定

Procedure

  1. tMapコンポーネントをダブルクリックして、グラフィカルマッピングエディターを開きます。
  2. [Output] (出力)テーブル(tMaptMySQLOutputにリンクした時に自動的に作成されたもの)が、ルックアップフロー(large_data_volume)とメインフロー(people_age)からの一致する行によって形成されます。
    出力に渡されるメインフロー行を選択し、それらをドラッグして出力テーブル(マッピングエディターの右側)に貼り付けます。
    この例では、メインフローからの選択に次のフィールドが含まれています: idfirst_namelast_Nameage
    ルックアップテーブルから、次のカラムが選択されています: city
    入力テーブル(peoplelarge_volume)から選択したカラムを出力テーブルにドロップします。
  3. 次に、メインフローとルックアップフロー間の結合を設定するために使われます。
    メインフローテーブル(上部)のageカラムを選択し、ルックアップフローテーブル(この例ではlarge_volume)のageカラムに向かってドラッグします。
    ルックアップテーブルのリンクされた式の横に鍵のアイコンが表示されます。これで結合が確立されました。
  4. [tMap settings] (tMap設定)ボタンをクリックし、[Lookup Model] (ルックアップモデル)に対応する[...]ボタンをクリックして、処理中の各行のルックアップをリロードするよう[Options] (オプション)ダイアログボックスから[Reload at each row] (行ごとにリロード)オプションを選択します。
  5. 同様に、ルックアップテーブルで[Match Model] (一致モデル)[All matches] (すべての一致)に設定します。これは、age一致のすべてのインスタンスを出力フローに収集するためです。
  6. 次に、ルックアップテーブルに、ageカラムに基づいてフィルタリングを実装します。[Reload at each row] (行ごとにリロード)オプションを選択すると、GlobalMapKeyフィールドが自動的に作成されます。実際、この式を使って参照データを動的にフィルタリングし、メインフローと結合する時に関連情報のみをロードできます。
    のシナリオの冒頭で述べたように、メインフローデータには、40歳または60歳の人のみが含まれます。40や60とは異なる年齢を含むすべてのルックアップ行をロードする手間を省くために、メインフローの年齢をグローバル変数として使い、ルックアップフィルタリングにフィードするという方法があります。
  7. メインフローテーブルから、Ageカラムをルックアップテーブルの[Expr.] (式)フィールドにドロップします。
  8. 次に、[globalMap Key] (グローバルマップキー)フィールドに、式を使って変数名を入力します。この例では、"people.Age"となります。
    [OK]をクリックしてマッピング設定を保存し、デザインワークスペースに戻ります。
  9. ルックアップフローの動的フィルタリングの実装を完了するには、ここでデータベース入力のクエリーにWHERE句を追加する必要があります。
  10. [Query] (クエリー)フィールドの末尾に、Selectステートメントに続いて、次のWHERE句を入力します: WHERE AGE ='"+((Integer)globalMap.get("people.Age"))+"'"
  11. タイプが変数として使われるカラムに対応していることをご確認ください。このユースケースでは、AgeInteger型です。そして、マップエディターの[globalMap key] (グローバルマップキー)フィールドで設定した方法で変数を使います。
  12. tMysqloutputコンポーネントをダブルクリックして、プロパティを定義します。
  13. [Use an existing connection] (既存の接続を使用)チェックボックスをオンにすると、作成済みのDB接続を利用できます。
    ターゲットテーブル名および関連するDBアクションを定義します。

ジョブを実行

Procedure

  1. Ctrl + Sキーを押してジョブを保存します。
  2. デザインワークスペースの下部にある[Run] (実行)タブをクリックして、ジョブ実行タブを表示します。
  3. [Debug Run] (デバッグ実行)ビューで[Traces Debug] (トレースデバッグ)ボタンをクリックして、データ処理の進行状況を表示します。
    より快適にするために、ジョブ名タブをダブルクリックして、実行中にジョブデザインビューを最大化する方法があります。
    ルックアップデータは、年齢の制約に対応して、メインフローの行ごとにリロードされます。すべてのageの一致はルックアップ行で取得され、出力フローでグルーピングされます。
    したがって、新しく作成されたpeople_mixandmatchテーブルに含まれているデータをチェックアウトすると、年齢が60または40に等しいさまざまな個人に対応するすべてのageの重複と、彼らが訪れた都市が見つかります。

このページは役に立ちましたか?

このページまたはコンテンツにタイポ、ステップの省略、技術的エラーなどの問題が見つかった場合はお知らせください。