(58)【調査した分野】(Int.Cl.,DB名)
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
請求項1〜5のいずれかに記載の情報処理装置。
前記サンプリング部が、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
請求項1〜6のいずれかに記載の情報処理装置。
前記サンプリング部が、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、請求項7に記載の情報処理装置。
前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、目標テーブル指定部を更に備え、
前記サンプリング部は、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
請求項1〜6のいずれかに記載の情報処理装置。
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
請求項12〜16のいずれかに記載の情報処理方法。
前記(c)のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
請求項12〜17のいずれかに記載の情報処理方法。
前記(c)のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、請求項18に記載の情報処理方法。
(e)前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを更に有し、
前記(c)のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
請求項12〜17のいずれかに記載の情報処理方法。
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
請求項23〜27のいずれかに記載のプログラム。
前記(c)のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
請求項23〜28のいずれかに記載のプログラム。
前記(c)のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、請求項29に記載のプログラム。
【発明を実施するための形態】
【0022】
(実施の形態)
本発明の実施の形態における、情報処理装置、情報処理方法、及びプログラムについて、
図1〜
図16を参照しながら説明する。
【0023】
[装置構成]
最初に、本実施の形態における情報処理装置の概略構成について
図1を用いて説明する。
図1は、本発明の実施の形態における情報処理装置の概略構成を示すブロック図である。
【0024】
図1に示すように、情報処理装置100は、データベース200に含まれるデータのサンプリングを行うための装置である。
【0025】
データベース200においては、それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できる、サンプル属性が設定されている。更に、テーブルに含まれるレコードには、当該レコードに含まれるサンプル属性の値から計算されたハッシュ値が、サンプル属性のレベルとして設定されている。
【0026】
また、
図1に示すように、情報処理装置100は、目標サンプル属性指定部11と、サンプル条件特定部12と、サンプリング部13とを備えている。
【0027】
目標サンプル属性指定部11は、外部から入力された入力データに基づいて目標サンプル属性として、母集団を構成する要素を表す属性として指定できるサンプル属性を指定する。目標サンプル属性は、サンプリングにおいて母集団を構成する要素を表している。
【0028】
サンプル条件特定部12は、入力データに基づいて、サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する。
【0029】
サンプリング部13は、まず、サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、サンプルに包含されるレコードが満たす条件であるレベル条件を設定する。続いて、サンプリング部13は、テーブルに含まれるレコードのうち、目標サンプル属性のレベルがレベル条件を満たすレコードを取得し、これをサンプルに包含させる。
【0030】
加えて、サンプリング部13は、サンプルについて、サンプル条件が満たされているかどうかを判定し、判定の結果、サンプル条件が満たされていない場合は、目標レベルを変更して、再度、前記レコードを取得する。
【0031】
このように、本実施の形態では、テーブルにサンプル属性が設定され、各レコードにはサンプル属性のレベルが設定されている。従って、入力データに基づいて、目標サンプル属性が指定されたとき、目標サンプル属性のレベルがレベル条件を満たすレコードを、サンプル条件が満たされるまで取り出すことで、十分なサンプルが得られるので、レベル条件を満たさないレコードをチェックする必要がない。つまり、本実施の形態によれば、母集団の少なくともひとつの要素が複数のレコードに関連付けられているデータベースにおいて、クエリの条件に適合するサンプリングを高速に実行し得る。
【0032】
続いて、
図2を用いて、本実施の形態における情報処理装置の構成についてより具体的に説明する。
図2は、本発明の実施の形態における情報処理装置の具体的構成を示すブロック図である。
【0033】
図2に示すように、本実施の形態においては、情報処理装置100は、処理実行部10と、データベース管理部20と、データベース記憶部30とを備えている。処理実行部10は、上述した目標サンプル属性指定部11、サンプル条件特定部12、及びサンプリング部13を備えており、これらによって構築されている。処理実行部10については後述する。
【0034】
データベース記憶部30は、集計対象となるデータベース200を記憶する。具体的には、データベース記憶部30は、ハードディスク等の記憶装置によって構築されており、データベース200は、記憶装置の記憶領域に格納されている。また、データベース200はテーブルの集合であり、各テーブルはレコードの集合である。
【0035】
本実施の形態では、上述したように、データベース200に含まれる一つ以上のテーブルについて、サンプリングの対象として指定できる一つ以上の属性が、あらかじめ定められている。本実施の形態では、これらの属性を「サンプル属性」と表記する。
【0036】
サンプル属性のひとつの値は、サンプリングの母集団のひとつの要素を表す。また、サンプル属性の値の異なり数は、サンプリングの母集団として用いるほど十分に大きいものとする。
【0037】
本実施の形態では、同一のサンプル属性が、データベース200に含まれている複数のテーブルに含まれていてもよい。また、サンプル属性を含まないテーブルがデータベースに含まれていてもよい。
【0038】
また、本実施の形態において、情報処理装置100は、外部から入力データが入力された際に、そのデータに基づいて、サンプル属性の中から一つを選択し、選択されたサンプル属性の値を要素とする母集団からのサンプリングを実現する。すなわち、そのサンプル属性の値がランダムに選ばれ、その値を持つレコードのうち入力データに指定された条件を満たすレコードがサンプルを表すテーブルに含まれる。
【0039】
サンプル属性の値は、レコードに対して付与される値であれば、どのような種類の値でもよい。レコードの一部としてデータベースに明示的に記録されている値のほかに、それらの値に基づいて算出される何らかの値でもよい。たとえば、レコードが属性Aと属性Bとを有する場合であれば、属性Aと属性Bとから算出される値が、サンプル属性の値として用いられていてもよい。
【0040】
レコードがデータベースに挿入されるたびに、レコードの内容とは独立した乱数が計算され、その値がサンプル属性の値として設定されてもよい。この場合、サンプル属性の値を要素とするサンプリングは、レコードを要素とするサンプリングに等しくなる。
【0041】
後述するように、サンプル属性の値は、値から計算されるレベルに基づいてレコードの配置を決定する際に用いられる。そのため、レコードの配置さえ決定できるのであれば、サンプル属性の値そのものがデータベースに記録されている必要はない。
【0042】
図3は、本発明の実施の形態において集計対象となるデータベースの一例を示す図である。
図3の例では、サンプル属性に「*」をつけることで、サンプル属性を他の属性から区別している。この例では、データベースは「ORDERS」と「CUSTOMER」との2つのテーブルを備えている。
図3に示すように、ORDERSは3つのサンプル属性を含み、CUSTOMERは2つのサンプル属性を含む。ORDERSは、注文を表すテーブルである。ORDERKEYは注文を表す識別子であり、CUSTKEYは顧客を表す識別子であり、HOUSEHOLDKEYは顧客が所属する世帯を表す識別子である。PRICEはその注文で支払われた金額を表す。NATIONは顧客の住む国を表す。
【0043】
図3に示すデータベース200を記録している情報処理装置100は、例えば、外部入力データに基づいてサンプリングの対象としてCUSTKEYが選択されると、顧客を母集団の要素とするサンプリングを行う。このデータベースにはCUSTKEY=1からCUSTKEY=10までの10人の顧客が登場しているが、この10人がそれぞれ等確率で選択され、選択された顧客に関するレコードのうち、外部入力データに指定された条件を満たす全てのレコードがサンプルに包含される。
【0044】
同様に、外部入力データにおいてORDERKEYが選択されていれば、情報処理装置100は、注文を母集団の要素とするサンプリングを行い、HOUSEHOLDKEYが選択されていれば、世帯を母集団の要素とするサンプリングを行う。
【0045】
ORDERS及びCUSTOMERという2つのテーブルは、CUSTKEY及びHOUSEHOLDKEYという2つのサンプル属性を共有している。一方、ORDERKEYというサンプル属性は、ORDERSにのみ含まれている。このように、テーブル間で同じサンプル属性が共有されていてもよいし、テーブルごとに異なるサンプル属性が含まれていてもよい。
【0046】
データベース記憶部30は、データベース200の各テーブルに含まれるレコードを、さらに小さな集合に分けて取り扱うことができる。本実施の形態では、この小さな集合を「バケット」と表記する。テーブルに含まれる全てのレコードは、いずれかのバケットに割り当てられる。このバケットは、データベース記憶部30において、データの配置を決めるために使われる。
【0047】
より具体的には、本実施の形態では、同じバケットに含まれるレコードは近接して配置される。近接して配置されるとは、たとえば、同じバケットに属するレコードがハードディスク上で同じブロックに配置されることを意味する。
【0048】
後述するように、情報処理装置100は、テーブルに関する入力データ(クエリ)を受けつけるが、内部ではレコードがバケットに分かれていることを利用してサンプリングと集計とが実行される。本実施の形態では、同じバケットに含まれるレコードは近接して配置されているため、同じバケットに含まれる複数のレコードを取得する処理は高速に実行される。このことを利用して、より高速なサンプリングが実現される。
【0049】
レコードが所属するバケットは、レコードが含む一つ以上のサンプル属性のレベルによって決定される。この点について、以下に詳しく説明する。
【0050】
サンプル属性が取る個々の値は、ひとつのレベルに関連づけられている。このレベルは、上述した「サンプル属性のレベル」に該当する。また、サンプル属性のレベルとしては、特殊なハッシュ関数にサンプル属性の値を入力したときに出力される、ハッシュ値が用いられる。
【0051】
ハッシュ関数としては、データベース200において、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数が挙げられる。ハッシュ関数の具体例としては、サンプル属性の値が入力されたときに、値に応じて、[0,L−1]の範囲にあるL個の整数のいずれかを、下記の数1に示す確率で割り当て、割り当てた整数を出力する、ハッシュ関数が挙げられる。Lは、レベルの数を指定する定数である。また、下記の数1において、Bは正の定数である。
【0053】
また、本実施の形態では、ハッシュ関数は、レベルが上がるごとに、値が割り当てられる確率が減少していくように設定されている。従って、サンプル属性値が、レベル0に割り当てられる確率を基準にすると、レベル1に割り当てられる確率はB分の1となり、レベル2に割り当てられる確率はさらにそのB分の1となる。
【0054】
また、上記数1に示す条件を満たすハッシュ関数として、たとえば、特許文献1において使用している“die−hash”というハッシュ関数を用いてもよい。
【0055】
図4は、本発明の実施の形態で用いるハッシュ関数による入出力の一例を示す図である。
図4の例では、L=3、B=2であるときに、サンプル属性値として1から16までの整数が入力された場合に、割り当てられるレベルの例を示している。
図4の例では、サンプル属性の値は、低いレベルに割り当てられる確率が高く、高いレベルに割り当てられる確率は低くなっている。
【0056】
また、
図4の例では、サンプル属性値として整数が用いられているが、サンプル属性値は整数以外の値、たとえば文字列などであってもよい。その場合、ハッシュ関数としては、文字列を入力として整数を出力するハッシュ関数が用いられればよい。
【0057】
更に、サンプル属性ごとに、異なるハッシュ関数が用いられてもよい。たとえば、CUSTKEYのレベルを計算するときと、ORDERKEYのレベルを計算するときとで、異なるハッシュ関数が用いられてもよい。
【0058】
但し、複数のテーブルにおいて、同一のサンプル属性のレベルを計算する場合には、どのテーブルについても同一のハッシュ関数が用いられるものとする。理由は以下の通りである。まず、本実施の形態においては、同一のレベルを持つレコードがサンプルに含まれるようにサンプリングが行われる。そして、各テーブルにおいて、同一のハッシュ関数を用いてレベルを決めるようにすれば、異なるテーブルに含まれている、そのサンプル属性について同じ値を持つレコードが、必ずサンプルに含まれることが保証されるからである。
【0059】
また、各レコードに複数のサンプル属性が含まれている場合は、それぞれのレコードには、レコードに含まれるサンプル属性毎に、当該サンプル属性の値に対応するレベルが割り当てられる。ここで、レコードが含む複数のサンプル属性それぞれの値に対応するレベルを、ある一定の順序で並べたものを「レベルの配列」と表記する。このレベルの配列によって、レコードが割り当てられるバケットが定められる。
【0060】
たとえば、
図3に示したORDERSの3行目のレコードでは、複数のサンプル属性は、「(ORDERKEY,CUSTKEY,HOUSEHOLDKEY)=(3,2,1)」である。この場合、それぞれに対して、
図4に示すハッシュ関数を用いてレベルを計算すると、レベルの配列として「(ORDERKEYのレベル,CUSTKEYのレベル,HOUSEHOLDKEYのレベル)=(0,1,0)」が得られる。このレベルの配列を用いて、このレコードが所属するバケットが決定される。
【0061】
本実施の形態では、テーブルを分割して得られる各バケットは、テーブルのレコードが持つレベル配列に対応して用意されている。
【0062】
但し、本実施の形態においては、レベル配列に含まれるレベルの和が、事前に定められた閾値θ以上となるとき、このレコードはトップバケットと呼ばれる特殊なバケットに割り当てられるものとする。このように定めることで、レコード数が小さいバケットを減らして、サンプリングを高速化する効果がある。
【0063】
トップバケットの利点について詳細に説明する。レベル配列のレベルの和が大きいとき、レコードがそのレベル配列に割り当てられる確率は低くなる。すると、レコード数が小さいバケットが大量にできてしまう。これらの小さなバケットに個別にアクセスすると集計速度が遅くなる。しかし、このような小さなバケットをひとつのバケットに集約し、一度にまとめてアクセスされるようにすれば、大量のアクセスが発生せずに高速化される。これがトップバケットの利点である。
【0064】
テーブルの属性のうち、ひとつ以上が、レコードの配置を制御するためのクラスタ属性として指定されていてもよい。その場合、バケットに含まれるレコードは、クラスタ属性の順番でソートされて配置されている。クラスタ属性としては、たとえば、レコードの時系列順序を表す属性を用いることができる。
【0065】
テーブルのバケットへの分割について、
図3及び
図4に加えて、更に
図5に示す例を用いて説明する。
図5は、
図3に示したデータベースのテーブルを分割して得られるバケットの一例を示す。
図6は、
図3に示したデータベースのテーブルを分割して得られるバケットの他の例を示す。
【0066】
図5及び
図6の例では、L=3およびθ=3とする。すなわち、レベルは0,1,2のいずれかであり、レベル配列の和が3以上であればトップバケットに保存される。レベルは
図4に示したハッシュ関数を用いて計算されている。
【0067】
図5の例では、それぞれのバケットがひとつのテーブルとして表現されている。「ORDERS_BUCKET_0_0_0」は、ORDERSから、レベル配列が(0,0,0)となるレコードのみを抽出することで得られるバケットである。他のバケットも同様の命名規則に基づく。
【0068】
「ORDERS_BUCKET_TOP」は、ORDERSから得られるトップバケットである。このトップバケットには、新たな属性として、ORDERKEYのレベルを表すORDERKEYLEVEL、CUSTKEYのレベルを表すCUSTKEYLEVEL、HOUSEHOLDKEYのレベルを表すHOUSEHOLDKEYLEVELが追加されている。トップバケットに含まれるレコードは、それぞれ異なるレベルを持つため、各レコードには、明示的にレベルを表す属性が追加されている。
【0069】
図6の例では、
図5に示したORDERSと同様に、CUSTOMERのバケットが示されている。CUSTOMERは、2つのサンプル属性しか持たないため、レベル配列の長さも2つである。
【0070】
図3に示したテーブルは、情報処理装置100に対して外部から問い合わせを行う際の論理的なビューである。一方、
図5及び
図6に示したバケットは、情報処理装置100内部でのレコードの配置を定めるために使われる。
【0071】
上述したように、データベース記憶部30においては、同じバケットに含まれるレコードが近接して配置される。これにより、同じバケットに含まれるレコードは同時に高速に取得される。このように配置することで、ひとつのバケットに含まれるレコードを少ないアクセス回数で取得することができる。
【0072】
この近接性を実現するには、最も単純には、同じバケットに含まれるレコードが記憶領域上に並べて配置されていればよい。あるバケットのレコードがほしいとき、そのバケットのレコードを含む一連のブロックをまとめて入出力することで、同じバケットのレコードを同時に取得できる。
【0073】
また、ひとつのバケットに含まれるレコードは、記憶領域上で厳密に連続していなくてもよい。ひとつのバケットに含まれるレコードは、複数のデータベース記憶部(記憶装置)30に分散して記憶されていてもよい。ひとつのバケットに含まれるレコードについて、ある程度まとめてアクセスすることができれば、高速化の効果を得るには十分である。また、
図2の例では、データベース記憶部30は、情報処理装置100に備えられているが、本実施の形態では、データベース記憶部30は、情報処理装置100とは別のサーバ装置に構築されていても良い。この場合では、ひとつのバケットに含まれるレコードは、複数のサーバに分散して記憶されている。
【0074】
特に、クラスタ属性が定義されている場合は、同じバケットの中でクラスタ属性が近いレコードは、記憶領域上で近くに配置されているのがよい。この場合、全てのレコードは、ソートされ、クラスタ属性の順番で並べて配置される。
【0075】
また、テーブルが複数のサンプル属性を有するとき、そのテーブルを分割して得られる個々のバケットは、独立してサンプルとして用いられることはない。何故なら、同じサンプル属性の値を持つレコードが、複数のバケットに分散して存在するからである。たとえば、
図5の例では、CUSTKEY=3が示す顧客の注文が、複数のバケットに分散している。つまり、それぞれのバケットは、同じ顧客の注文の一部しか含まないため、顧客を要素とする母集団からのサンプルと見なすことができない。同様に、他のサンプル属性に関しても、正しいサンプルとは見なせない。
【0076】
後述するように、本実施の形態においては、入力データに基づいて指定された目標サンプル属性に応じて、同一のレベルに対応する複数のバケットを統合することで、目標サンプル属性に関する正しいサンプルとして使うことができるサンプルテーブルが作成される。個々のバケットは、サンプルと見なすことはできないが、指定された目標サンプル属性に応じて複数のバケットを統合することで、目標サンプル属性に関する正しいサンプルを作成できるのである。
【0077】
本実施の形態では、データベース管理部20が、上述の方法によって、データベース記憶部30の記憶領域におけるレコードそれぞれの配置を、当該レコードが含むサンプル属性のレベルに基づいて決定する。即ち、データベース管理部20によって、各レコードは当該レコードが含むサンプル属性のレベルに基づいて所属するバケットが決定され、同じバケットに含まれるレコードは近接して配置される。
【0078】
更に、データベース200において、複数のサンプル属性が設定されている場合は、データベース管理部20は、レコード毎に、複数のサンプル属性のレベルの合計を求める。そして、データベース管理部20は、求めた合計が閾値を超えないレコードについては、当該レコードが含むサンプル属性のレベルの個々の値に基づいて配置を決定し、求めた合計が閾値を超えるレコードについては、合計に基づいて配置を決定する。即ち、求めた合計が閾値を超えないレコードについては、トップバケット以外のバケットに所属させ、求めた合計が閾値を超えるレコードについては、トップバケットに所属させる。
【0079】
また、データベース管理部20は、データベース記憶部30に記録されたデータベース200に対して問い合わせを実行する。具体的には、データベース管理部20は、処理実行部10からクエリを入力として受付け、データベース記憶部30からレコードを取得して計算を行い、計算結果を処理実行部10に出力する。
【0080】
本実施の形態では、処理実行部10からデータベース管理部20に入力されるクエリは、SQLを用いて記述されているものとする。ただし、本発明の範囲は、SQLに限定されるものではない。たとえば、本実施の形態においては、クエリは、SQLを独自に拡張したデータベース言語を用いて記述されていてもよい。また、メモリ上のデータ構造への参照を渡すことで問い合わせが実現されていてもよい。
【0081】
本実施の形態では、データベース記憶部30及びデータベース管理部20は、既存のDBMSを用いて実現することができる。このとき、情報処理装置100全体は、既存のDBMSをバックエンドに持つ新たなDBMSとして機能する。そしてこのバックエンドDBMSは、レコードをバケットごとにまとめて記録するための、情報処理装置100の部分構造として動作する。このとき処理実行部10は、外部から入力データを受け取って、それをバックエンドDBMSへのクエリに書き換える、中継役として動作する。
【0082】
バックエンドDBMSは、レコードをバケットごとに近接して記録することができれば、どのようにレコードを記録していても構わない。たとえば、ひとつのバケットをバックエンドDBMSにおける一つのテーブルとして実現することができる。
図5に示す例を用いれば、
図5に示す各バケットが、バックエンドDBMSにおけるテーブルとして記録される。
【0083】
また、複数のバケットをバックエンドDBMSにおけるひとつのテーブルとして実現してもよい。たとえば、クラスタ属性を指定できるDBMSをバックエンドDBMSとして用いて、バケットを示すための属性を新たに追加して、この属性をクラスタ属性としてバックエンドDBMSに登録すると、同じバケットに含まれるレコードが自動的に近接して配置されるため、同様の近接性を実現できる。このとき、クエリでバケットを示す属性を指定することで、同じバケットに含まれるレコードを一度に取得することができる。元のデータベースにおいてクラスタ属性が設定されている場合、そのクラスタ属性を、バックエンドDBMSにおける二次的なクラスタ属性として用いることができる。すなわち、各レコードはバケットを示す属性でソートされることでバケットに分割され、同じバケットに属する複数のレコードは元のデータベースにおけるクラスタ属性でソートされる。
【0084】
以下の説明では、ひとつのバケットが、バックエンドDBMSにおけるひとつのテーブルとして記録されているものとして説明する。
【0085】
図3、
図5及び
図6の例を用いて説明する。本実施の形態では、情報処理装置100がDBMSとして管理するテーブルは、
図3に示した「ORDERS」と「CUSTOMER」との2つであるとする。一方、情報処理装置100が内部に保持するバックエンドDBMSにおいては、
図5及び
図6に示した個々のバケットがそれぞれひとつのテーブルとして保持されている。
【0086】
バックエンドDBMSは、単一のサーバで動作するDBMSでもよいし、複数のサーバを統合して作られた分散型DBMSであってもよい。
【0087】
処理実行部10は、データベース記憶部30に記録されたレコードに対する集計装置として動作する。処理実行部10は、外部から入力データを受付け、この入力データを元に、新たなクエリを内部で生成して、データベース管理部20に送信する。データベース管理部20は、処理実行部10から受信したクエリに基づいてデータベース記憶部30に記録されたレコードを取得し、クエリの計算結果を処理実行部10に送信する。処理実行部10は、データベース管理部20からクエリの計算結果を受け取ることで、入力データの結果を計算し、計算結果を外部に出力する。
【0088】
また、
図2に示すように、本実施の形態では、処理実行部10は、目標サンプル属性指定部11、サンプル条件特定部12、及びサンプリング部13に加えて、入力データ受付部14と、目標テーブル指定部15と、出力計算部16とを備えている。
【0089】
入力データ受付部14は、外部から入力された入力データを受け付け、受付けた入力データを、目標サンプル属性指定部11、サンプル条件特定部12、及び目標テーブル指定部15に入力する。
【0090】
目標サンプル属性指定部11は、入力データに基づき、サンプル属性の中の一つを目標サンプル属性として指定する。例えば、入力データに、「顧客1人当りの注文数の平均」を求めるクエリが含まれているとする。この場合は、目標サンプル属性指定部11は、顧客キー(CUSTKEY)を目標サンプル属性として指定する。
【0091】
また、データベース200において、複数のサンプル属性が設定されている場合は、目標サンプル属性指定部11は、入力データに基づいて、複数のサンプル属性のうちの一つを目標サンプル属性として指定することもできる。
【0092】
目標テーブル指定部15は、データベース200において、入力データに基づいて、複数のテーブルの中から、目標サンプル属性がサンプル属性として設定されているテーブルを、サンプリングの目標となる目標テーブルとして指定する。この場合、サンプリング部13は、目標テーブルから取得されたレコードをサンプルに包含させる。
【0093】
サンプル条件特定部12は、上述したように、入力データに基づいて、サンプルが満たすべきサンプル条件を特定する。例えば、入力データに、「1000人以上の顧客のデータを用いた1人当りの注文数の平均」を求めるクエリが含まれているとする。この場合、サンプル条件特定部12は、「サンプルに含まれる顧客の数が1000人以上」をサンプル条件として特定する。
【0094】
サンプリング部13は、本実施の形態では、サンプル条件が満たされるまでサンプルのサイズを変更する。つまり、サンプリング部13は、初めに目標レベルを選択し、目標レベルに基づく条件をレベル条件として設定する。次に、サンプリング部13は、目標テーブルに含まれるレコードのうち、目標サンプル属性のレベルがレベル条件を満たすレコードを取得し、取得したレコードをサンプルの一部とする。
【0095】
次に、サンプリング部13は、レベル条件を満たすレコードを、データベース記憶部20の記憶領域から読み出し、それらのレコードの集合をサンプルテーブルとして、サンプルテーブルがサンプル条件を満たすかを判定する。この判定は、データベース管理部20への問い合わせとして実現される。
【0096】
更に、サンプリング部13は、判定の結果、サンプル条件が満たされていない場合は、サンプルテーブルがサンプル条件を満たすまで、もしくは目標レベルが0に達するまで、目標レベルを変更して、データベース管理部20に問い合わせを行う。一方、サンプリング部13は、サンプル条件が満たされている場合は、出力計算部16に、サンプル条件が満たされたことを通知する。
【0097】
例えば、サンプリング部13は、目標サンプル属性のレベルが目標レベルより大きいことを、レベル条件として設定することができる。この場合、サンプリング部13は、目標サンプル属性のレベルが目標レベルより大きいレコードを取得して、これをサンプルに包含させる。また、サンプリング部13は、判定の結果、サンプル条件が満たされていない場合に、目標レベルを値が小さくなるように変更して、再度、レコードを取得し、これをサンプルに包含させる。
【0098】
出力計算部16は、サンプル条件が満たされると、レベル条件とサンプル条件とを満たし、且つサンプルに包含されたレコードの集合を用いて、入力データに対する出力内容を計算する。また、出力計算部16は、出力内容を、外部に出力する。
【0099】
[装置動作]
次に、本発明の実施の形態における情報処理装置100の動作について
図7〜
図15を用いて説明する。
図7は、本発明の実施の形態における情報処理装置の動作を示すフロー図である。また、以下の説明においては、適宜
図1〜
図6を参酌する。また、本実施の形態では、情報処理装置100を動作させることによって、情報処理方法が実施される。よって、本実施の形態における情報処理方法の説明は、以下の情報処理装置100の動作説明に代える。
【0100】
図7に示すように、まず、入力データ受付部14は、外部から入力された入力データを受付ける(ステップA1)。
【0101】
本実施の形態では、入力データは、サンプリングの方法を指定するデータである。入力データは、例えば、サンプリングの対象となる目標サンプル属性の指定、サンプリングの対象となる目標テーブルの指定、及びサンプルが満たすべきサンプル条件の指定を含むことができる。このとき、情報処理装置100は、指定された目標サンプル属性について、サンプル条件を満たすまで、指定された目標テーブルのサンプリングを実施する。
【0102】
入力データは、たとえば、データベース言語で記述されたテキストデータであってもよい。この場合、テキストは、SQLを拡張した言語を用いて記述されていてもよいし、独自のデータベース言語を用いて記述されていてもよい。
【0103】
また、入力データは、データベース言語で記述されたテキストデータに限らず、サンプリングの方法を指定できるデータであれば、どのようなものでもよい。たとえば、サンプル属性の名称のリストがウェブアプリケーション上に表示されている場合であれば、ユーザがマウス等によって特定の名称を選択すると、この選択された名称が目標サンプル属性として指定される。このとき、指定された目標サンプル属性を特定するデータが、ウェブアプリケーションから、入力データとして入力される。
【0104】
図8は、本発明の実施の形態で用いられる入力データの一例を示す図である。
図8に示す入力データは、SQLを拡張したデータベース言語で記述されたテキストデータである。
図8の例においては、従来のSQLに存在する句以外に、新たにSAMPLE句とUNTIL句とが加わっている。このSAMPLE句とUNTIL句とは、サンプリングの方法を指定するために独自に定義されたものである。
【0105】
SAMPLE句は、目標サンプル属性及び目標テーブルを指定するための句である。
図8の例では、SAMPLE句は、CUSTKEYを目標サンプル属性として指定している。また、SAMPLE句は、ORDERS及びCUSTOMERを目標テーブルとして指定している。さらに、SAMPLE句は、AS句を用いて、ORDERSから得られるサンプルテーブルに、ORDERS_SAMPLEという別名を付与し、CUSTOMERから得られるサンプルテーブルに、CUST
OMER_SAMPLEという別名を付与している。
【0106】
WITH句は、従来のSQLに存在する句であり、サブクエリに別名を付与する機能を持つ。
図8の例では、SAMPLE句で定義されたORDERS_SAMPLEとCUSTOMER_SAMPLEとを、CUSTKEYで等価結合してWHERE句でフィルタリングするサブクエリを定義し、JOINED_TABLEという別名を付与している。
【0107】
UNTIL句は、サンプルが満たすべき条件であるサンプル条件を指定するための句である。SAMPLE句において定義されたサンプルテーブルは、サンプリングが進むにつれて少しずつ拡大される。そして、UNTIL句に定義されたサンプル条件が満たされたとき、サンプリングを停止し、サンプルテーブルを用いて後続するSELECT句を実行する。
【0108】
図8の例では、WITH句で定義されたJOINED_TABLEに含まれるCUSTKEYの異なり数が1000以上になる、というサンプル条件が指定されている。これは、即ち、JOINED_TABLEに1000人以上の顧客のレコードが含まれたときサンプリングを停止して、後続するSELECT AVG(sum)以降の集計が実行されることを意味している。
【0109】
以上の説明をまとめると、
図8に示す外部入力データは、「2015−01−02から2015−01−08の期間に注文を行った、日本に住む顧客について、1000人をサンプリングして、一人あたりの利用金額を合計し、さらに平均をとって出力する」という集計を意味する。
【0110】
図8に示すクエリが表す集計は、レコードをランダムに選ぶ従来のサンプリングでは計算困難である集計の一例である。何故なら、期間内の一人あたりの利用金額を合計するためには、ランダムに選ばれた顧客について、その顧客が期間内に行った複数の注文に対応するレコードを、全てサンプルテーブルに含める必要があるからである。本実施の形態では、このようなクエリを高速に計算することができる。
【0111】
なお、サンプル条件は、ステップA1で入力される入力データに含まれていなくてもよい。後述するように、サンプルが満たすべき条件が必要になるのは、ステップA5であるから、ステップA5において、再度入力が受け付けられてもよい。
【0112】
次に、目標サンプル属性指定部11は、外部からの入力データに基づいて、サンプリングの対象となる目標サンプル属性を指定する(ステップA2)。この目標サンプル属性は、データベース記憶部30においてレコードの配置を決定するために用いられている一つ以上のサンプル属性の中から選択される。
図8の例では、目標サンプル属性指定部11は、CUSTKEYを目標サンプル属性として指定する。
【0113】
次に、目標テーブル指定部15は、外部からの入力データに基づいて、サンプリングの対象となる目標テーブルを指定する(ステップA3)。この目標テーブルは、目標サンプル属性指定部11で指定された目標サンプル属性を含むテーブルの中から選択される。
図8の例では、目標テーブル指定部15は、ORDERS及びCUSTOMERを目標テーブルとして指定する。
【0114】
次に、サンプル条件特定部12は、外部からの入力データを元に、サンプルが満たすべき条件であるサンプル条件を特定する(ステップA4)。
図8の例では、サンプル条件特定部12は、UNTIL句に指定された式がTRUEになることを、サンプル条件として特定する。
【0115】
以上のステップA2からA4において、外部からの入力データに明示的に指定がない情報については、推定によって補われてもよい。たとえば、目標テーブルが明示的に指定されていない場合は、目標テーブル指定部15は、目標サンプル属性を含む全てのテーブルを目標テーブルと見なしてもよい。また、同様の場合において、目標テーブル指定部15が、外部からの入力データに含まれるSQLにおけるテーブルを目標テーブルと見なし、目標サンプル属性指定部11が、それらのテーブルに共通して含まれるサンプル属性を目標サンプル属性と見なす、といった態様であってもよい。
【0116】
次に、サンプリング部13は、目標レベルを初期化する(ステップA5)。
【0117】
本実施の形態では、レコードの目標サンプル属性のレベルと、現在の目標レベルとを比較して、ある条件を満たしているレコードだけがサンプリングされる。この条件が「レベル条件」となる。
【0118】
目標レベルは、目標レベルを変更することでサンプルのサイズを制御するための変数である。目標レベルが高いほど取得されるレコードの数は少なく、目標レベルが低いほど取得されるレコードの数が多くなる。単純には、目標レベルは、レベルの最大値に設定されていればよい。後述するように、設定した目標レベルで取得されたレコードの数が少なければ、目標レベルを下げて、各処理が再実行される。
【0119】
目標レベルの変更によってサンプルサイズが変更されるようになっていれば、レベル条件はどのようなものでもよい。上述したようにレコードの目標サンプル属性のレベルが目標レベル以上になることがレベル条件とされてもよいし、レコードの目標サンプル属性のレベルが目標レベルと等しくなることがレベル条件とされてもよい。以下では、レコードの目標サンプル属性のレベルが目標レベル以上になることをレベル条件とする。
【0120】
次に、サンプリング部13は、目標サンプル属性、目標テーブル、及び目標レベルに基づいて、レベル条件を満たすレコードを用いて、サンプル条件クエリを生成する(ステップA6)。サンプル条件クエリは、後述のステップにおいて、サンプル条件が満たされているかどうかの判定に用いられる。
【0121】
目標サンプル属性のレベルが目標レベル以上になるというレベル条件を満たすレコードは、目標サンプル属性のレベルが目標レベル以上となるバケット、または、トップバケットの、いずれかに必ず包含される。よって、サンプル条件クエリは、そのようなバケットのみからレコードが取得されるように設定される。
【0122】
より具体的には、サンプリング部13は、まず、目標テーブル毎に、目標レベル以上のレコードを含むバケットからレコードを取得するビューを定義する。このビューがサンプルテーブルを表す。そして、サンプリング部13は、サンプル条件クエリを、これらのサンプルテーブルからレコードを取得するように定義する。
【0123】
図9は、本発明の実施の形態で用いられるビューの一例を示す図である。具体的には、
図9は、ORDERSのサンプルテーブルをビューとして定義するSQL文の一例を示している。
図9の例では、
図5に示したバケットを用いてサンプルテーブルが定義されている。また、
図9の例においては、L=3、かつθ=3であり、目標レベルは1である。ORDERSテーブルにおけるレベル配列は、(ORDERKEYのレベル、CUSTKEYのレベル、HOUSEHOLDKEYのレベル)という順番で並んでいる。
【0124】
このとき、CUSTKEYのレベルが1以上であり、かつレベルの和が3未満であるようなレベル配列は、(0,2,0)、(1,1,0)、(0,1,1)、及び(0,1,0)の4通りである。これに加えて、トップバケットからもレコードを取得する必要がある。これらのレベル配列を持つバケットを表すテーブルをUNION句で結びつけることで、CUSTKEYのレベルが1以上となる全てのレコードをORDERSから選択するビューが作成される。
【0125】
ただし、トップバケットには、目標レベル未満となるレコードも含まれているため、これらは除外する工夫が必要である。これを実現するため、例えば、サンプリング部13は、トップバケットから、目標サンプル属性のレベルが目標レベル以上となるレコードだけを取得するビューを作成し、そのビューからレコードを取得する。また、サンプリング部13は、サンプル属性のレベルを、レコードの属性として明示的にトップバケットに記録し、ビューのWHERE句でフィルターをかけることで、目標レベル未満のレコードを除外することもできる。
【0126】
図10は、本発明の実施の形態で用いられるビューの他の例を示す図である。具体的には、
図10は、ORDERSのトップバケットから、目標サンプル属性のレベルが目標レベル以上となるレコードだけを取得するビューを作成するSQL文の一例を示している。CUSTKEYLEVELは、CUSTKEYのレベルを格納する属性である。このSQL文では、目標レベルが1であり、CUSTKEYのレベルが1以上となるレコードのみがトップバケットから取得される。
図10において定義されたORDERS_BUCKET_TOPを、
図9に示したORDERS_BUCKET_TOPに代入することで、目標サンプル属性のレベルが目標レベル以上となるレコードだけが取得される。
【0127】
また、
図11及び
図12も、本発明の実施の形態で用いられるビューの他の例を示す図である。具体的には、
図11は、CUSTOMERのサンプルテーブルをビューとして定義するSQL文の一例を示す。
図12は、CUSTOMERのトップバケットから、目標サンプル属性のレベルが目標レベル以上となるレコードだけを取得するビューを作成するSQL文の一例を示す。
【0128】
図13は、本発明の実施の形態で用いられるサンプル条件クエリの一例を示す図である。具体的には、
図13は、サンプル条件が満たされているかどうかを判定するSQL文の一例である。
図13に示すSQL文は、サンプル条件クエリとして用いられる。また、
図13に示すSQL文は、
図9及び
図11で定義されたサンプルテーブルを用いて、サンプル条件が満たされているかどうかを判定する。
図13に示すSQL文は、
図8に示す拡張SQL文から、WITH句とUNTIL句とを抽出し、UNTILをSELECTに置換することで生成されたものである。
図13に示すSQL文を実行すると、真偽値が出力される。真偽値がTRUEであれば、サンプル条件が満たされたことを示し、FALSEであれば、サンプル条件がまだ満たされていないことを示す。
【0129】
図9から
図13に示したSQL文には、「CREATE VIEW」文が用いられている。これは、サンプルテーブルを直接データベースに保存せずに、後述するステップでその場で計算するための工夫である。なお、本実施の形態では、サンプリング部13は、「CREATE TABLE」文を使って、サンプルテーブルを一度データベースに保存することもできる。
【0130】
また、本実施の形態において、
図9から
図13に示したSQL文は一例であり、サンプル条件クエリの構成はこれに限定されることはない。サンプル条件クエリとしては、内部DBMSのテーブル構成に応じたクエリ構成が用いられてもよい。たとえば、
図9から
図13は、バケットをバックエンドDBMSに個別のテーブルとして保存する場合の方法を示している。しかし、本実施の形態では、複数のバケットが、バックエンドDBMS上ではひとつのテーブルとして保存されている場合に、レコードに各サンプル属性のレベルを新たな属性として付与しておき、そのレベルが目標レベル以上となることを条件とするビューが作成されても良い。この場合においても、
図9〜
図13の例と同様の結果が得られるクエリが実現される。
【0131】
次に、サンプリング部13は、サンプル条件クエリを実行し、サンプルがサンプル条件を満たしているかどうかを判定する(ステップA7)。具体的には、サンプリング部13は、サンプル条件クエリを、データベース管理部20に入力し、データベース管理部20が返す真偽値を用いて、サンプルがサンプル条件を満たしているかどうかを判定する。また、データベース管理部20は、データベース記憶部30に記憶されているデータを用いてサンプル条件クエリの出力を計算する。
【0132】
サンプリング部13は、ステップA7の判定の結果、サンプルがサンプル条件を満たしていない場合は、ステップA9に進み、サンプルがサンプル条件を満たしている場合は、ステップA11に進む(ステップA8)。
【0133】
ステップA8においてサンプルがサンプル条件を満たしていない場合は、サンプリング部13は、目標レベルが0(ゼロ)であるかどうかを判定する(ステップA9)。サンプリング部13は、目標レベルが0(ゼロ)であればステップA11に進み、0(ゼロ)でなければステップA10に進む。
【0134】
ステップA10においては、サンプリング部13は、目標レベルを下げ、その後、ステップA6に戻る(ステップA10)。単純には、サンプリング部13は、目標レベルを「1」下げる。目標レベルを「1」下げることは、ステップA6で取得されるレコード数の増加量の期待値がB倍されることを意味する。何故なら、新たな目標レベルには、前回の目標レベルのB倍のレコードが含まれていると期待できるからである。これにより、ステップA6が実行されるたびに、取得されるレコード数は増加していく。そして、サンプル条件が満たされるか、目標レベルが0になるまで、サンプルの生成が繰り返される。なお、サンプリング部13は、もし、目標レベルを「1」下げてもサンプル条件を満たさないと推量する場合は、目標レベルを「2」以上下げることもできる。
【0135】
ステップA8においてサンプルがサンプル条件を満たしている場合、または、ステップA9において、目標レベルが0である場合は、出力計算部16は、サンプルを用いて出力内容を計算する(ステップA11)。
【0136】
また、ステップA11では、目標レベルが0である場合は、サンプル条件は満たさなかったが、元のテーブルからレコードを全て得られているので、出力計算部16は、これらを用いて出力を計算する。この場合、サンプリングではなく、クエリに当てはまる全てのデータを使った厳密な結果が出力される。サンプル条件が満たされなかった場合は、出力計算部16は、エラーを出力してもよい。
【0137】
出力計算部16による出力内容の計算は、データベース管理部20に対してクエリを与えることで実現できる。出力内容を計算するクエリは、たとえばSQLを用いて記述できる。
【0138】
図14は、本発明の実施の形態において出力計算部が作成するクエリの一例を示す図である。具体的には、
図14は、サンプルを用いて出力内容を計算するSQL文の一例を示している。
図14に示すSQL文は、
図8に示した入力データから、SAMPLE句とUNTIL句とを除去して得られたものである。サンプルテーブルは、既にUNTIL句に記述された条件を満たしている。このため、その後、
図14に示されたSQL文を実行すれば、外部入力データに指定された通りの集計を実現できる。
【0139】
また、本実施の形態は、処理実行部10において、サンプル条件の判定に用いたレコードが別途キャッシュされており、出力計算部16が、キャッシュされたレコードを用いて出力内容を計算する態様であってもよい。この態様においては、出力計算部16によるデータベース管理部20への問い合わせは省略することができる。
【0140】
そして、ステップA11の実行後、出力計算部16は、計算した出力内容を、外部に出力する(ステップA12)。本実施の形態では、サンプルが条件を満たした後に、計算結果が出力されるが、本実施の形態はこれに限定されるものではない。これを変更し、本実施の形態は、出力計算部16が目標レベルごとに出力を行なう態様であってもよい。
【0141】
すなわち、目標レベルがL−1であるときの出力、目標レベルがL−2であるときの出力が順次出力されてもよい。この態様では、最初は少数のサンプルによる、精度の低い推定結果が表示され、順次、サンプルが増加し、精度の高い推定結果が表示されるようになる。
【0142】
これにより、外部のユーザが現在の進捗状況を監視し、十分な情報が得られたと判断すればユーザのコマンド入力によってサンプリングを終了するといった、オンラインアグリゲーションと同様の動作が実現されてもよい。この場合、ユーザのコマンド入力がサンプリングの停止条件となる。
【0143】
[実施の形態による効果]
本実施の形態の効果について、以下に説明する。
【0144】
上述した特許文献1に開示された手法は、テーブルの全てのレコードをスキャンしながら、ハッシュ関数で計算されるレベルに応じてサンプルの一部を捨てることで、サンプルの大きさを一定以内に保つ技術である。この手法では、サンプルの作成に時間がかかるため、外部からの入力によって指定された条件を満たすサンプルを高速に作成することはできない。
【0145】
更に、特許文献1には、事前にサンプルを作成しておいて、そのサンプルに対してクエリを適用する方法が開示されているが、この方法では外部からの入力によって指定された条件を満たすことは困難である。たとえば、
図8に示すクエリのように、特定の期間に注文した特定の国に住む顧客を1000人サンプリングしたいという要求があるとき、事前に作成したサンプルの中に、このような複雑な条件を満たす顧客が十分に含まれているとは限らない。かといって、様々な条件を想定して大量のサンプルを作っておくと、膨大な記憶領域を浪費してしまう。
【0146】
本実施の形態では、事前にレコードは、ハッシュ関数で計算されるレベルに応じて並べ替えられる。そして、外部からサンプルが要求されると、目標サンプル属性のレベルが高いレコードから優先的にチェックされ、指定された条件を満たすレコードが十分な数集まった時点でサンプリングが打ち切られる。このとき、目標サンプル属性のレベルが低いレコードはチェックされない。これにより、大半のレコードを無視できるため、サンプルの生成は高速である。しかも、事前にサンプルを作成する場合と異なり、外部から指定された条件を満たすサンプルが作成される。更に、本実施の形態では、元から存在するデータを並べ替えるだけであり、レコードを複製する必要がないので、記憶領域を浪費しない。
【0147】
本実施の形態は、ひとつのテーブルが複数のサンプル属性を持つ場合に、特に効果的である。事前にサンプルを作成する方法では、サンプリングに用いる属性ごとに別途サンプルを作成して保存する必要があるため、サンプリングに用いる属性が増えるほど、より多くの記憶領域が浪費される。これに対して、本実施の形態においては、サンプル属性が増加しても、レコードの配置が変わるだけで、レコードを複製する必要がない。これにより、記憶領域の浪費が抑制される。
【0148】
また、もしもテーブルにおけるサンプル属性がひとつだけであれば、サンプル属性の値にランダムな順番を定めてその順番でソートする方法を用いれば、テーブルの先頭からシーケンシャルアクセスすることで、そのサンプル属性の値におけるサンプリングを実現できる。たとえば、
図3に示すORDERテーブルについて、CUSTKEYにランダムな順番を決めて、その順番でORDERテーブルをソートしておけば、先頭からシーケンシャルアクセスすることで顧客を母集団にしてサンプリングできる。但し、このような単純な手法は、複数のサンプル属性に対応できない。たとえば顧客でサンプリングするためにソートしてしまうと、今度は世帯でサンプリングできなくなってしまう。
【0149】
これに対して、本実施の形態では、複数のサンプル属性について、指数関数的に偏りがあるレベルを計算して、レベルの組み合わせに応じてバケットに分割することで、複数のサンプル属性のいずれについても高速にサンプルを作成できる。指数関数的に分割されたレベルの数は、後述するようにレコード数をNとしてL=O(log N)個に抑えることができ、レベルの組み合わせの数が爆発的に増加することを防ぐことができる。これにより、複数のサンプル属性のいずれを目標としてサンプリングしても、わずかな数のバケットをチェックするだけで条件を満たすサンプルを生成できる。
【0150】
また、本実施の形態では、目標テーブル指定部15は、同一の目標サンプル属性がサンプル属性として設定されている2以上のテーブルを、目標テーブルとして指定することができる。この場合、サンプリング部13は、指定された2以上のテーブルそれぞれから取得したレコードを、同一の目標サンプル属性に基づいて結合し、結合によって生成されたレコードをサンプルに包含し、サンプル条件が満たされているかどうかを判定する。
【0151】
つまり、本実施の形態は、複数のテーブルが同じサンプル属性を共有しており、そのサンプル属性の値が等しくなる条件でテーブルを等価結合するとき、特に効果的である。何故なら、複数のテーブルからその属性を用いてサンプリングすることで、それぞれのテーブルから小さなサンプルテーブルを抽出し、サンプルテーブル同士を等価結合することで、計算コストを大幅に減らすことができるためである。小さなテーブル同士の結合は、大きなテーブル同士の結合よりも計算コストが小さい。
【0152】
従来の、レコードを母集団の要素とするサンプリングの場合は、異なるテーブルから得られたサンプル同士を等価結合しても、正確な推定結果を得ることができない。何故なら、等価結合するためには、等価結合に用いられる属性について、同じ値がどちらのサンプルにも含まれている必要があるからである。レコードを母集団の要素とするサンプリングでは、同じ値がサンプルに含まれる保証がない。
【0153】
一方、本実施の形態では、同じサンプル属性であれば同一のハッシュ関数を用いてレベルが定められている。よって、ある目標レベルを用いてレコードを抽出するとき、異なるテーブルであっても、同じサンプル属性の値が両方のサンプルに含まれる。これにより、サンプル同士の等価結合が正確に実現できる。
【0154】
そして、本実施の形態では、サンプル同士を等価結合したテーブルを用いて、サンプル条件が満たされているかどうかを判定し、サンプル条件が満たされるまでサンプル作成を継続することができる。これにより、複数のテーブルに関する条件を満たすようなサンプルを高速に作成できる。
【0155】
図3に示すデータベースの例を用いて、上記の点を説明する。目標サンプル属性がCUSTKEYであり、ORDERSとCUSTOMERとのそれぞれからサンプリングするとする。このとき、たとえば、ORDERSからCUSTKEY=9となるレコードがサンプリングされているならば、CUSTOMERに含まれるCUSTKEY=9となるレコードも必ずサンプリングされる。何故なら、同一のハッシュ関数を用いて計算されたレベルを用いて、レコードが取得されているからである。このように、CUSTKEYの選択された値を持つレコードがどちらのテーブルからも取得されるため、CUSTKEYを用いてサンプルテーブル同士を等価結合できる。
【0156】
図8に示す例では、このサンプル同士を結合したテーブルに関する条件を用いてサンプル条件が記述されている。すなわち、ORDERSから取得したサンプルテーブルとCUSTOMERから取得したサンプルテーブルを結合することで、特定の期間に注文し、しかも顧客の住む国が特定の国であるような顧客だけを取得している。本実施の形態では、このように、複数のテーブルに関する条件を満たすようなサンプルを高速に作成することができる。
【0157】
本実施の形態は、特に、データベースを、スタースキーマのようなデータウェアハウス用途で用いる際に重要になる。データウェアハウス用途では、巨大なファクトテーブルと複数のディメンションテーブルが存在し、ファクトテーブルとディメンションテーブルを外部キーで結合することで集計する。ディメンションテーブルは、それぞれ顧客や製品など、集計の切り口となる次元を表している。
【0158】
このようなデータウェアハウスでの集計をサンプリングで近似するためには、顧客ごとの集計や製品ごとの集計などの集計のタイプに応じて、母集団を切り替えてサンプリングする必要がある。本実施の形態は、このような、母集団を切り替えて様々な集計を行う場面において、顧客や製品を予めサンプル属性に指定しておくことで、どの母集団においてもサンプリングを高速に実施できる。
【0159】
たとえば、
図8に示す例では、CUSTKEYを目標サンプル属性として指定することで、顧客1000人について一人あたりの合計利用金額の平均を計算している。ここで、CUSTKEYをHOUSEHOLDKEYに変更すると、1000世帯について一世帯あたりの合計利用金額の平均を計算することができる。このように、事前のサンプル作成なしで、様々な母集団について高速にサンプリングを行うことができる。
【0160】
また、本実施の形態は、特に、データベースのテーブルにクラスタ属性が設定されているときに、重要となる。この場合、データベース管理部20は、データベース記憶部30の記憶領域におけるレコードそれぞれの配置を決定する際に、テーブルに含まれ、且つ、サンプル属性のレベルが等しい複数のレコードについては、クラスタ属性の値に基づいて配置を決定することができる。
【0161】
つまり、この場合、バケットに含まれているレコードも、元のテーブルに設定されたクラスタ属性と同じクラスタ属性を用いてソートして配置される。これにより、クラスタ属性を条件にしたサンプリングが実行されると、クラスタ属性の条件に当てはまらないレコードをまとめて無視できるため、高速にサンプルを収集できるという効果が得られることになる。
【0162】
たとえば、
図3に示す例では、元となるORDERSテーブルがORDERDATEという注文日付を表す属性をクラスタ属性としてソートされている。そして、
図5及び
図6に示す例では、ORDERSテーブルのバケットに含まれるレコードを同じく注文日付の順番でソートされている。これにより、注文日付を条件にしたサンプリングにおいて、条件に当てはまるレコードをまとめて取得することができる。たとえば、
図8に示す例は、「2015年1月2日から2015年1月8日までに注文された注文である」ことを条件としたクエリである。このクエリが入力されたとき、本実施の形態では、指定された時間範囲に含まれるレコードをまとめて取得できる一方、指定された時間範囲外のレコードをまとめて無視することができるため、条件を満たすレコードを効率的に収集できる。
【0163】
最後に、本実施の形態が高速に実行される点について、何故高速に実行できるのか、具体的に考察する。
【0164】
レコード数Nの注文テーブルからのサンプリングを考える。また、顧客が一つ以上の定数オーダ個の注文に対応しており、顧客数はO(N)であるとする。
【0165】
このとき、レベル数Lを、L=O(log(N))となるように定める。logの底はBである。このとき、あるサンプル属性に関して、最大のレベルであるL−1に割り当てられる属性値の数の期待値は、Nによらず定数オーダとなる。何故なら、レベルL−1に割り当てられる確率は、レベル0に割り当てられる確率に比べて、BのL乗分の1、すなわちO(N)分の1になるためである。
【0166】
このとき、外部入力データによって、M人分の注文をサンプリングすることが求められたとする。ただし、外部入力データの指定した条件によって、F人に1人の割合でしかサンプルに包含されないとする。
【0167】
更に、このとき、本実施の形態では、レベルの高いレコードから順に探索して、M人分以上の注文が得られた時点で、サンプリングを停止して目標レベルを固定する。このときの目標レベル以上のレベルの数をKと置く。このとき、目標レベル以上のK個のレベルには、O(F・M)人分のレコードが含まれる。
【0168】
そして、Nが十分大きければ、本実施の形態が処理するレコード数は、全体のレコード数Nには依存しない。Nがどれだけ巨大であっても、本実施の形態が処理するレコードの数は一定である。何故なら、Nが大きければ大きいほど、低いレベルに含まれるレコード数は増加するが、上位Kレベルの探索においては、低いレベルに大量のレコードがあっても無視されるからである。
【0169】
図15は、本実施の形態における情報処理装置によるサンプリングが処理するレコードの数を概念的に示す図である。
図15に示すように、本実施の形態によるサンプリングは、レコード数Nが小さい場合でも、大きい場合でも、計算量が変化しない。どちらの場合でも、上位Kレベル(この図ではK=3)を取得することで、サンプリングが終了する。
【0170】
すなわち、1000人分のデータを取得するよう外部から要求されたとき、データベースに含まれる顧客の人数が1万人であっても1億人であっても、本実施の形態によるサンプリングが処理するレコードの数は変化しない。
【0171】
また、計算速度の点では、レコードの絶対数が少ないことだけではなく、複数のレコードを一度に取得できることも重要である。一般に、DBMSはブロックごとに入出力を行うが、サンプリングされるべきレコードが異なるブロックに散らばっている場合、少数のレコードを取得するために何度もブロックを入出力する必要があり、速度が遅くなる。
【0172】
本実施の形態では、同一のバケットに所属するレコードを近接して配置することで、この問題を解決している。
【0173】
同一のバケットに含まれるレコードが効率的に取得できる場合、次に問題になるのは、サンプリングでアクセスする必要があるバケットの数である。すなわち、ある目標サンプル属性の目標レベルを固定したときに、レベル条件を満たすレコードが含まれている可能性があるバケットの数が問題である。
【0174】
単純に、全てのサンプル属性についてL=O(log N)個のレベルに分割してしまうと、チェックすべきバケットの数はNに依存する。あるテーブルに含まれるサンプル属性の数をSとするとき、ひとつのサンプル属性のある目標レベルに対応するバケットは、それ以外の属性S−1個についての組み合わせにより、LのS−1乗個存在することになる。これはNに依存して大きくなる。
【0175】
本実施の形態では、θ=Lとなるようにトップバケットの閾値θを設定することで、サンプリングでアクセスする必要があるバケットの数も、データ量Nに依存しないように設定できる。
【0176】
たとえば、複数のサンプル属性が含まれるテーブルについて、ひとつを目標サンプル属性として指定しサンプリングを行うとする。最大のレベルであるL−1を目標レベルとするとき、このレベルに対応するバケットは、トップバケットと、他のサンプル属性のレベルが0になるバケットのみである。何故なら、他のサンプル属性が1以上になるレコードは、全てトップバケットに含まれるからである。
【0177】
同様に、目標レベルを下げるほど、下げたぶんだけ考慮すべきバケットの数は増加するが、途中のレベルでサンプリングが終了するならば、このバケット数はLに依存せず、つまりデータ量Nに依存しない。
【0178】
このような利点は、レベルが上がるごとに、割り当てられるレコードが減少することによって得られている。もし単純に、レコードを各レベルに均等に分割してしまうと、ひとつのレベルに所属するレコード数か、バケット数のどちらかがNに依存してしまい、データ量によって計算量が大きく変化してしまう。
【0179】
以上のように、本実施の形態においては、レコードの数の点においてもバケットの数の点においても、データ全体の一部を調べるだけで済み、巨大なデータに対してもクエリの条件を満たすサンプルを高速に作成できる。
【0180】
[プログラム]
本発明の実施の形態におけるプログラムは、コンピュータに、
図7に示すステップA1〜A12を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態における情報処理装置100と情報処理方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、標サンプル属性指定部11、サンプル条件特定部12、サンプリング部13、入力データ受付部14と、目標テーブル指定部15、出力計算部16及びデータベース管理部20として機能し、処理を行なう。また、本実施の形態では、データ
ベース記憶部30は、コンピュータに備えられたハードディスク等の記憶装置によって実現されていても良いし、本実施の形態におけるプログラムを実行するコンピュータとは別のコンピュータ上に構築されていても良い。
【0181】
また、本実施の形態におけるプログラムは、複数のコンピュータによって構築されたコンピュータシステムによって実行されても良い。この場合は、例えば、各コンピュータが、それぞれ、目標サンプル属性指定部11、サンプル条件特定部12、サンプリング部13、入力データ受付部14と、目標テーブル指定部15、出力計算部16及びデータベース管理部20のいずれかとして機能しても良い。
【0182】
ここで、本実施の形態におけるプログラムを実行することによって、情報処理装置100を実現するコンピュータについて
図16を用いて説明する。
図16は、本発明の実施の形態における情報処理装置を実現するコンピュータの一例を示すブロック図である。
【0183】
図16に示すように、コンピュータ110は、CPU111と、メインメモリ112と、記憶装置113と、入力インターフェイス114と、表示コントローラ115と、データリーダ/ライタ116と、通信インターフェイス117とを備える。これらの各部は、バス121を介して、互いにデータ通信可能に接続される。
【0184】
CPU111は、記憶装置113に格納された、本実施の形態におけるプログラム(コード)をメインメモリ112に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ112は、典型的には、DRAM(Dynamic Random Access Memory)等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体120に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス117を介して接続されたインターネット上で流通するものであっても良い。
【0185】
また、記憶装置113の具体例としては、ハードディスクドライブの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス114は、CPU111と、キーボード及びマウスといった入力機器118との間のデータ伝送を仲介する。表示コントローラ115は、ディスプレイ装置119と接続され、ディスプレイ装置119での表示を制御する。
【0186】
データリーダ/ライタ116は、CPU111と記録媒体120との間のデータ伝送を仲介し、記録媒体120からのプログラムの読み出し、及びコンピュータ110における処理結果の記録媒体120への書き込みを実行する。通信インターフェイス117は、CPU111と、他のコンピュータとの間のデータ伝送を仲介する。
【0187】
また、記録媒体120の具体例としては、CF(Compact Flash(登録商標))及びSD(Secure Digital)等の汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)等の磁気記録媒体、又はCD−ROM(Compact Disk Read Only Memory)などの光学記録媒体が挙げられる。
【0188】
なお、本実施の形態における情報処理装置100は、プログラムがインストールされたコンピュータではなく、各部に対応したハードウェアを用いることによっても実現可能である。更に、情報処理装置100は、一部がプログラムで実現され、残りの部分がハードウェアで実現されていてもよい。
【0189】
上述した実施の形態の一部又は全部は、以下に記載する(付記1)〜(付記33)によって表現することができるが、以下の記載に限定されるものではない。
【0190】
(付記1)
データベースに含まれるデータのサンプリングを行うための情報処理装置であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定され、
当該情報処理装置は、
外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、目標サンプル属性指定部と、
前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、サンプル条件特定部と、
前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
サンプリング部と、
を備えている、ことを特徴とする情報処理装置。
【0191】
(付記2)
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記目標サンプル属性指定部が、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
付記1に記載の情報処理装置。
【0192】
(付記3)
前記データベースが記憶装置の記憶領域に格納されており、
当該情報処理装置が、
前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、データベース管理部を、更に備えている、
付記1または2に記載の情報処理装置。
【0193】
(付記4)
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記データベース管理部が、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
付記3に記載の情報処理装置。
【0194】
(付記5)
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記データベース管理部が、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
付記3または4に記載の情報処理装置。
【0195】
(付記6)
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
付記1〜5のいずれかに記載の情報処理装置。
【0196】
(付記7)
前記サンプリング部が、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
付記1〜6のいずれかに記載の情報処理装置。
【0197】
(付記8)
前記サンプリング部が、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、付記7に記載の情報処理装置。
【0198】
(付記9)
前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、目標テーブル指定部を更に備え、
前記サンプリング部は、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
付記1〜6のいずれかに記載の情報処理装置。
【0199】
(付記10)
前記目標テーブル指定部が、同一の前記目標サンプル属性がサンプル属性として設定されている2以上の前記テーブルを、前記目標テーブルとして選択し、
前記サンプリング部が、選択された前記2以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
付記9に記載の情報処理装置。
【0200】
(付記11)
当該情報処理装置が、
前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、出力計算部を更に備えている、
付記1〜10のいずれかに記載の情報処理装置。
【0201】
(付記12)
データベースに含まれるデータのサンプリングを行うための情報処理方法であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
当該情報処理方法は、
(a)外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
(b)前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
(c)前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を有する、ことを特徴とする情報処理方法。
【0202】
(付記13)
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記(a)のステップにおいて、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
付記12に記載の情報処理方法。
【0203】
(付記14)
前記データベースが記憶装置の記憶領域に格納されており、
(d)前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、ステップを、更に有する、
付記12または13に記載の情報処理方法。
【0204】
(付記15)
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記(d)のステップにおいて、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
付記14に記載の情報処理方法。
【0205】
(付記16)
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記(d)のステップにおいて、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
付記14または15に記載の情報処理方法。
【0206】
(付記17)
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
付記12〜16のいずれかに記載の情報処理方法。
【0207】
(付記18)
前記(c)のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
付記12〜17のいずれかに記載の情報処理方法。
【0208】
(付記19)
前記(c)のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、付記18に記載の情報処理方法。
【0209】
(付記20)
(e)前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを更に有し、
前記(c)のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
付記12〜17のいずれかに記載の情報処理方法。
【0210】
(付記21)
前記(e)のステップにおいて、同一の前記目標サンプル属性がサンプル属性として設定されている2以上の前記テーブルを、前記目標テーブルとして選択し、
前記(c)のステップにおいて、選択された前記2以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
付記20に記載の情報処理方法。
【0211】
(付記22)
(f)前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、ステップを更に有している、
付記12〜21のいずれかに記載の情報処理方法。
【0212】
(付記23)
コンピュータによって、データベースに含まれるデータのサンプリングを行うためのプログラム
であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
前記コンピュータに、
(a)外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
(b)前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
(c)前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を実行させる命令を含む
プログラム
。
【0213】
(付記24)
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記(a)のステップにおいて、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
付記23に記載の
プログラム。
【0214】
(付記25)
前記データベースが記憶装置の記憶領域に格納されており、
前記プログラムが、前記コンピュータに、
(d)前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、ステップを実行させる命令を更に含む、
付記23または24に記載の
プログラム。
【0215】
(付記26)
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記(d)のステップにおいて、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
付記25に記載の
プログラム。
【0216】
(付記27)
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記(d)のステップにおいて、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
付記25または26に記載の
プログラム。
【0217】
(付記28)
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
付記23〜27のいずれかに記載の
プログラム。
【0218】
(付記29)
前記(c)のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
付記23〜28のいずれかに記載の
プログラム。
【0219】
(付記30)
前記(c)のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、付記29に記載の
プログラム。
【0220】
(付記31)
前記プログラムが、前記コンピュータに、
(e)前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを実行させる命令を更に含み、
前記(c)のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
付記23〜28のいずれかに記載の
プログラム。
【0221】
(付記32)
前記(e)のステップにおいて、同一の前記目標サンプル属性がサンプル属性として設定されている2以上の前記テーブルを、前記目標テーブルとして選択し、
前記(c)のステップにおいて、選択された前記2以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
付記31に記載の
プログラム。
【0222】
(付記33)
前記プログラムが、前記コンピュータに、
(f)前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、ステップを実行させる命令を更に含む、
付記23〜32のいずれかに記載の
プログラム。
【0223】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0224】
この出願は、2016年2月5日に出願された日本出願特願2016−021198を基礎とする優先権を主張し、その開示の全てをここに取り込む。