# Data Integrationジョブでマップを作成

JSONファイルをCSVに変換するジョブを作成します。

## このタスクについて

この例では、さまざまなタイプの電話番号の配列といった顧客情報が含まれているJSONファイルがあります。目標は、情報の各部分ごとにカラムを持つシンプルなCSVファイルに変換することです。入力には次のJSONサンプルを使います:

```
{
   "customers":[
      {
         "firstName":"John",
         "lastName":"Smith",
         "age":25,
         "address":{
            "streetAddress":"21 2nd Street",
            "city":"New York",
            "state":"NY",
            "postalCode":"10021"
         },
         "phoneNumber":[
            {
               "type":"home",
               "number":"202-555-0109"
            },
            {
               "type":"mobile",
               "number":"202-555-0181"
            }
         ]
      },
      {
         "firstName":"Jane",
         "lastName":"Doe",
         "age":31,
         "address":{
            "streetAddress":"19 4th Street",
            "city":"New York",
            "state":"NY",
            "postalCode":"10021"
         },
         "phoneNumber":[
            {
               "type":"home",
               "number":"202-555-0178"
            },
            {
               "type":"mobile",
               "number":"202-555-0123"
            },
            {
               "type":"work",
               "number":"202-555-0163"
            }
         ]
      }
   ]
}
```

## Data Integrationジョブの入力ストラクチャーを作成

サンプルドキュメントをベースにJSONストラクチャーを作成し、マッピングの入力として使います。

### 始める前に

入力として使用するJSONファイルがあること。上のサンプルを使用できます。

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

[Hierarchical Mapper] (階層マッパー)でストラクチャーを作成すれば、ネストしたレベルが複数あるファイルを扱う場合に特に便利です。ストラクチャーは、IntegrationパースペクティブのリポジトリーにあるMetadataノードから直接作成することも、Mappingパースペクティブの[Data Mapper]タブから作成することもできます。

詳細は、[ストラクチャーを使って作業](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/8.0/working-with-structures)をご覧ください。

### 手順

1. [Hierarchical Mapper] (階層マッパー)ノードを展開して[Structure] (ストラクチャー)を右クリックし、[New] (新規) &gt; [Structure] (ストラクチャー)をクリックします。
2. ウィザードが開いたら、[Import a structure definition] (ストラクチャー定義をインポート)を選択して[Next] (次へ)をクリックします。
3. [JSON Sample Document] (JSONサンプルドキュメント)を選択して[Next] (次へ)をクリックします。
4. 使用するファイルを選択します:
   * ワークスペースで既存のリソースを選択します。
   * ローカルファイルをインポートします。
   * このファイルにURLを入力します。
5. [Next] (次へ)をクリックします。
6. フォルダーを選択して新しいストラクチャーの名前を入力し、[Next] (次へ)をクリックします。
7. [Finish] (終了)をクリックします。

### タスクの結果

ストラクチャーが作成され、エディターで開かれます。[Document] (ドキュメント)タブにサンプルデータが表示されます。ストラクチャーでエレメントをクリックすると強調表示されます。 ![customers_data_jsonストラクチャーでphoneNumberエレメントが強調表示されている状態。](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/di_job_create_structure.png)

## Data Integrationジョブを作成

tFileInputRaw、tHMap、tFileOutputDelimitedを持つ単純ジョブを作成します。

### 手順

1. Integrationパースペクティブで[Job Designs] (ジョブデザイン)ノードを右クリックし、[Create Standard Job] (標準ジョブを作成) をクリックします。
2. ジョブの名前、目的、説明を入力して[Finish] (終了)をクリックします。
3. 次のコンポーネントをデザインワークスペースに追加し、[Row] (行) &gt; [Main] (メイン)接続にリンクさせます。
   * tFileInputRaw
   * tHMap
   * tFileOutputDelimited

   ジョブは次のようになります: ![デザインワークスペースでの標準ジョブ。](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/di_job_create_job_01_design.png)
4. tFileInputRawをダブルクリックしてそのプロパティを開き、[Filename] (ファイル名)フィールドの左にある[...]ボタンをクリックして入力JSONファイルを選択します。
5. tFileOutputDelimitedをダブルクリックし、[File Name] (ファイル名)フィールドに出力ファイルへのパスを入力します。
6. オプション: 必要であれば他のプロパティも編集します。
7. [Edit schema] (スキーマを編集)の右にある[...]ボタンをクリックし、出力ファイル用のスキーマを作成します。
8. [Input] (入力)スキーマで、[+]ボタンをクリックして次のカラムを追加します。
   * firstName
   * lastName
   * age
   * streetAddress
   * city
   * state
   * postalCode
   * homePhoneNumber
   * mobilePhoneNumber
   * workPhoneNumber
