ページのトップに戻る
Interstage Data Effector ユーザーズガイド

3.5.3 いろいろなソート方法

Data Effectorのソート機能には、以下に示すいろいろなソート方法があります。これらを組み合わせることで、多種多様な業務要件に対応できます。



3.5.3.1 大量データをソートする場合

大量データをソートする場合、マシンのメモリを大量に使用してしまい、他のプロセスの動作に影響が出てしまうことがあります。
ソート処理専用のメモリ量と作業ディレクトリ(一時ファイル)を設定することで、大量データのソート処理ができます。
メモリ量を指定することで、指定した一定のメモリ量の範囲でソート機能が動作します。
さらに、メモリ不足時は、自動的に一時ファイル使用に切り替わります。

コマンド利用時は、sort用動作環境ファイルのWorkFolderパラメタとソート条件ファイルのMemorySizeパラメタを指定します。

C API 利用時は、AsisSetEnvSort関数のWorkFolderパラメタとMemorySizeパラメタを指定します。

コマンド利用時は、“5.5.2 ソートコマンドの実行例”を参照してください。
C API利用時は、“F.4 データのソート”を参照してください。


参照

指定書式の詳細については、以下を参照してください。


3.5.3.2 見出し行(項目名)の異なるCSVファイルをソートする場合

入力ファイルに、項目数、項目順が統一されていない複数のCSVファイルを指定できます。項目名が同じものを同一項目として扱い、合わせてソートを実行します。
項目数、項目順が統一されていない複数のCSVファイルを入力する場合、リターン式を指定する必要があります。

入力ファイル1

"Rcode","Rname","Scode","Sname","Sales","Location","Size"
"001","東京","1002","渋谷店","3000","繁華街","150"
"004","神奈川","4001","川崎店","5000","駅ビル","120"
"002","千葉","2002","浦安店","2000","駅ビル","137"
"002","千葉","2001","船橋店","1500","モール","215"
"001","東京","1006","品川店","5000","駅中","90"

入力ファイル2

"Scode","Sname","Sales","Rcode","Rname","Employees","parking"
"3001","大宮店","3000","003","埼玉","8","○"
"1004","新宿店","9000","001","東京","12","×"
"4002","横浜店","8000","004","神奈川","10","○"

入力ファイル3

"Scode","Sname","Sales"
"1001","東京店","12000"
"3002","浦和店","2000"

ソート条件ファイル

ソート式   
リターン式 
$Rcode, val($Sales) DESC
$Rcode, $Rname, $Sales, $Sname

ソート結果イメージ

"Rcode","Rname","Sales","Sname"
"001","東京","9000","新宿店"
"001","東京","5000","品川店"
"001","東京","3000","渋谷店"
"002","千葉","2000","浦安店"
"002","千葉","1500","船橋店"
"003","埼玉","3000","大宮店"
"004","神奈川","8000","横浜店"
"004","神奈川","5000","川崎店"
,,"12000","東京店"
,,"2000","浦和店"

3.5.3.3 見出し行(項目名)のないCSVファイルを扱う場合

データベースのエクスポート機能などを使って抜き出したCSV形式のファイルには、見出し行(項目名)が付加されていない場合があります。このようなデータだけのファイルも、加工せずにData Effectorでソートできます。
見出し行だけのファイルをスキーマ情報ファイルとして別に定義しておけば、データファイルと合わせて処理します。


1つのスキーマ情報ファイルと、1つのCSV形式のデータファイルを入力ファイルとして定義します。


WindowsWindowsの場合

# 入力ファイル
InFile      "D:¥Shunsaku¥data¥Schema.csv;D:¥Shunsaku¥data¥Data.csv"

SolarisLinuxLinux/Solarisの場合

# 入力ファイル
InFile      /home/Shunsaku/Schema.csv;/home/shunsaku/Data.csv

コマンド利用時は、sort用動作環境ファイルのInFileパラメタにスキーマ情報ファイルを指定します。
C API利用時は、AsisExecuteSort関数のInFileパラメタにスキーマ情報ファイルを指定します。

参照

スキーマ情報ファイルの内容については、“2.1.1 CSV形式の場合”を参照してください。
スキーマ情報ファイルの指定方法については、以下を参照してください。


3.5.3.4 特定の項目だけ出力する場合

ソート結果は入力レコードがそのまま出力されます。ソート結果を編集するにはリターン式を指定します。リターン式を指定することで、任意の項目を出力できます。各リターン項目は“,”で区切ります。リターン項目の指定の後にラベルを記述することで、出力データの項目名を指定できます。


参考

リターン式を指定した場合は、CSV形式で出力されます。
ラベルに指定した文字列が出力データの見出し行に出力されます。

入力ファイル

