Data Effectorの抽出機能には、以下に示すいろいろな抽出方法があります。これらを組み合わせることで、多種多様な業務要件に対応できます。
データベースのエクスポート機能などを使って抜き出したCSV形式のファイルには、見出し行(項目名)が付加されていない場合があります。このようなデータだけのファイルも、そのままData Effectorで抽出できます。
見出し行だけのファイルをスキーマ情報ファイルとして別に定義しておけば、データファイルと合わせて処理します。
例
1つのスキーマ情報ファイルと、3つのCSV形式のデータファイルを入力ファイルとして定義します。
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関数にスキーマ情報ファイルを指定します。
統合コマンド利用時は、“リファレンス集”の“統合定義ファイル”の処理条件定義部:SelectのDataFileタグにSchemaFile属性を指定します。
参照
スキーマ情報ファイルの内容については、“2.1.1 CSV形式の場合”を参照してください。
スキーマ情報ファイルの指定方法については、“リファレンス集”の以下を参照してください。
shunselectコマンド利用時は “入力定義ファイル”
C API利用時は “AsisSetSchemaSelect”
統合定義ファイル利用時は、 “処理条件定義部:Select”
抽出結果を書き出す出力ファイルがすでに存在する場合、出力時の処理モードを以下から選択できます。
ファイルに上書きする
ファイルに追記する
shunselectコマンド利用時は、出力定義ファイルに指定します。
C API利用時は、AsisAddQuerySelect関数のWModeパラメタに指定します。
統合定義ファイル利用時は、統合定義ファイルOutFileタグのAppend属性に指定します。
shunselectコマンド利用時、出力定義ファイルを指定した例を以下に示します。
検索番号1の結果を、kekka1.xmlに上書きします。
検索番号2の結果を、kekka2.xmlに上書きします。
検索番号3の結果を、kekka3.xmlに追記します。
検索番号4の結果を、kekka4.xmlに追記します。
例
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コマンド利用時は “出力定義ファイル”
C API利用時は “AsisAddQuerySelect”
統合定義ファイル利用時は、 “処理条件定義部: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コマンド利用時は “検索定義ファイル”
C API利用時は “AsisAddQuerySelect”
統合定義ファイル利用時は、 “処理条件定義部: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" |
参照
指定書式の詳細については、“リファレンス集”の以下を参照してください。
項目間比較の詳細については “項目間比較”
shunselectコマンド利用時は“検索定義ファイル”
C API利用時は “AsisAddQuerySelect”
統合定義ファイル利用時は、 “処理条件定義部: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番目のレコードは出力されません。
参照
フィルタ式の指定書式の詳細については、“リファレンス集”の“フィルタ式”を参照してください。
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> |
ポイント
参照
フィルタ式の指定書式の詳細については、“リファレンス集”の“フィルタ式”を参照してください。
抽出結果に、一意性を保障した番号を付加する場合は、リターン式に採番関数を指定します。
例として以下の文書があるものとします。
文書A
"氏名","部署名","勤務地","勤続年数" "鈴木太郎","営業1課","本社","8" "鈴木一郎","開発1課","川崎工場","1" "佐藤花子","特命課","横浜ビル","10" "鈴木巧","開発1課","横浜ビル","25" "田中愛子","営業1課","本社","12" "田中 刑事","営業2課","横浜ビル","1" |
例
条件1:営業部でかつ本社勤務の従業員を検索し、結果に一意となる番号(番号)を1番から振ります。
検索式 | $部署名 = "営業" AND $勤務地 == "本社" |
リターン式 | row_number() 番号, $氏名 |
結果:
"番号","氏名"
1,"鈴木太郎"
2,"田中愛子" |
採番関数の結果項目のラベルとして“番号”を指定しています。
参照
リターン式の詳細については、“リファレンス集”の“抽出機能のリターン式”を参照してください。
採番関数の詳細については、“リファレンス集”の“row_number関数”を参照してください。
入力ファイル内のすべてのデータを抽出する場合は、パターン検索(文字列)を使います。
以下に、検索式の例を示します。
例
パターン検索(文字列)のうち、任意文字指定の“.*”を使います。
検索式 | $_ = '.*' |
例
パターン検索(文字列)のうち、前方一致指定の“^”を使います。
検索式 | // = '^' |
参照
パターン検索(文字列)の書式については、“リファレンス集”の“パターン検索(文字列)”を参照してください。