# 複数のパスで顧客データをマッチング

このシナリオのジョブは、tMatchGroupコンポーネントを使って後続する2つのマッチングパスを実行して同種の顧客レコードをグルーピングし、マッチングする計算結果をグループ単位で出力します。

パスではそれぞれ後続のパスにマッチング内容を提供し、新しいルールとブロッキングキーで識別されるマッチング内容を追加できるようにします。

このシナリオは、Talend Data Management Platform、Talend Big Data Platform、Talend Real-Time Big Data Platform、Talend Data Services Platform、Talend Data Fabricにのみ適用されます。

情報メモ注: このシナリオは標準コンポーネントで作成されていますが、Apache Spark Batchコンポーネントを使用することもできます。

## このタスクについて

このジョブでは以下のようになります:

* tMysqlInputコンポーネントは、処理される顧客レコードに接続します。

* tGenKeyコンポーネントは、それぞれ、データレコードを分割する方法を定義します。最初のキーはデータを多数のグループに分割し、2番目のキーはブロッキングキーの定義に基づいて前のブロックと重複するグループを減らします。

* tMapコンポーネントは、2番目のtGenKeyコンポーネントによって生成されたキーの名前を変更します。

* 最初のtMatchGroupは最初のtGenKeyで定義されたパーティションを処理し、2番目のtMatchGroupは2番目のtGenKeyで定義されたパーティションを処理します。

  情報メモ重要: 2つのtMatchGroupコンポーネントには同じスキーマが必要です。

* tLogRowコンポーネントは、2つのパスの後にマッチングする結果を表示します。

  ![7コンポーネントのジョブ。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup.png)

## ジョブを設定

### このタスクについて