"Rcode","Rname","Scode","Sname","Sales","Location","Size"
"001","東京","1002","渋谷店","3000","繁華街","150"
"004","神奈川","4001","川崎店","5000","駅ビル","120"
"002","千葉","2002","浦安店","2000","駅ビル","137"
"002","千葉","2001","船橋店","1500","モール","215"
"001","東京","1006","品川店","5000","駅中","90"
"003","埼玉","3001","大宮店","3000","専門店","200"
"001","東京","1004","新宿店","9000","百貨店","120"
"004","神奈川","4002","横浜店","8000","繁華街","170"
"001","東京","1001","東京店","12000","駅中","100"
"003","埼玉","3002","浦和店","2000","専門店","95"
"002","千葉","2003","千葉店","6000","専門店","250"

ソート条件ファイル

ソート式
リターン式
$Rcode, val($Sales) DESC
$Rcode コード, $Rname 地区名, $Sales 売上, $Sname 支店名

ソート結果イメージ

"コード","地区名","売上","支店名"
"001","東京","12000","東京店"
"001","東京","9000","新宿店"
"001","東京","5000","品川店"
"001","東京","3000","渋谷店"
"002","千葉","6000","千葉店"
"002","千葉","2000","浦安店"
"002","千葉","1500","船橋店"
"003","埼玉","3000","大宮店"
"003","埼玉","2000","浦和店"
"004","神奈川","8000","横浜店"
"004","神奈川","5000","川崎店"

3.5.3.5 ソート結果を演算する場合

リターン式では、val関数、集合関数および算術演算などを組み合わせることにより、複雑な処理が可能です。
例として、“3.5.1 ソートする”のデータを利用します。


氏名ひらがな(namekana)で昇順にソートし、従業員氏名(name)と、タクシー代(taxi)から数値を取り出して出力します。

ソート式  
リターン式 
$namekana
$name 従業員氏名,val($taxi) タクシー代

結果

"従業員氏名","タクシー代"
"佐藤花子",2400
"鈴木一郎",1820
"鈴木太郎",1200
"田中愛子",1000

参考

指定した項目を数値として扱う場合はval関数を指定します。
val関数の詳細については、“A.8.3 val関数”を参照してください。

氏名ひらがな(namekana)で降順にソートし、従業員氏名(name)と交通費(train)とタクシー代(taxi)の和を出力します。

ソート式 
リターン式
/doc/namekana/text() DESC
/doc/name/text() 従業員氏名,sum(/doc/detail/train/text();/doc/detail/taxi/text()) 旅費

結果

"従業員氏名","旅費"
"田中愛子",8200
"鈴木太郎",1200
"鈴木一郎",16020
"佐藤花子",8000

3.5.3.6 データ行だけを出力する場合

Data Effectorの処理結果をデータベースに格納する場合など、見出し行(項目名)が不要なときがあります。このようなデータ行だけの出力もData Effectorで指定できます。
コマンド利用時は、sort用動作環境ファイルのOutFileパラメタに、スキーマ情報ファイルとデータファイルを別々に指定します。
C API利用時は、AsisExecutesort関数のOutFileパラメタに、スキーマ情報ファイルとデータファイルを別々に指定します。


参照

指定例と出力結果は、“3.3.2.5 データ行だけを出力する場合”を参照してください。

指定書式の詳細については、以下を参照してください。


3.5.3.7 データの後方空白を取り除く場合

例えば、データベースから抽出されたデータには、各カラムの文字数にあわせ、データの後ろに空白文字が含まれることがあります。

このような、桁あわせのために付加されたデータ後方の空白を取り除く場合、ソート式またはリターン式にrtrim関数を指定します。


文書

"empno","namekana","date","expense"
"19980120","すずき△たろう△△","2007年06月30日","15700円"
"20012111","すずき△たくろう△","2007年07月01日","16020円"
"20020005","すずき△たくみ△△","2007年07月02日","2400円"

△は空白文字を表します。


氏名ひらがな(namekana)で昇順にソートし、結果は入力データのまま出力します。

ソート式
rtrim($namekana) 

結果:CSV形式で出力する場合

"empno","namekana","date","expense"
"20020005","すずき△たくみ△△","2007年07月02日","2400円"
"20012111","すずき△たくろう△","2007年07月01日","16020円"
"19980120","すずき△たろう△△","2007年06月30日","15700円"

ポイント

上記例では、氏名ひらがな(namekana)の文字同士を比較したいので、後方空白を削除してからソート比較しています。
ソート結果として、後方の空白を取り除いたデータを出力したい場合は、以下のようにリターン式にrtrim関数を指定してください。

ソート式
リターン式
rtrim($namekana) 
$empno,rtrim($namekana),$date,$expense

参照

rtrim関数の指定方法の詳細については、“A.8.2 rtrim関数”を参照してください。