努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


documents:etl:pentaho:pentaho-001

XML子要素の展開例1

2023-11-29
行方向の展開と列方向への展開サンプル2例組み込み

希望の結果

custommersの子要素群を行方向に、optsの子要素群を列方向に展開する。

この例だと、

  • 要素recsの子要素であるrecの単位で出力する。
  • 要素custommersの子要素であるcustommerの数だけ要素recの行数が増える。
  • 要素optsの子要素であるoptの個々を独立した項目として扱う。最大3としたので項目数も3個追加された形になる。
入力XML 出力(CSV想定)
<masterdata>
  <recs>
      <rec>
        <prodid>1000</prodid>
        <prodname>prod A</prodname>
        <custommers>
          <custommer><name>cust 01</name><opts><opt>opt-A</opt></opts>
                            <addr>addr 1</addr></custommer>
          <custommer><name>cust 02</name><opts><opt>opt-A</opt>
                                               <opt>opt-B</opt></opts>
                                         <addr>addr 2</addr></custommer>
          <custommer><name>cust 10</name><opts><opt>opt-A</opt>
                                               <opt>opt-C</opt></opts>
                                         <addr>addr 10</addr></custommer>
        </custommers>
      </rec>
      <rec>
        <prodid>1100</prodid>
        <prodname>prod B</prodname>
        <custommers>
          <custommer><name>cust 02</name><opts></opts>
                                         <addr>addr 2</addr></custommer>
          <custommer><name>cust 20</name><addr>addr 20</addr></custommer>
        </custommers>
      </rec>
      <rec>
        <prodid>9000</prodid>
        <prodname>prod Z</prodname>
        <custommers>
        </custommers>
      </rec>
      <rec>
        <prodid>2000</prodid>
        <prodname>prod F</prodname>
        <custommers>
          <custommer><name>cust 52</name><opts><opt>opt-A</opt>
                                               <opt>opt-B</opt>
                                               <opt>opt-C</opt></opts>
                                         <addr>addr 52</addr></custommer>
          <custommer><name>cust 55</name><opts></opts></custommer>
        </custommers>
      </rec>
  </recs>
</masterdata>

定義

Get data from XML 1

要素recがレコードに変換されるので4レコード生成される事になる。



行整列 1


Get data from XML 2

XPath指定の意のようで、相対パス指定等を利用できる。

  • 要素custommerのレコードに変換されるので7レコード生成される事になる。
  • 親要素を辿ってprodidを取得。
  • 要素optsの中身は添え字付きで指定し独立した項目として扱う。
    ※最大3個。COBOLでいうところのOCCURS句で3回の繰り返しとしている。




行整列 2


マージ結合

Tipsにも記述があるけど入力は適切なソートが適用されている必要がある。

XML 1 LEFT OUTER JOIN XML 2 の意。キーはprodid。

選択/名前変更

キー項目名が(この例だとprodid)が必ず使用される前提を付ける事ができるなら、マージ結合で生成される prodid_1 は削除できる。


documents/etl/pentaho/pentaho-001.txt · 最終更新: 2024/04/15 16:25 by k896951

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki