努力したWiki

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

ユーザ用ツール

サイト用ツール


documents:etl:pentaho:pentaho-001

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
documents:etl:pentaho:pentaho-001 [2023/11/29 12:57] – 作成 k896951documents:etl:pentaho:pentaho-001 [2024/04/15 16:25] (現在) k896951
行 1: 行 1:
-this is sample+====== XML子要素の展開例1 ====== 
 + 
 +2023-11-29\\ 
 +行方向の展開と列方向への展開サンプル2例組み込み 
 + 
 +===== 希望の結果 ===== 
 + 
 +custommersの子要素群を行方向に、optsの子要素群を列方向に展開する。 
 + 
 +この例だと、 
 +  * 要素recsの子要素であるrecの単位で出力する。 
 +  * 要素custommersの子要素であるcustommerの数だけ要素recの行数が増える。 
 +  * 要素optsの子要素であるoptの個々を独立した項目として扱う。最大3としたので項目数も3個追加された形になる。 
 + 
 +^ 入力XML ^ 出力(CSV想定) ^ 
 +| <code xml> 
 +<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> 
 +</code> | {{:documents:garbage:pasted:20230929-125418.png?nolink}}\\ {{:documents:garbage:pasted:20230929-130754.png?nolink}} | 
 + 
 + 
 +===== 定義 ===== 
 + 
 +==== Get data from XML 1 ==== 
 + 
 +要素recがレコードに変換されるので4レコード生成される事になる。\\  
 +{{:documents:garbage:pasted:20230929-141527.png?nolink}}\\  
 +{{:documents:garbage:pasted:20230929-130527.png?nolink}}\\  
 +{{:documents:garbage:pasted:20230929-134118.png?nolink}}\\  
 + 
 +==== 行整列 1 ==== 
 + 
 +{{:documents:garbage:pasted:20230929-130631.png?nolink}}\\  
 + 
 +==== Get data from XML 2 ==== 
 + 
 +<WRAP round info 60%> 
 +XPath指定の意のようで、相対パス指定等を利用できる。 
 +</WRAP> 
 + 
 +  * 要素custommerのレコードに変換されるので7レコード生成される事になる。 
 +  * 親要素を辿ってprodidを取得。 
 +  * 要素optsの中身は添え字付きで指定し独立した項目として扱う。\\ ※最大3個。COBOLでいうところのOCCURS句で3回の繰り返しとしている。 
 + 
 +{{:documents:garbage:pasted:20230929-141428.png?nolink}}\\  
 +{{:documents:garbage:pasted:20230929-130940.png?nolink}}\\  
 +{{:documents:garbage:pasted:20230929-134234.png?nolink}}\\  
 +==== 行整列 2 ==== 
 + 
 +{{:documents:garbage:pasted:20230929-131054.png?nolink}}\\  
 + 
 +==== マージ結合 ==== 
 + 
 +<WRAP round tip 60%> 
 +Tipsにも記述があるけど入力は適切なソートが適用されている必要がある。 
 +</WRAP> 
 + 
 +XML 1 LEFT OUTER JOIN XML 2 の意。キーはprodid。\\  
 +{{:documents:garbage:pasted:20230929-131258.png?nolink}}\\  
 + 
 + 
 +==== 選択/名前変更 ==== 
 + 
 +キー項目名が(この例だとprodid)が必ず使用される前提を付ける事ができるなら、マージ結合で生成される prodid_1 は削除できる。\\  
 +{{:documents:garbage:pasted:20230929-131418.png?nolink}}\\  
 +{{:documents:garbage:pasted:20230929-131445.png?nolink}}\\  
 + 
 +{{tag>技術資料 etl pentaho xml csv xpath}}
documents/etl/pentaho/pentaho-001.txt · 最終更新: 2024/04/15 16:25 by k896951

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki