ループ反復をグルーピング - 8.0

Talend Data Mapperファンクションリファレンスガイド

Version
8.0
Language
日本語
Product
Talend Big Data Platform
Talend Data Fabric
Talend Data Management Platform
Talend Data Services Platform
Talend MDM Platform
Talend Real-Time Big Data Platform
Module
Talend Studio
Content
ジョブデザインと開発 > ジョブデザイン
Last publication date
2023-11-06

SimpleLoopファンクションをDistinct Child Elementプロパティと共に使えば、子レベルの値に基づいてループ反復をグルーピングできます。

始める前に

入力ストラクチャーと出力ストラクチャーを持つマップを作成済みであること。次のサンプルを使用できます。

このタスクについて

この例では、注文に関する情報が含まれているXMLファイルを使います。このファイルにはitemエレメントが含まれており、そのいくつかは同じ注文に属しています。目標は、注文ごとに注文ID、配送先情報、品目リストが含まれている単一エントリーでXMLファイルを作成することです。入力には次のXMLサンプルを使います:
<orders>
  <item>
    <itemId>1268168</itemId>
    <orderId>45632</orderId>
    <customerName>John Smith</customerName>
    <shipping>
      <street>South Highway</street>
      <city>San Diego</city>
      <state>California</state>
    </shipping>
  </item>
  <item>
    <itemId>1684157</itemId>
    <orderId>45632</orderId>
    <customerName>John Smith</customerName>
    <shipping>
      <street>South Highway</street>
      <city>San Diego</city>
      <state>California</state>
    </shipping>
  </item>
  <item>
    <itemId>1168468</itemId>
    <orderId>46987</orderId>
    <customerName>Jane Harrison</customerName>
    <shipping>
      <street>Bailard Avenue</street>
      <city>Los Angeles</city>
      <state>California</state>
    </shipping>
  </item>
  <item>
    <itemId>1544417</itemId>
    <orderId>46987</orderId>
    <customerName>Jane Harrison</customerName>
    <shipping>
      <street>Bailard Avenue</street>
      <city>Los Angeles</city>
      <state>California</state>
    </shipping>
  </item>
  <item>
    <itemId>1168468</itemId>
    <orderId>47949</orderId>
    <customerName>Jack Monroe</customerName>
    <shipping>
      <street>Steele Lane</street>
      <city>Las Vegas</city>
      <state>Nevada</state>
    </shipping>
  </item>
  <item>
    <itemId>1388147</itemId>
    <orderId>47949</orderId>
    <customerName>Jack Monroe</customerName>
    <shipping>
      <street>Steele Lane</street>
      <city>Las Vegas</city>
      <state>Nevada</state>
    </shipping>
  </item>
</orders>
次のXMLサンプルを使えば、出力ストラクチャーを作成できます:
<orders>
	<order>
		<orderId/>
		<customerName/>
		<shipping>
			<street/>
			<city/>
			<state/>
		</shipping>
		<items>
			<itemId/>
			<itemId/>
		</items>
	</order>
	<order>
		<orderId/>
		<customerName/>
		<shipping>
			<street/>
			<city/>
			<state/>
		</shipping>
		<items>
			<itemId/>
			<itemId/>
		</items>
	</order>
</orders>

手順

  1. 入力itemエレメントを出力orderエレメントにドラッグ&ドロップし、子エレメントをマッピングさせます。
    SimpleLoopファンクションが自動的に追加されます。このステップで[Test Run] (テスト実行)オプションを使用すると、入力itemエレメントが反復されるたびにorderエレメントが1つ出力に含まれるようになります。
  2. SimpleLoopファンクションをダブルクリックしてプロパティを開きます。
  3. [Distinct Child Element] (個別の子エレメント)ドロップダウンリストでorderIdを選択し、[OK]をクリックします。
    このオプションによって、orderId値がそれぞれ出力に一度だけ表示されるよう指定できるようになります。
  4. 入力itemIdエレメントを対応する出力にドラッグ&ドロップします。
  5. Open the Loop tab for the output itemId element and drag and drop a SimpleLoop function.
  6. 入力itemエレメントをInput Map Element引数にドラッグ&ドロップします。
  7. EqualファンクションをFilter引数にドラッグ&ドロップします。
  8. 入力orderIdエレメントをFirst Value引数に、そして出力orderIdエレメントをSecond Value引数にそれぞれドラッグ&ドロップします。
    この式によって、現在のorderIdエレメントの反復に関連付けられているitemIdエレメントがすべて返されます。

タスクの結果

これでマップが設定されます。 [Test Run] (テスト実行)機能を使えば結果を表示できます。この例では次のような出力が返されます。
<orders>
  <order>
    <orderId>45632</orderId>
    <customerName>John Smith</customerName>
    <shipping>
      <street>South Highway</street>
      <city>San Diego</city>
      <state>California</state>
    </shipping>
    <items>
      <itemId>1268168</itemId>
      <itemId>1684157</itemId>
    </items>
  </order>
  <order>
    <orderId>46987</orderId>
    <customerName>Jane Harrison</customerName>
    <shipping>
      <street>Bailard Avenue</street>
      <city>Los Angeles</city>
      <state>California</state>
    </shipping>
    <items>
      <itemId>1168468</itemId>
      <itemId>1544417</itemId>
    </items>
  </order>
  <order>
    <orderId>47949</orderId>
    <customerName>Jack Monroe</customerName>
    <shipping>
      <street>Steele Lane</street>
      <city>Las Vegas</city>
      <state>Nevada</state>
    </shipping>
    <items>
      <itemId>1168468</itemId>
      <itemId>1388147</itemId>
    </items>
  </order>
</orders>