まず、従業員データから勤務地が大阪の従業員データと東京の従業員データを抽出します。
次に、大阪の従業員データは、入力マスタファイルと連結して、最後に集計します。
同時に、東京の従業員データは、従業員番号順にソートします。
入力データから目的のデータを取得するために必要な処理とファイルについて、説明します。
図7.5 統合コマンドの処理概要(処理を順番に実行)

順番 | 使用する DataEffectorの機能 | 処理内容 | 入力ファイル (形式、文字コード) | 入力マスタファイル (形式、文字コード) |
|---|---|---|---|---|
1 | 抽出機能 | 従業員データより、勤務地が大阪の従業員情報を抽出します。 | 従業員データ (XML、SHIFT-JIS) | - |
2-1 | 連結機能 | 入力マスタファイルと連結して事業所情報を付け加えます。 | 1の結果 (XML、SHIFT-JIS) | 事務所データ (XML、SHIFT-JIS) |
2-2 | 集計機能 | 勤務地ごとに集計します。 | 2-1の結果 (CSV、SHIFT-JIS) | - |
3 | ソート機能 | 従業員番号順にソートします。 | 1の結果 (XML、SHIFT-JIS) | - |
従業員データ![]()
<EMPLOYEE><ENO>070</ENO><NAME>田中</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課員</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>031</ENO><NAME>鈴木</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課員</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>003</ENO><NAME>高橋</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課長</POSITION><AREA>東京</AREA><BLDG>松ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>009</ENO><NAME>渡辺</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課長</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>120</ENO><NAME>伊藤</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課長</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>055</ENO><NAME>山本</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課員</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>135</ENO><NAME>中村</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課長</POSITION><AREA>東京</AREA><BLDG>松ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>095</ENO><NAME>小林</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>東京</AREA><BLDG>松ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>094</ENO><NAME>斎藤</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>東京</AREA><BLDG>松ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>085</ENO><NAME>加藤</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>033</ENO><NAME>佐藤</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>福岡</AREA><BLDG>梅ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>032</ENO><NAME>吉田</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>福岡</AREA><BLDG>梅ビル</BLDG></EMPLOYEE> |
事務所データ![]()
<INFO><LOCALE>東京</LOCALE><BLDG></BLDG><NEWBLDG></NEWBLDG><PHONE>7100</PHONE><CODE>00001</CODE><ADDRESS>東京都港区高輪</ADDRESS></INFO> <INFO><LOCALE>大阪</LOCALE><BLDG>竹ビル</BLDG><NEWBLDG>亀ビル</NEWBLDG><PHONE>7200</PHONE><CODE>00002</CODE><ADDRESS>大阪府大阪市北区梅田</ADDRESS></INFO> <INFO><LOCALE>福岡</LOCALE><BLDG>梅ビル</BLDG><NEWBLDG></NEWBLDG><PHONE>7300</PHONE><CODE>00008</CODE><ADDRESS>福岡県福岡市博多区博多駅</ADDRESS></INFO> |
設計した内容を、統合定義ファイルに定義していきます。
データの文字コード、ログファイル名を定義します。
使用する機能の定義を、処理条件定義部に定義します。ここでは4つの機能を使っているので、それぞれを定義します。
実行順序を、シナリオ定義部に定義します。
まずは、Select1を定義します。
次にReplace1とAnalyze1は、順番に実行するので、Type属性は“serial”です。
Sort1は、Replace1およびAnalyze1と並行に処理するので、Type属性は“parallel”です。
統合定義ファイルの例
統合定義ファイルの指定例を以下に示します。
deconfig1.xml
<?xml version="1.0" encoding="utf-8"?>
<DataEffector>
<!-- 共通定義部 -->
<CommonCfg>
<Data CharacterCode ="SHIFT-JIS" />
<LogFile>/home/shun/Sample1/log/all.log</LogFile>
</CommonCfg>
<!-- 処理条件定義部:Select -->
<Select Name="Select1">
<BaseDirectory>/home/shun/Sample1</BaseDirectory>
<DataFile InFileType="XML">
<File>data/Employee.xml</File>
</DataFile>
<SkipChar>\s,\n,\t,\S</SkipChar>
<SeparateChar>\s,\n,\t</SeparateChar>
<ANKmix Flag="false" />
<KNJmix Flag="false" />
<OutCondition SearchNumber="1">
<Query>/EMPLOYEE/AREA = '大阪'</Query>
<OutFile>data/select_kekka_osaka.xml</OutFile>
</OutCondition>
<OutCondition SearchNumber="2">
<Query>/EMPLOYEE/AREA = '東京'</Query>
<OutFile>data/select_kekka_tokyo.xml</OutFile>
</OutCondition>
</Select>
<!-- 処理条件定義部:Replace -->
<Replace Name="Replace1">
<BaseDirectory>/home/shun/Sample1</BaseDirectory>
<WorkFolder>tmp</WorkFolder>
<Memory MemorySize="1500" />
<InFile InFileType="XML">
<JnlFile ID="Journal">
<File>data/select_kekka_osaka.xml</File>
<ListDef>
<Item ID="JENO">/EMPLOYEE/ENO/text()</Item>
<Item ID="JNAME">/EMPLOYEE/NAME/text()</Item>
<Item ID="JDEPARTMENT">/EMPLOYEE/DEPARTMENT/text()</Item>
<Item ID="JPOSITION">/EMPLOYEE/POSITION/text()</Item>
<Item ID="JAREA">/EMPLOYEE/AREA/text()</Item>
<Item ID="JBLDG">/EMPLOYEE/BLDG/text()</Item>
</ListDef>
</JnlFile>
<MstFile ID="Master">
<File>data/Company.xml</File>
<ListDef>
<Item ID="MLOCALE">/INFO/LOCALE/text()</Item>
<Item ID="MBLDG">/INFO/BLDG/text()</Item>
<Item ID="MNEWBLDG">/INFO/NEWBLDG/text()</Item>
<Item ID="MPHONE">/INFO/PHONE/text()</Item>
</ListDef>
</MstFile></InFile>
<OutCondition>
<OutFile>data/replace_kekka.csv</OutFile>
<Jcondition>
<Item Compare="complete" JoinType="inner">
<Left InFileID="Journal">$JAREA</Left>
<Right InFileID="Master">$MLOCALE</Right>
</Item>
</Jcondition>
<OutputDef>
<Item>$JAREA</Item>
<Item>$JENO</Item>
<Item>$JNAME</Item>
<Item>$JDEPARTMENT</Item>
<Item>$MNEWBLDG</Item>
<Item>$MPHONE</Item>
</OutputDef>
<ExceptRecordFolder>exp</ExceptRecordFolder>
</OutCondition>
</Replace>
<!-- 処理条件定義部:Analyze -->
<Analyze Name="Analyze1">
<BaseDirectory>/home/shun/Sample1</BaseDirectory>
<WorkFolder>tmp</WorkFolder>
<Memory MemorySize="1500" />
<InFile>
<File>data/replace_kekka.csv</File>
</InFile>
<OutCondition>
<GCondition Total="true">
<Item Subtotal="true">$JDEPARTMENT</Item>
<Item Subtotal="true">$JENO</Item>
</GCondition>
<RCondition>
<Item Label="JNAME">$JNAME</Item>
<Item Label="JPOSITION">$JPOSITION</Item>
<Item Label="JAREA">$JAREA</Item>
<Item Label="MNEWBLDG">$MNEWBLDG</Item>
<Item Label="MPHONE">$MPHONE</Item>
<Item Label="COUNT">count()</Item>
</RCondition>
<OutFile>result/kekka01.csv</OutFile>
</OutCondition>
</Analyze>
<!-- 処理条件定義部:Sort -->
<Sort Name="Sort1">
<BaseDirectory>/home/shun/Sample1</BaseDirectory>
<WorkFolder>tmp</WorkFolder>
<Memory MemorySize="1500" />
<InFile InFileType="XML">
<File>data/select_kekka_tokyo.xml</File>
</InFile>
<OutCondition>
<OutFile>result/kekka02.csv</OutFile>
<OCondition>
<Item>/EMPLOYEE/ENO/text()</Item>
</OCondition>
<RCondition>
<Item Label="ENO">/EMPLOYEE/ENO/text()</Item>
<Item Label="NAME">/EMPLOYEE/NAME/text()</Item>
<Item Label="DEPARTMENT">/EMPLOYEE/DEPARTMENT/text()</Item>
<Item Label="POSITION">/EMPLOYEE/POSITION/text()</Item>
<Item Label="AREA">/EMPLOYEE/AREA/text()</Item>
<Item Label="BLDOG">/EMPLOYEE/BLDG/text()</Item>
</RCondition>
</OutCondition>
</Sort>
<!-- シナリオ定義部 -->
<Scenario Name="Scenario1">
<Step>Select1</Step>
<StepGroup Type="parallel">
<StepGroup Type="serial">
<Step>Replace1</Step>
<Step>Analyze1</Step>
</StepGroup>
<Step>Sort1</Step>
</StepGroup>
</Scenario>
</DataEffector> |
統合コマンドにシナリオ名:Scenario1を指定して実行します。
# deex -p Scenario1 -f /home/shun/cfg/deconfig1.xml |
実行結果イメージ![]()
kekka01.csv
"JDEPARTMENT","JENO","JNAME","JPOSITION","JAREA","MNEWBLDG","MPHONE","COUNT" "営業","009","渡辺","課長","大阪","亀ビル","7200",1 "営業","085","加藤","課員","大阪","亀ビル","7200",1 "営業","-","渡辺","課長","大阪","亀ビル","7200",2 "総務","031","鈴木","課員","大阪","亀ビル","7200",1 "総務","055","山本","課員","大阪","亀ビル","7200",1 "総務","070","田中","課員","大阪","亀ビル","7200",1 "総務","120","伊藤","課長","大阪","亀ビル","7200",1 "総務","-","鈴木","課員","大阪","亀ビル","7200",4 "-","-","渡辺","課長","大阪","亀ビル","7200",6 |
kekka02.csv
"ENO","NAME","DEPARTMENT","POSITION","AREA","BLDG" "003","高橋","総務","課長","東京","松ビル" "094","斎藤","営業","課員","東京","松ビル" "095","小林","営業","課員","東京","松ビル" "135","中村","営業","課長","東京","松ビル" |