9. ![\[Copy all of the columns from input schema to output schema\] (すべてのカラムを入力スキーマから出力スキーマへコピー)](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/studio_button_copy_schema.png)ボタンをクリックし、カラムを出力スキーマにコピーしてOKをクリックします。

   ![tFileOutputDelimitedのスキーマ。](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/di_job_create_job_02_schema.png)
10. OKをクリックして、スキーマエディターを閉じます。
11. tHMapをダブルクリックし、ウィザードに従ってマップを生成します。
    1. 最初のステップで[Select an existing hierarchical mapper structure] (既存の階層マッパーストラクチャーを選択する)を選択し、[Next] (次へ)をクリックします。
    2. [Data Integrationジョブの入力ストラクチャーを作成](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/8.0/using-map-in-data-integration-job#creating-the-input-structure-for-your-data-integration-job_t)で作成したストラクチャーを選択して[Next] (次へ)をクリックした後、もう一度[Next] (次へ)をクリックします。
    3. 2番目のステップで、[Generate hierarchical mapper structure based on the schema] (スキーマに基づいて階層マッパーストラクチャーを生成)オプションをオンにして[Next] (次へ)をクリックします。
    4. [Finish] (終了)をクリックします。

### タスクの結果

マップが生成されます。このマップは、前に作成され、tFileOutputDelimitedで定義されたスキーマから出力ストラクチャーを生成した入力ストラクチャーを使用します。これでエレメントをマッピングできるようになります。

## Data Integrationジョブ用にエレメントをマッピング

前のステップで生成したマップを設定します。

### 手順

1. 入力customersエレメントを出力rowエレメントにドラッグします。

   firstNameエレメント、lastNameエレメント、ageエレメントが自動的にマッピングされ、入力customersエレメントへの参照を持つSimpleLoopファンクションが出力rowエレメントの[Loop] (ループ)タブに追加されます。

   このループ式は、入力のcustomersエレメントが反復されるたびにマップが出力に1行生成することを示しています。詳細は、[ループ式](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/8.0/loop-expressions)をご覧ください。 ![入力から出力へのループ式。](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/di_job_mapping_elements_01_simpleloop.png)
2. 入力エレメントであるstreetAddress、city、state、postalCodeを、対応する出力エレメントに配置します。
3. AgConcat式を出力homePhoneNumberエレメントに配置します。
4. 入力numberエレメントをAgConcatファンクションにドラッグします。

   それぞれのcustomersに複数のnumberエレメントがあるため、この操作は必須です。また、エレメント用に単一の出力を作成する必要もあります。

   入力phoneNumberループを使うループ式が生成されます。
5. Equalファンクションを、SimpleLoopファンクションのFilter引数に配置します。
6. 入力typeエレメントをFirst Value引数に配置します。
7. ConstantファンクションをSecond Value引数に配置した後にダブルクリックし、[Value] (値)フィールドにhomeと入力してOKをクリックします。

   このフィルターによってhomePhoneNumberエレメントは、typeの値がhomeに等しい反復でnumberエレメントの値を返すようになります。 ![フィルターの作成。](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/di_job_mapping_elements_02_agconcat_home.png)
8. AgConcatファンクションを右クリックし、[Copy] (コピー)をクリックして式全体をコピーします。
9. mobilePhoneNumberを右クリックし、[Paste] (貼り付け)をクリックします。

   AgConcat式がmobilePhoneNumberエレメントの[Value] (値)タブにコピーされます。
10. AgConcatを右クリックし、[Expand All] (すべて展開)をクリックして式全体を表示させた後、Constantファンクションをダブルクリックして値をmobileに変更します。
11. 前のステップを繰り返してAgConcat式を出力workPhoneNumberエレメントにコピーし、Constant式の値をworkに変更します。
12. マップを保存します。

### タスクの結果

これでエレメントがマッピングされます。 ![エレメントのマッピング。](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/di_job_mapping_elements_03_result.png)

出力をテストする場合は[Test Run] (テスト実行)オプションを使います。その後、ジョブに戻って実行します。サンプル入力データを使った出力は次のようになります:

```
John,Smith,25,21 2nd Street,New York,NY,10021,202-555-0109,202-555-0181,
Jane,Doe,31,19 4th Street,New York,NY,10021,202-555-0178,202-555-0123,202-555-0163
```