ページの先頭行へ戻る
Big Data Integration ServerV1.3.0 加工編導入・運用ガイド
FUJITSU Software

7.5.1 処理の順番を指定する例

まず、従業員データから勤務地が大阪の従業員データと東京の従業員データを抽出します。
次に、大阪の従業員データは、入力マスタファイルと連結して、最後に集計します。
同時に、東京の従業員データは、従業員番号順にソートします。

7.5.1.1 設計

入力データから目的のデータを取得するために必要な処理とファイルについて、説明します。

図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>

7.5.1.2 統合定義ファイルの作成

設計した内容を、統合定義ファイルに定義していきます。

共通定義部

データの文字コード、ログファイル名を定義します。

処理条件定義部

使用する機能の定義を、処理条件定義部に定義します。ここでは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>

7.5.1.3 統合コマンドの実行

統合コマンドにシナリオ名: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","中村","営業","課長","東京","松ビル"