# DSQLマップでループを分割

Availability-note[Beta](https://help.talend.com/r/en-US/Cloud/labels-on-talend-help-center/availability-beta)

ベータ版コンテンツ

複数のループを1つのループにマッピングします。

## 始める前に

* 入力と出力のストラクチャーが作成済みであること。ストラクチャーの作成には下のJSONサンプルを使用できます。

## このタスクについて

この例では、同じJSONファイル内にある別々の2つのループからデータを抽出し、出力にある1つのループにマッピングするDSQLマップを作成します。 入力データは次のようになります。

```
{
    "bicycles": [
        {
            "make": "MBIKE",
            "description": "27.5 inch electric mountain bike",
            "color": "blue",
            "price": 899.99
        },
        {
            "make": "EBIKE",
            "description": "Electric hybrid bike",
            "color": "grey/green",
            "price": 999.99
        },
        {
            "make": "WBIKE",
            "description": "Women's road bike",
            "color": "white",
            "price": 299.99
        }
    ],
    "scooters": [
        {
            "make": "ESCOOT",
            "description": "Camou electric scooter",
            "color": "black",
            "price": 749
        },
        {
            "make": "EVSCOOT",
            "description": "Folding electric velocity+ scooter",
            "color": "black",
            "price": 599.99
        },
        {
            "make": "KSCOOT",
            "description": "24 volt kid scooter",
            "color": "white",
            "price": 299.99
        }
    ]
}
```

出力ストラクチャーは次のようになります。

```
{
    "items": [
        {
            "make": "",
            "description": "",
            "price": ""
        }
    ]
}
```

## 手順

1. 新しいDSQLマップを作成して入力ストラクチャーと出力ストラクチャーを追加します。

   ルートエレメント間に最初のマッピングが自動的に作成されます。出力ストラクチャーのルートエレメントに、対応するData Shaping Query Languageの式が表示されます。 ![](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/tdm-dsql-map-editor-split-map.png)
2. 出力ストラクチャーでitemsエレメントを右クリックし、[Split] (分割)をクリックします。

   これによって同一の新しいループが作成されます。これはbicycle入力エレメントとscooters入力エレメントをマッピングするために必要です。分割後、マップ内のストラクチャーに別々のitemsループが2つ表示されても、出力には両方のループのコンテンツを持つitems配列が1つだけ含まれるようになります。

   この変更はマップにのみ適用され、ストラクチャー自体にはプロパゲートされません。新しいループを右クリックし、[Go to Structure Element] (ストラクチャーエレメントに移動)をクリックしてストラクチャーを開くと、そのストラクチャーが変化していないことがわかります。
3. 最初のitemsループにbicycles入力エレメントを、2番目のループにbicyclesエレメントをドラッグ＆ドロップします。

   ![](https://help.qlik.com/talend/ja-JP/data-mapper-user-guide/Resources/images/tdm-dsql-map-editor-split-map-result.png)

   情報メモヒント: 必要であれば、分割済みのエレメントを右クリックして[Move Up] (上に移動)、[Move Down] (下に移動)、[Delete] (削除)をクリックすることで、そのエレメントを移動または削除できます。

## タスクの結果

マップが設定され、[Test Run] (テスト実行)機能を使った結果をチェックできるようになります。この例では、次の結果が返されます。

```
{
   "items":[
      {
         "make":"MBIKE",
         "description":"27.5 inch electric mountain bike",
         "price":"899.99"
      },
      {
         "make":"EBIKE",
         "description":"Electric hybrid bike",
         "price":"999.99"
      },
      {
         "make":"WBIKE",
         "description":"Women's road bike",
         "price":"299.99"
      },
      {
         "make":"ESCOOT",
         "description":"Camou electric scooter",
         "price":"749.0"
      },
      {
         "make":"EVSCOOT",
         "description":"Folding electric velocity+ scooter",
         "price":"599.99"
      },
      {
         "make":"KSCOOT",
         "description":"24 volt kid scooter",
         "price":"299.99"
      }
   ]
}
```

また、[DSQL Script] (DSQL スクリプト)ビューで、UNION ALL句を使ったData Shaping Query Languageでどのように処理されるかを確認することもできます。詳細は、[TalendData Shaping Languageリファレンスガイド](https://help.qlik.com/talend/r/ja-JP/8.0/data-shaping-language-reference-guide)をご覧ください。この例では、次のスクリプトが生成されます。

```
FROM itemsbycategory
SELECT {
   items = (
      FROM bicycles
      SELECT {
         make = make,
         description = description,
         price = price
      }
      UNION ALL
      FROM scooters
      SELECT {
         make = make,
         description = description,
         price = price
      }
   )
}
```