Data Effectorのソート機能には、以下に示すいろいろなソート方法があります。これらを組み合わせることで、多種多様な業務要件に対応できます。
大量データをソートする場合、マシンのメモリを大量に使用してしまい、他のプロセスの動作に影響が出てしまうことがあります。
ソート処理専用のメモリ量と作業ディレクトリ(一時ファイル)を設定することで、大量データのソート処理ができます。
メモリ量を指定することで、指定した一定のメモリ量の範囲でソート機能が動作します。
さらに、メモリ不足時は、自動的に一時ファイル使用に切り替わります。
コマンド利用時は、sort用動作環境ファイルのWorkFolderパラメタとソート条件ファイルのMemorySizeパラメタを指定します。
C API 利用時は、AsisSetEnvSort関数のWorkFolderパラメタとMemorySizeパラメタを指定します。
コマンド利用時は、“5.5.2 ソートコマンドの実行例”を参照してください。
C API利用時は、“F.4 データのソート”を参照してください。
参照
指定書式の詳細については、以下を参照してください。
コマンド利用時は、“B.4.1 sort用動作環境ファイル”または“B.4.2 ソート条件ファイル”
C API利用時は“C.4.2 AsisSetEnvSort”
入力ファイルに、項目数、項目順が統一されていない複数の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","浦和店" |
データベースのエクスポート機能などを使って抜き出したCSV形式のファイルには、見出し行(項目名)が付加されていない場合があります。このようなデータだけのファイルも、加工せずにData Effectorでソートできます。
見出し行だけのファイルをスキーマ情報ファイルとして別に定義しておけば、データファイルと合わせて処理します。
例
1つのスキーマ情報ファイルと、1つのCSV形式のデータファイルを入力ファイルとして定義します。
Windowsの場合
# 入力ファイル InFile "D:¥Shunsaku¥data¥Schema.csv;D:¥Shunsaku¥data¥Data.csv" |
Linux/Solarisの場合
# 入力ファイル InFile /home/Shunsaku/Schema.csv;/home/shunsaku/Data.csv |
コマンド利用時は、sort用動作環境ファイルのInFileパラメタにスキーマ情報ファイルを指定します。
C API利用時は、AsisExecuteSort関数のInFileパラメタにスキーマ情報ファイルを指定します。
参照
スキーマ情報ファイルの内容については、“2.1.1 CSV形式の場合”を参照してください。
スキーマ情報ファイルの指定方法については、以下を参照してください。
コマンド利用時は“B.4.1 sort用動作環境ファイル”
C API利用時は“C.4.3 AsisExecuteSort”
ソート結果は入力レコードがそのまま出力されます。ソート結果を編集するにはリターン式を指定します。リターン式を指定することで、任意の項目を出力できます。各リターン項目は“,”で区切ります。リターン項目の指定の後にラベルを記述することで、出力データの項目名を指定できます。
参考
リターン式を指定した場合は、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","川崎店" |
リターン式では、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 |
Data Effectorの処理結果をデータベースに格納する場合など、見出し行(項目名)が不要なときがあります。このようなデータ行だけの出力もData Effectorで指定できます。
コマンド利用時は、sort用動作環境ファイルのOutFileパラメタに、スキーマ情報ファイルとデータファイルを別々に指定します。
C API利用時は、AsisExecutesort関数のOutFileパラメタに、スキーマ情報ファイルとデータファイルを別々に指定します。
参照
指定例と出力結果は、“3.3.2.5 データ行だけを出力する場合”を参照してください。
指定書式の詳細については、以下を参照してください。
コマンド利用時は“B.4.1 sort用動作環境ファイル”
C API利用時は“C.4.3 AsisExecuteSort”
例えば、データベースから抽出されたデータには、各カラムの文字数にあわせ、データの後ろに空白文字が含まれることがあります。
このような、桁あわせのために付加されたデータ後方の空白を取り除く場合、ソート式またはリターン式に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関数”を参照してください。