このシナリオでは、メインの入力スキーマは[Repository] (リポジトリー)に既に保存されています。リポジトリーにスキーマメタデータを保管する方法は、[Talend Studioでメタデータを管理](https://help.qlik.com/talend/r/60JxqDnY~xaUIn8zW259rQ/_8geLcNszuHDZEaTjEn4ng)をご覧ください。

### 手順

1. [Repository] (リポジトリー)ツリービューで、メインの入力スキーマを保存した場所で[Metadata] (メタデータ) - [DB Connections] (DB接続)を展開します。
2. データベーステーブルをデザインワークスペースにドロップします。このシナリオで使用される入力テーブルは*[customer]*になります。

   コンポーネントのリストを示すダイアログボックスが表示されます。
3. 関連するデータベースコンポーネント(この例ではtMysqlInput)を選択し、[OK]をクリックします。
4. tGenKeyコンポーネント2つ、tMatchGroupコンポーネント2つ、tMapコンポーネント1つ、tLogRowコンポーネント1つを[Palette] (パレット)からデザインワークスペースにドロップします。
5. [Main] (メイン)リンクを使用して、入力コンポーネントをコンポーネントtGenKeyとtMapにリンクします。
6. 2つのtMatchGroupコンポーネントで、双方をリンクする前に、両方のコンポーネントの[Advanced settings] (詳細設定)ビューで[Output distance details] (距離の詳細を出力)チェックボックスをオンにします。

   これにより、各tMatchGroupの出力スキーマ内に*MATCHING\_DISTANCES*カラムが追加されます。

   2つのtMatchGroupコンポーネントが既に互いにリンクされている場合は、最初にジョブフローで[Output distance details] (距離の詳細)チェックボックスをオンにする必要があります。そうしないと問題が発生するおそれがあります。
7. [Main] (メイン)リンクを使用して、2つのtMatchGroupコンポーネントとtLogRowコンポーネントをリンクします。
8. 必要に応じて、コンポーネントに特定のラベルを付けて、ジョブ内での用途がわかるようにします。

   コンポーネントをラベリングする方法は、[\[View\] (表示)タブ](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/view-tab)をご覧ください。

## 入力データに接続

### 手順

1. tMysqlInputをダブルクリックして、[Component] (コンポーネント)ビューを開きます。

   ![tMysqlInputコンポーネントの設定。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup2.png)

   tMysqlInputのプロパティフィールドは自動的に入力されます。入力スキーマをリポジトリー内でローカルに定義しない場合は、[Schema] (スキーマ)リストと[Property Type] (プロパティタイプ)リストで[Built-in] (組み込み)を選択した後で、詳細を手動で入力します。

   このシナリオで使用される入力テーブルは*[customer]*になります。
2. [Query] (クエリー)ボックスでクエリーを変更し、マッチングを行うカラムのみを選択します: *account\_name*、*lname*、*fname*、*mi*、*address1*、*city*、*state\_province*、*postal\_code*。

## 最初のパスのキー生成を設定する

### 手順

1. 最初のtGenKeyをダブルクリックして、[Component] (コンポーネント)ビューを開きます。

   ![最初のtGenKeyコンポーネントの設定。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup3.png)
2. ![\[Import blocking keys from repository\] (ブロッキングキーをリポジトリーからインポート)](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/import_action.svg)をクリックし、Profilingパースペクティブで作成およびテストされたマッチングルールからブロッキングキーをインポートして、ジョブで使用します。それ以外の場合は、以下の手順に従ってブロッキングキーのパラメーターを定義します。
3. [Algorithm] (アルゴリズム)テーブルで[+]ボタンをクリックして、テーブルに1行追加します。
4. columnカラムで、新しく追加された行をクリックし、アルゴリズムを使って処理するカラムをリストから選択します。

   この例では、*lname*を選択します。
5. 2番目の行でも同じようにして*postal\_code*を選択します。
6. pre-algorithmカラムで、新しく追加した行をクリックし、対応するカラムに適用するプリアルゴリズムをリストから選択します。

   この例では、[remove diacritical marks and convert to upper case] (発音区別符号を削除し、大文字に変換する)を選択し、発音区別符号を削除して*lname*カラムのフィールドを大文字に変換します。

   この変換によって生データは変更されません。
7. algorithmカラムで、新しく追加した行をクリックし、対応するカラムに適用するアルゴリズムをリストから選択します。

   この例では、[N first characters of each word] (各語の最初のN文字)を選択します。

   [Show help] (ヘルプの表示)チェックボックスをオンにすると、アルゴリズム/オプションのパラメーターを設定する手順を表示できます。
8. [algorithm] (アルゴリズム)カラムの2番目の行でも同じようにして、[first N characters of the string] (文字列の最初のN文字)を選択します。
9. 必要に応じて、[algorithm] (アルゴリズム)カラムの横にある[Value] (値)カラムをクリックし、選択したアルゴリズムに値を入力します。

   このシナリオでは、どちらの行にも1を入力します。対応するカラムの各フィールドの最初の文字を使用してキーが生成されます。

   値を必要とするアルゴリズムには必ず値を設定してください。そうでないと、ジョブの実行時にコンパイルエラーが発生します。

## 第2パスのキー生成を設定する

### 手順

1. 2番目のtGenKeyをダブルクリックして、[Component] (コンポーネント)ビューを開きます。

   ![2番目のtGenKeyコンポーネントの設定。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup4.png)
2. [Algorithm] (アルゴリズム)テーブルで、データの分割に使用するカラム(このコンポーネントでは*account\_num*)を定義します。[first N characters of the string] (文字列の最初のN文字)アルゴリズムを選択し、[Value] (値)カラムの値を*1*に設定します。

   2つのtGenKeyコンポーネントは、それぞれ、読み取り専用の*T\_GEN\_KEY*カラムを出力スキーマ内に生成します。相互の上書きを停止するには、*T\_GEN\_KEY*カラムのどちらか1つの名前を変更する必要があります。
3. tMapコンポーネントをダブルクリックして、そのエディターを開きます。

   ![tMapコンポーネントの設定。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup8.png)
4. [Schema editor] (スキーマエディター)で、最初のテーブルから2番目のテーブルにカラムをコピーし、名前*T\_GEN\_KEY*をたとえば*T\_GEN\_KEY1*に変更します。
5. エディターの上部で、すべてのカラムを入力テーブルから出力テーブルにドロップします。
6. [Ok]をクリックしてデータ変換を保存し、エディターを閉じます。
7. tGenKeyの基本設定で[...]ボタンをクリックし、生成された2つのキーが出力スキーマで別々の名前になっていることを確認します。

   ![入力スキーマと出力スキーマの例。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup5.png)

## 最初のパスを設定する

### 手順

1. *pass1*とラベル付けされたtMatchGroupの基本設定で、[Matching Algorithm] (マッチングアルゴリズム)リストから[Simple VSR] (単純VSR)を選択します。

   このシナリオでは、マッチングルールはVSRアルゴリズムに基づいています。
2. [Preview] (プレビュー)ボタンをクリックして[Configuration Wizard] (設定ウィザード)を表示します。

   ![最初のtMatchGroupコンポーネントの設定。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup6.png)
3. ![\[Import blocking keys from repository\] (ブロッキングキーをリポジトリーからインポート)](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/import_action.svg)をクリックし、Profilingパースペクテブで作成およびテストされたマッチングルールからマッチングキーをインポートして、ジョブで使用します。または、以下のステップの説明に従い、マッチングキーのパラメーターを定義します。

   コンポーネントの基本設定で選択されているのと同じタイプのルールをインポートまたは定義することが重要です。そうでない場合、ジョブは2つのアルゴリズム間で互換性のないパラメーターのデフォルト値で実行されます。
4. [Key definition] (キー定義)テーブルで[+]ボタンをクリックし、マッチングオペレーションを行うカラム(このシナリオでは*lname*)を追加します。

   情報メモ注: 日付カラムにアルゴリズムやマッチングアルゴリズムを適用すると、日付形式で比較する内容を決定できます。

   たとえば、日付の年のみを比較する場合は、コンポーネントスキーマで日付カラムのタイプを[Date]に設定し、[Date Pattern] (日付パターン)フィールドに*yyyy*と入力します。コンポーネントでは、スキーマで定義されたパターンに基づき、日付形式を文字列に変換してから文字列比較が開始されます。
5. [Matching Function] (マッチングファンクション)カラムで*Jaro-Winkler*アルゴリズムを選択します。
6. [Tokenized measure] (トークン化された測定)リストで[Any order] (任意の順序)を選択します。
7. [Weight] (加重)を*1*に設定し、[Handle Null] (Nullを処理)カラムで、カラム内のNull属性の処理に使用するnullオペレーター(このシナリオでは[Null Match Null] (NullはNullに適合する))を選択します。
8. [Blocking Selection] (ブロッキング選択)テーブルの下にある[+]ボタンをクリックし、テーブルに1行追加します。
9. 行をクリックし、ブロッキング値として使用するカラム(この例では*T\_GEN\_KEY*)をリストから選択します。

   ブロッキング値を使用すると、検査する必要があるレコードのペアの数が減ります。入力データは、機能キーに基づいて網羅的なブロックに分割されます。これにより、比較が各ブロック内のレコードペアに制限されるため、比較するペアの数が減少します。
10. 必要に応じて、[Edit schema] (スキーマを編集)をクリックしてスキーマエディターを開き、ジョブ内の前のコンポーネントから取得されたスキーマを表示します。

    ![入力スキーマと出力スキーマの例。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup9.png)
11. [Advanced settings] (詳細設定)タブをクリックし、[Sort the output data by GID] (出力データをGIDでソート)チェックボックスをオンにして、出力データをそのグループIDでソートします。
12. ウィザードを次回開いた時にマッチングルールを実行しない場合は、[Deactivate matching computation when opening the wizard] (ウィザードオープン時にマッチング計算を無効化)チェックボックスをオンにします。

## 2番目のパスを設定する

### 手順

1. *pass2*とラベル付けされたtMatchGroupの基本設定で、[Matching Algorithm] (マッチングアルゴリズム)リストから[Simple VSR] (単純VSR)を選択します。

   このシナリオでは、マッチングルールはVSRアルゴリズムに基づいています。
2. [Preview] (プレビュー)ボタンをクリックして[Configuration Wizard] (設定ウィザード)を表示します。

   このコンポーネントに先行コンポーネントと同じスキーマが存在しない場合は、警告アイコンが表示されます。その場合は、[Sync columns] (カラムを同期)ボタンをクリックして前のコンポーネントからスキーマを取得します。完了すると警告アイコンは消えます。
3. [Key Definition] (キー定義)テーブルで[+]ボタンをクリックし、マッチングオペレーションを行うカラム(このシナリオでは*lname*)を追加します。

   情報メモ注: 日付カラムにアルゴリズムやマッチングアルゴリズムを適用すると、日付形式で比較する内容を決定できます。

   たとえば、日付の年のみを比較する場合は、コンポーネントスキーマで日付カラムのタイプを[Date]に設定し、[Date Pattern] (日付パターン)フィールドに*yyyy*と入力します。コンポーネントでは、スキーマで定義されたパターンに基づき、日付形式を文字列に変換してから文字列比較が開始されます。
4. [Matching Function] (マッチングファンクション)カラムで*Jaro-Winkler*アルゴリズムを選択します。
5. [Weight] (加重)を*1*に設定し、[Handle Null] (Nullを処理)カラムで、カラム内のNull属性の処理に使用するnullオペレーター(このシナリオでは[Null Match Null] (NullはNullに適合する))を選択します。
6. [Blocking Selection] (ブロッキング選択)テーブルの下にある[+]ボタンをクリックし、テーブルに1行追加します。
7. 行をクリックし、ブロッキング値として使用したいカラム(この例では*T\_GEN\_KEY1*)をリストから選択します。
8. [Advanced settings] (詳細設定)タブをクリックし、[Multi-pass] (マルチパス)チェックボックスをオンにします。このオプションでは、tMatchGroupがジョブ内のその前の別のtMatchGroupからデータセットを受け取ることができます。
9. [Advanced settings] (詳細設定)ビューで、[Sort the output data by GID] (出力データをGIDでソート)チェックボックスをオンにして、出力データをそのグループIDでソートします。
10. ウィザードを次回開いた時にマッチングルールを実行しない場合は、[Deactivate matching computation when opening the wizard] (ウィザードオープン時にマッチング計算を無効化)チェックボックスをオンにします。

## ジョブを実行してコンソールに結果を表示

### このタスクについて

最初のパスの後に作成されたマッチンググループを表示し、2番目のパスの後に作成されたグループと比較するためには、ジョブを次のように変更する必要があります。 ![13コンポーネントのジョブ。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup7.png)

* 上図に示すように、tReplicateコンポーネントを使用して、処理する入力フローを複製します。コピー/貼付けオペレーションを使用して、ジョブの2つの部分を作成します。

* 最初のパス、tMatchGroupコンポーネントのみをジョブの上部に保持し、マッチング結果をtLogRowコンポーネント内に表示します。

* 2つのパスをジョブの下側部分に使用し、最終マッチング結果をin a tLogRowコンポーネント内に表示します。

### 手順

1. tLogRowコンポーネントをそれぞれダブルクリックして[Component] (コンポーネント)ビューを開き、[Mode] (モード)エリアで[Table (print values in cells of a table)] (テーブル(表のセルで値を表示))オプションを選択します。
2. ジョブを保存し、[F6]を押して実行します。

   最初のパスの後の結果は、次のようになります。

   ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup10.png)

   2番目のパスの後の結果は、次のようになります。

   ![](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/use_case-multi_pass_tmatchgroup11.png)

   たとえば、2つのパスの結果から顧客名*Wilson*を比較すると、*Wilson*という姓の顧客が2番目のパスの後にグルーピングされているのがわかります。