キーブレイク処理とは、その項目が並べ換わっていることを前提として、 同一のキー項目値毎に一定の処理を行う処理方式のことを言う。 キーブレイク処理は大きく分けて2つの処理に分けられる。 一つは集計のためのキーブレイク処理(以下「集計キーブレイク処理」と呼ぶ)で、 他方は結合のためのキーブレイク処理(以下「結合キーブレイク処理」と呼ぶ)である。
mjoin、 mcommonなど コマンド名に「join」か「common」を含むコマンドが結合キーブレイク処理を、 それ以外のコマンドのうちk=パラメータを持つすべてのコマンドが 集計キーブレイク処理を行っていると考えてよい。
たとえば集計キーブレイク処理を行うmsumコマンドでは、 キー項目の値の変化を検知することで、同一キー毎に合計処理を実行する。 そのためには事前にキー項目で行の並べ替えをしておく必要があるので、 (入力ファイルが事前に並べ替えられている場合を除き)msumコマンドは まず並べ替えをした上で、合計処理を行う。
結合キーブレイク処理はもう少し複雑で、たとえばmjoinコマンドは、 2つのデータファイルについて、キー項目の大小を見比べる。 キー項目が小さいデータファイルは読み進め、キー項目値が同じであれば結合処理を実施する。 このようにキー項目値の大小比較をしているため、結合のためのキーブレイク処理においては、 事前に2つのデータファイルともキー項目で並べ替えられていることが前提となる。 そのためmjoinコマンドは、まず2つのデータファイルを並べ替える。
どちらのキーブレイク処理でも基本は文字列昇順による並べ替えを行うが、 mrjoinのような数値範囲による結合キーブレイク処理においては、 数値昇順で並べ替えを行う。
k=パラメータで項目を指定するだけで、各コマンドが自動的に並べ替えの要否を 判断し、必要な場合は並べ替えを行うため、ユーザは原則としてファイルの並べ替えを 意識する必要はない。ただ並べ替え処理が不要になったわけではなく、 各コマンドが内部的に並べ替え処理を行っているという点に注意が必要である。 スクリプトの構成によっては、並べ替え処理が頻繁に発生し、パフォーマンス低下の原因となる。
最初にxxcustomerファイルをname項目で並べ替えた状態で出力しているが、 その後のmjoinコマンドはいずれも、idをキー項目として 結合処理を行っている。この場合、3つのmjoinコマンドがそれぞれ id項目による並べ替えを行ってしまう。
mcut i=customer.csv f=id,name | msortf f=name o=xxcustomer mjoin i=xxcustomer m=address.csv k=id f=address o=cust_address.csv mjoin i=xxcustomer m=phone.csv k=id f=phone o=cust_phone.csv mjoin i=xxcustomer m=age.csv k=id f=age o=cust_age.csv
次のように修正すれば、xxcustomerファイルはid項目で 並べ替えられているので、続く3つのmjoinコマンドはいずれも 並べ替え処理を省略できる。
mcut i=customer.csv f=id,name | msortf f=id o=xxcustomer mjoin i=xxcustomer m=address.csv k=id f=address o=cust_address.csv mjoin i=xxcustomer m=phone.csv k=id f=phone o=cust_phone.csv mjoin i=xxcustomer m=age.csv k=id f=age o=cust_age.csv