# 処理コンポーネントの定義

以下の手順に従って、次の操作を行うtMapコンポーネントを定義します。

* 入力と出力間のデータ型自動変換を行い、ジョブの実行時にコンパイルエラーが発生しないようにする

* 各人物の名(ファーストネーム)と姓(ラストネーム)を組み合わせる

## 手順

1. 次の関数とパラメーターを入力し、コンポーネントを追加します。
   ```
   addComponent {
   	setComponentDefinition {
   		TYPE: "tMap",
   		NAME: "tMap_1",
   		POSITION: 480, 256
   	}
   }
   ```
2. setComponentDefinition {}関数の次にsetSettings {}関数を入力し、マッパー設定を定義します。

   この例では、idカラムとageカラムのデータ型は入力スキーマでは文字列型ですが、出力スキーマでは整数型になっています。コンポーネントのデータ型自動変換機能を有効にして、その他の設定はデフォルトのままにします。
   ```
   	setSettings {
   		ENABLE_AUTO_CONVERT_TYPE : "true"
   	}
   ```
3. setSettings {}関数の次にaddSchema {}関数を入力し、次のコンポーネントが期待するデータ構造を定義します。

   この例では出力フローの名前がoutで、次の4つのカラムで構成されています。
   * id、整数型、2桁

   * full\_name、文字列型

   * age、整数型、2桁

   * city、文字列型
   ```
   	addSchema {
   		NAME: "out",
   		CONNECTOR: "FLOW",
   		LABEL: "out"
   		addColumn {
   			NAME: "id",
   			TYPE: "id_Integer",
   			LENGTH: 2
   		}
   		addColumn {
   			NAME: "full_name",
   			TYPE: "id_String"
   		}
   		addColumn {
   			NAME: "age",
   			TYPE: "id_Integer",
   			LENGTH: 2
   		}
   		addColumn {
   			NAME: "city",
   			TYPE: "id_String"
   		}
   	}
   ```
4. addSchema {}関数の次にaddMapperData {}関数を入力し、入力テーブル、出力テーブル、変数テーブル、結合、マッピングを含むマッピングデータを定義します。
5. addMapperData {}関数にaddInputTable {}関数を入力して、メイン入力フローの入力テーブルを定義します。

   カラム定義は1番目のtFileInputDelimitedコンポーネントのカラム定義と同じであることが必要です。
   ```
   	addMapperData {
   		addInputTable {
   			NAME: "row1"
   			addColumn {
   				NAME: "id",
   				TYPE: "id_String"
   			}
   			addColumn {
   				NAME: "name",
   				TYPE: "id_String"
   			}
   			addColumn {
   				NAME: "age",
   				TYPE: "id_String"
   			}
   			addColumn {
   				NAME: "city",
   				TYPE: "id_String"
   			}
   		}
   	}
   ```
6. addMapperData {}関数で別のaddInputTable {}関数を入力し、ルックアップフローの入力テーブルを定義します。

   カラム定義は2番目のtFileInputDelimitedコンポーネントのカラム定義と同じであることが必要です。
7. idカラムの定義ではEXPRESSION: "row1.id"というパラメーターを入力し、idカラムで2つの入力テーブル間の結合を設定します。

   この例では、左外部結合を定義しています。内部結合を定義するには、ISINNERJOIN: trueパラメーターをaddInputTable {}関数に追加します。
   ```
   		addInputTable {
   			NAME: "row2"
   			addColumn {
   				NAME: "id",
   				TYPE: "id_String"
   				EXPRESSION: "row1.id"
   			}
   			addColumn {
   				NAME: "family",
   				TYPE: "id_String"
   			}
   		}
   ```
8. addMapperData {}関数にaddOutputTable {}関数を入力し、この例では唯一である出力テーブルを定義します。

   カラム定義はスキーマ設定で定義されているものと同じであることが必要です。IDパラメーターは必須ですが、IDが必要なのは、出力テーブルがリポジトリースキーマを使用する場合のみです。
9. 各出力カラムにEXPRESSIONパラメーターを追加することによって、入力カラムと出力カラムの間のマッピングを設定します。

   full\_nameカラムはメイン入力フローのnameカラムとルックアップフローのfamilyカラムの組み合わせとなり、この間にスペースを1つ入力します。
   ```
   		addOutputTable {
   			ID: "",
   			NAME: "out"
   			addColumn {
   				NAME: "id",
   				TYPE: "id_Integer",
   				EXPRESSION: "row1.id"
   			}
   			addColumn {
   				NAME: "full_name",
   				TYPE: "id_String",
   				EXPRESSION: "row1.name  + \" \" + row2.family"
   			}
   			addColumn {
   				NAME: "age",
   				TYPE: "id_Integer",
   				EXPRESSION: "row1.age"
   			}
   			addColumn {
   				NAME: "city",
   				TYPE: "id_String",
   				EXPRESSION: "row1.city "
   			}
   		}
   ```

   情報メモ警告:

   メタ文字を指定する場合、必ずバックスラッシュ(\)を使用してください。