Data Effectorの抽出機能には、以下に示すいろいろな抽出方法があります。これらを組み合わせることで、多種多様な業務要件に対応できます。
データベースのエクスポート機能などを使って抜き出したCSV形式のファイルには、見出し行(項目名)が付加されていない場合があります。このようなデータだけのファイルも、そのままData Effectorで抽出できます。
見出し行だけのファイルをスキーマ情報ファイルとして別に定義しておけば、データファイルと合わせて処理します。
例
1つのスキーマ情報ファイルと、3つのCSV形式のデータファイルを入力ファイルとして定義します。
Windowsの場合
SchemaFile "D:\Shunsaku\schema\schema.csv" DataFile "D:\Shunsaku\indata\data001.csv" DataFile "D:\Shunsaku\indata\data002.csv" DataFile "D:\Shunsaku\indata\data003.csv" |
Linux/Solarisの場合
SchemaFile /home/shunsaku/schema/schema.csv DataFile /home/shunsaku/data/data1.csv DataFile /home/shunsaku/data/data2.csv DataFile /home/shunsaku/data/data3.csv |
shunselectコマンド利用時は、入力定義ファイルにスキーマ情報ファイルを指定します。
C API利用時は、AsisSetSchemaSelect関数にスキーマ情報ファイルを指定します。
統合コマンド利用時は、付録F 統合定義ファイルの処理条件定義部:SelectのDataFileタグにSchemaFile属性を指定します。
参照
スキーマ情報ファイルの内容については、“2.1.1 CSV形式の場合”を参照してください。
スキーマ情報ファイルの指定方法については、以下を参照してください。
shunselectコマンド利用時は“D.1.2 入力定義ファイル”
C API利用時は“E.1.5 AsisSetSchemaSelect”
統合定義ファイル利用時は、“F.5.1 Select”
抽出結果を書き出す出力ファイルがすでに存在する場合、出力時の処理モードを以下から選択できます。
ファイルに上書きする
ファイルに追記する
shunselectコマンド利用時は、出力定義ファイルに指定します。
C API利用時は、AsisAddQuerySelect関数のWModeパラメタに指定します。
統合定義ファイル利用時は、統合定義ファイルOutFileタグのAppend属性に指定します。
shunselectコマンド利用時、出力定義ファイルを指定した例を以下に示します。
検索番号1の結果を、kekka1.xmlに上書きします。
検索番号2の結果を、kekka2.xmlに上書きします。
検索番号3の結果を、kekka3.xmlに追記します。
検索番号4の結果を、kekka4.xmlに追記します。
Windowsの場合
例
1> D:\Shunsaku\outdata\kekka1.xml 2> D:\Shunsaku\outdata\kekka2.xml 3>> D:\Shunsaku\outdata\kekka3.xml 4>> D:\Shunsaku\outdata\kekka4.xml |
Linux/Solarisの場合
例
1> /home/shunsaku/outdata/kekka1.xml 2> /home/shunsaku/outdata/kekka2.xml 3>> /home/shunsaku/outdata/kekka3.xml 4>> /home/shunsaku/outdata/kekka4.xml |
参照
指定書式の詳細については、以下を参照してください。
shunselectコマンド利用時は“D.1.4 出力定義ファイル”
C API利用時は“E.1.3 AsisAddQuerySelect”
統合定義ファイル利用時は、“F.5.1 Select”
注意
上書きを選択した場合、既存データを消去してしまうので注意してください。
抽出条件に一致した項目の中から、出力したい項目だけを指定できます。
shunselectコマンド利用時は、検索定義ファイルにリターン式を指定します。
C API利用時は、AsisAddQuerySelect関数のReturnパラメタにリターン式を指定します。
統合コマンド利用時は、統合定義ファイルの処理条件定義部:SelectのRConditionタグにリターン式を指定します。
例として以下の文書があるものとします。
文書A
"empno","name","date","expense","area","train","taxi" "19980120","鈴木太郎","2007年06月30日","15700円","東京都千代田区","7200円","" : |
文書B
"empno","name","date","expense","area","train","taxi" "20012111","佐藤花子","2007年07月01日","16020円","大阪府大阪市阿倍野区","14200円","1820円" : |
文書C
"empno","name","date","expense","area","train","taxi" "19980120","鈴木太郎","2007年07月02日","2400円","神奈川県横浜市港北区","2400円","" : |
文書D
<doc> <ID>1234567</ID> <Name>FujitsuTaro</Name> <Birthday>19700310</Birthday> <Career> <License> <Name>情報処理 <Kind>2種</Kind> </Name> <Date>20020101</Date> </License> <License> <Name>英語検定 <Kind>1級</Kind> </Name> <Date>20030901</Date> </License> </Career> </doc> |
以下に、検索定義ファイルにリターン式を指定した例を示します。
例
交通費(expense)が10000円より安い(小さい)人の従業員番号(empno)および出張日(date)を、1つのファイルに抽出します。
検索式 | {$empno,$date} $expense < 10000 |
結果:
"empno","date" "19980120","2007年07月02日" |
例
氏名(Name)がFujitsu Taroの、氏名(Name)と資格(License)を、1つのファイルに抽出します。
検索式 | {/doc/Name,/doc/Career/License/Name} /doc/Name = 'Fujitsu Taro' |
結果:
<doc> <Name>FujitsuTaro</Name> <Career> <License> <Name>情報処理 <Kind>2種</Kind> </Name> </License> <License> <Name>英語検定 <Kind>1級</Kind> </Name> </License> </Career> </doc> |
参照
指定書式の詳細については、以下を参照してください。
shunselectコマンド利用時は“D.1.3 検索定義ファイル”
C API利用時は“E.1.3 AsisAddQuerySelect”
統合定義ファイル利用時は、“F.5.1 Select”
項目同士を比較して条件にあったデータを抽出する場合は、項目間比較機能を使います。
例として以下の文書があるものとします。
文書A
氏名 | 年齢 | 性別 | 昨年の身長 | 昨年の体重 | 身長 | 体重 | 胴回り | 座高 |
---|---|---|---|---|---|---|---|---|
鈴木太郎 | 30 | 男 | 171.5 | 70.4 | 172.3 | 69.8 | 78.1 | 89.2 |
鈴木一郎 | 28 | 男 | 176.2 | 85.6 | 177.1 | 87.1 | 92.3 | 95.4 |
佐藤花子 | 24 | 女 | 150.9 | 49.1 | 150.8 | 50.5 | 82.9 | 84.2 |
鈴木巧 | 41 | 男 | 165.8 | 61.1 | 165.1 | 60.2 | 80.1 | 90.8 |
田中愛子 | 36 | 女 | 162.3 | 45.1 | 162.8 | 44.2 | 67.8 | 85.1 |
例
昨年よりも体重が増加して、かつ胴回りが80cmより多い肥満傾向の従業員を検索します。
検索式 | val($昨年の体重) < val($体重) AND val($胴回り) > 80.0 |
結果:
氏名 | 年齢 | 性別 | 昨年の身長 | 昨年の体重 | 身長 | 体重 | 胴回り | 座高 |
---|---|---|---|---|---|---|---|---|
鈴木一郎 | 28 | 男 | 176.2 | 85.6 | 177.1 | 87.1 | 92.3 | 95.4 |
佐藤花子 | 24 | 女 | 150.9 | 49.1 | 150.8 | 50.5 | 82.9 | 84.2 |
参照
指定書式の詳細については、以下を参照してください。
項目間比較の詳細については“A.2.8 項目間比較”
shunselectコマンド利用時は“D.1.3 検索定義ファイル”
C API利用時は“E.1.3 AsisAddQuerySelect”
統合定義ファイル利用時は、“F.5.1 Select”
XML形式の場合、同じ名前の要素ノードが複数、繰り返して含まれることがあります。
検索式でフィルタ式を使うことにより、繰返しの各要素に対する条件判定ができます。
例として以下の文書があるものとします。
例1
2009年6月11日の伝票の日付<date>とオーダ番号<order_no>を抽出します。
出力結果は、条件を満たす繰返し項目だけを出力します。
文書A
1つめのレコードに繰返し項目があり、3つのレコードがあるXML文書例です。
<root> ・・・1番目のレコード <jigyosho>kanto</jigyosho> <denpyo> ・・・1番目の繰返し項目 <date>2009/06/11</date> <note>xxx</note> <order_no>A-00105</order_no> </denpyo> <denpyo> ・・・2番目の繰返し項目 <date>2009/06/15</date> <note>xxx</note> <order_no>A-00109</order_no> </denpyo> </root> <root> ・・・2番目のレコード <jigyosho>chubu</jigyosho> <denpyo> <date>2009/06/11</date> <note>xxx</note> <order_no>A-00211</order_no> </denpyo> </root> <root> ・・・3番目のレコード <jigyosho>kansai</jigyosho> <denpyo> <date>2009/06/12</date> <note>xxx</note> <order_no>A-00107</order_no> </denpyo> </root> |
抽出条件
検索式 | $x := /root/denpyo{ /date == '2009/06/11' } |
リターン式 | $x/date, $x/order_no |
結果:
<root> <denpyo> <date>2009/06/11</date> <order_no>A-00105</order_no> </denpyo> </root> <root> <denpyo> <date>2009/06/11</date> <order_no>A-00211</order_no> </denpyo> </root> |
ポイント
例2
条件を満たす繰返し項目の、親や兄弟要素を出力することもできます。
タイプがBである項目と、その項目を含む伝票の日付を出力します。
文書A
1つめのレコードに繰返し項目があり、3つのレコードがあるXML文書例です。
<root> <denpyo> <date>2009/06/11</date> <item type="A">value1</item> <item type="B">value2</item> </denpyo> <denpyo> <date>2009/06/11</date> <item type="C">value5</item> <item type="D">value6</item> </denpyo> </root> |
抽出条件
検索式 | $x := /root/denpyo{ $y := /item{ /@type = 'B' } } |
リターン式 | $x/date, $y |
結果:
<root> <denpyo> <date>2009/06/11</date> <item type="B">value2</item> </denpyo> </root |
ポイント
リターン式で指定するバインド変数参照では、バインド変数が示す要素の配下(子供、子孫)の要素だけ指定できます。そのため、以下のような指定をすることはできません。
検索式 | /root/denpyo{ $y := /item{ /@type = ‘B’} } |
リターン式 | $y/../date, $y |
繰返し項目の親や兄弟の要素を出力するためには、条件を表す要素(item)と出力したい要素(date)の共通の祖先の中で最も近い祖先の要素(denpyo)に名前($x)を付ける必要があります。
繰返し項目の親や兄弟の要素は、共通の祖先からの相対パスで指定します。
$xは、タイプが“B”である項目を持つ伝票に制限されているので、2番目のレコードは出力されません。
参照
フィルタ式の指定書式の詳細については、“A.2.9 フィルタ式”を参照してください。
XML形式の繰返し項目が階層になっている場合、フィルタ式の階層表記を使うことにより、データを抽出できます。
文書A
<root> <denpyo> <date>2009/06/11</date> <item type="A">value1</item> <item type="B">value2</item> </denpyo> <denpyo> <date>2009/06/15</date> <item type="A">value3</item> <item type="B">value4</item> </denpyo> <denpyo> <date>2009/06/11</date> <item type="C">value5</item> <item type="D">value6</item> </denpyo> </root> |
例
日付が2009年6月11日である伝票と、各伝票の中でタイプがBである項目だけを選んで出力します。
検索式 | $x := /root/denpyo{ /date == '2009/06/11' AND $y := /item{ /@type = 'B'} } |
リターン式 | $x/date, $y |
結果:
<root> <denpyo> <date>2009/06/11</date> <item type="B">value2</item> </denpyo> </root> |
ポイント
内側のバインド変数「$y」に関連付けられているノードは、外側のフィルタ式の条件(日付が6月11日である)を満たす伝票の中のものだけです。
そのため、2番目のレコードの伝票は、タイプ(type)が「B」である項目が存在しますが、日付(date)が6月11日でないため、出力されません。
3番目のレコードの伝票は、タイプ(type)が「B」である項目が存在せず、「$x」の条件を満たさないため、出力されません。
参照
フィルタ式の指定書式の詳細については、“A.2.9 フィルタ式”を参照してください。