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