既存のループ式を再使用 - 7.3

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

Version
7.3
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-01-09

LoopReferenceファンクションを使えば、前に別のエレメントで定義されたループ式を再使用できます。

始める前に

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

このタスクについて

この例では、顧客情報が含まれているXMLファイルを使います。各customerエレメントには顧客の名前とその状態が含まれています。顧客が状態別にグルーピングされているXML出力を作成したいとします。入力には次のXMLサンプルを使います:
<customers>
	<customer>
		<lastName>Harrison</lastName>
		<firstName>Emily</firstName>
		<state>New Jersey</state>
	</customer>
	<customer>
		<lastName>Reagan</lastName>
		<firstName>James</firstName>
		<state>New Jersey</state>
	</customer>
	<customer>
		<lastName>Smith</lastName>
		<firstName>Karen</firstName>
		<state>Texas</state>
	</customer>
</customers>
次のXMLサンプルを使えば、出力ストラクチャーを作成できます:
<root>
	<customers>
		<state/>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
	</customers>
	<customers>
		<state/>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
	</customers>
</root>

手順

  1. 出力customersエレメントを右クリックし、[Split Loop] (ループの分割)をクリックして、state値ごとに個別のループを作成します。
  2. 出力ストラクチャーにある最初のcustomersループをクリックし、[Loop] (ループ)タブでFixedLoopファンクションをドラッグ&ドロップします。
    これは、出力がこのループの反復を1つだけ生成することを示すために使われます。
  3. Constantファンクションを最初の出力stateエレメントにドラッグ&ドロップしてこのファンクションをダブルクリックし、[Value] (値)フィールドにNew Jerseyと入力して[OK]をクリックします。
  4. 入力customerエレメントを最初の出力customerエレメントにドラッグ&ドロップします。
    SimpleLoopファンクションが自動的に追加されます。
  5. EqualファンクションをSimpleLoopFilter引数にドラッグ&ドロップします。
  6. 入力stateエレメントをFirst Value引数に、そして最初の出力stateエレメントをSecond Value引数にそれぞれドラッグ&ドロップします。
  7. customers[2]エレメントをクリックし、[Loop] (ループ)タブでFixedLoopファンクションをドラッグ&ドロップします。
  8. Constantファンクションを2番目のstateエレメントにドラッグ&ドロップし、その値をTexasに設定します。
  9. 2番目の出力customersループをクリックし、[Loop] (ループ)タブでLoopReferenceファンクションをドラッグ&ドロップします。
  10. 最初の出力customerループをMap Element引数にドラッグ&ドロップします。
    これによって、このエレメントで使われているループが最初のcustomerエレメントで定義されたループと同じものとなるよう指定できるようになります。LoopCopyファンクションとは違って、LoopReferenceは参照先ループで定義されたフィルターやソートキーを適用しません。
  11. EqualファンクションをFilter引数に追加し、stateFirst Valueに、2番目の出力stateSecond Valueにそれぞれ設定します。
  12. 入力customerエレメントを2番目の出力customerにドラッグ&ドロップし、子エレメントをマッピングさせます。

タスクの結果

マップが設定され、次のように表示されます。
[Test Run] (テスト実行)機能を使えば結果を表示できます。この例では次のような出力が返されます。
<root>
  <customers>
    <state>New Jersey</state>
    <customer>
      <lastName>Harrison</lastName>
      <firstName>Emily</firstName>
    </customer>
    <customer>
      <lastName>Reagan</lastName>
      <firstName>James</firstName>
    </customer>
  </customers>
  <customers>
    <state>Texas</state>
    <customer>
      <lastName>Smith</lastName>
      <firstName>Karen</firstName>
    </customer>
  </customers>
</root>