(57)【要約】  データベース２００では、テーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、レコードには、サンプル属性の値から計算されたハッシュ値がレベルとして設定されている。情報処理装置１００は、入力データからサンプル属性を指定する目標サンプル属性指定部１１と、入力データからサンプル条件を特定するサンプル条件特定部１２と、サンプルに包含されるレコードが満たすレベル条件を設定し、レベル条件を満たすレコードを取得して前記サンプルに包含させ、サンプル条件が満たされていない場合に目標レベルを変更して再度レコードを取得するサンプリング部１３とを備えている。
2017135264.tif 000002
【特許請求の範囲】
【請求項１】
データベースに含まれるデータのサンプリングを行うための情報処理装置であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定され、
当該情報処理装置は、
外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、目標サンプル属性指定部と、
前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、サンプル条件特定部と、
前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
サンプリング部と、
を備えている、ことを特徴とする情報処理装置。
【請求項２】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記目標サンプル属性指定部が、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
請求項１に記載の情報処理装置。
【請求項３】
前記データベースが記憶装置の記憶領域に格納されており、
当該情報処理装置が、
前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、データベース管理部を、更に備えている、
請求項１または２に記載の情報処理装置。
【請求項４】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記データベース管理部が、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
請求項３に記載の情報処理装置。
【請求項５】
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記データベース管理部が、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
請求項３または４に記載の情報処理装置。
【請求項６】
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
請求項１〜５のいずれかに記載の情報処理装置。
【請求項７】
前記サンプリング部が、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
請求項１〜６のいずれかに記載の情報処理装置。
【請求項８】
前記サンプリング部が、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、請求項７に記載の情報処理装置。
【請求項９】
前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、目標テーブル指定部を更に備え、
前記サンプリング部は、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
請求項１〜６のいずれかに記載の情報処理装置。
【請求項１０】
前記目標テーブル指定部が、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記サンプリング部が、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
請求項９に記載の情報処理装置。
【請求項１１】
当該情報処理装置が、
前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、出力計算部を更に備えている、
請求項１〜１０のいずれかに記載の情報処理装置。
【請求項１２】
データベースに含まれるデータのサンプリングを行うための情報処理方法であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
当該情報処理方法は、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を有する、ことを特徴とする情報処理方法。
【請求項１３】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ａ）のステップにおいて、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
請求項１２に記載の情報処理方法。
【請求項１４】
前記データベースが記憶装置の記憶領域に格納されており、
（ｄ）前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、ステップを、更に有する、
請求項１２または１３に記載の情報処理方法。
【請求項１５】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ｄ）のステップにおいて、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
請求項１４に記載の情報処理方法。
【請求項１６】
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記（ｄ）のステップにおいて、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
請求項１４または１５に記載の情報処理方法。
【請求項１７】
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
請求項１２〜１６のいずれかに記載の情報処理方法。
【請求項１８】
前記（ｃ）のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
請求項１２〜１７のいずれかに記載の情報処理方法。
【請求項１９】
前記（ｃ）のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、請求項１８に記載の情報処理方法。
【請求項２０】
（ｅ）前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを更に有し、
前記（ｃ）のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
請求項１２〜１７のいずれかに記載の情報処理方法。
【請求項２１】
前記（ｅ）のステップにおいて、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記（ｃ）のステップにおいて、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
請求項２０に記載の情報処理方法。
【請求項２２】
（ｆ）前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、ステップを更に有している、
請求項１２〜２１のいずれかに記載の情報処理方法。
【請求項２３】
コンピュータによって、データベースに含まれるデータのサンプリングを行うためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
前記コンピュータに、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を実行させる命令を含む、プログラムを記録している、コンピュータ読み取り可能な記録媒体。
【請求項２４】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ａ）のステップにおいて、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
請求項２３に記載のコンピュータ読み取り可能な記録媒体。
【請求項２５】
前記データベースが記憶装置の記憶領域に格納されており、
前記プログラムが、前記コンピュータに、
（ｄ）前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、ステップを実行させる命令を更に含む、
請求項２３または２４に記載のコンピュータ読み取り可能な記録媒体。
【請求項２６】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ｄ）のステップにおいて、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
請求項２５に記載のコンピュータ読み取り可能な記録媒体。
【請求項２７】
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記（ｄ）のステップにおいて、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
請求項２５または２６に記載のコンピュータ読み取り可能な記録媒体。
【請求項２８】
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
請求項２３〜２７のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【請求項２９】
前記（ｃ）のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
請求項２３〜２８のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【請求項３０】
前記（ｃ）のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、請求項２９に記載のコンピュータ読み取り可能な記録媒体。
【請求項３１】
前記プログラムが、前記コンピュータに、
（ｅ）前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを実行させる命令を更に含み、
前記（ｃ）のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
請求項２３〜２８のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【請求項３２】
前記（ｅ）のステップにおいて、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記（ｃ）のステップにおいて、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
請求項３１に記載のコンピュータ読み取り可能な記録媒体。
【請求項３３】
前記プログラムが、前記コンピュータに、
（ｆ）前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、ステップを実行させる命令を更に含む、
請求項２３〜３２のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及びこれらを実現するためのプログラムを記録したコンピュータ読み取り可能な記録媒体に関し、特には、データベースに含まれるデータのサンプリングを行うための、情報処理装置、情報処理方法、及びコンピュータ読み取り可能な記録媒体に関する。
【背景技術】
【０００２】
データベース管理システム（ＤＢＭＳ：Data Base Management System）は、外部からの要求に応じてデータベースの操作を行うシステムであり、データベースに含まれるデータを出力する機能を備えている。具体的には、ＤＢＭＳは、外部からクエリを入力として受け付け、クエリで指定された条件に合致するデータを抽出し、抽出したデータを出力する。クエリに集計方法の指定があれば、ＤＢＭＳは、データを集計して集計結果を出力する。【０００３】
ところで、近年、データベースに格納されるレコードの数が大規模化しており、結果を高速に出力することが困難になっている。このため、データベースを保持している記憶装置から、全てのレコードを読み出すには多くの時間がかかり、クエリへの応答速度が遅くなっている。【０００４】
この問題を解決するため、テーブルに含まれるレコードを確率的に取得することでサンプルを作成する方法が知られている。代表的な例は、ベルヌーイ・サンプリングである。ベルヌーイ・サンプリングにおいては、テーブルの各レコードについて、乱数を発生させ、乱数が閾値以下であればサンプルに入れることを繰り返す。【０００５】
このように、テーブルに含まれるレコードを確率的に取得することは、統計学の用語を用いれば、「レコードを要素とする集合を母集団として、母集団の要素であるレコードを確率的に選ぶことによって、新たにレコードを要素とする部分集合であるサンプルを生成する」ことに等しい。【０００６】
しかし、データ分析においては、母集団の要素がひとつのレコードであるような単純なサンプリングだけではなく、母集団の要素が複数のレコードに対応するような複雑なサンプリングが必要になる。【０００７】
たとえば、顧客の注文を記録したテーブルがあり、このテーブルのひとつのレコードはひとつの注文を表すとする。それぞれのレコードは、その注文を出した顧客の識別子を記録している。そして、何回も注文している顧客もいれば、１回しか注文していない顧客もいるとする。この場合、ある顧客を表す識別子は複数のレコードに出現しており、別の顧客を表す識別子はひとつのレコードにしか出現していない、という状況が発生する。【０００８】
そして、上述の顧客の注文を記録したテーブルから、顧客一人当たりの注文数の平均を推定したいとする。このとき、ベルヌーイ・サンプリングのように、レコードを等確率に取得したサンプルからは、正確に顧客の注文数の平均を推定することはできない。何故なら、注文数が多い顧客のレコードは選ばれやすく、注文数が少ない顧客のレコードは選ばれにくい。つまり、顧客の選ばれる確率に偏りがあるからである。また、同一顧客が出した複数の注文のうち一部しかサンプルに含まれないため、サンプルだけを見ても一人あたりの注文数が分からないためである。【０００９】
このように、レコードを等確率に取得したサンプルでは、複数のレコードに出現する要素を母集団とするサンプルとは見なせず、統計的な性質を正しく推定できない。【００１０】
この問題を解決するには、複数のレコードに出現する要素を、等確率に取得する手法が必要である。すなわち、レコードを等確率に取得するのではなく、テーブル中に出現する顧客を等確率に選択してから、選択された顧客に関するレコードを全て抽出することが必要である。こうして抽出されたレコードを顧客ごとにまとめて平均値を取れば、顧客一人当たりの注文数の平均を正しく推定できる。何故なら、顧客が選ばれる確率は、注文数に関係なく一定だからである。これは、レコードの集合ではなく、顧客の集合を母集団とするサンプリングである。【００１１】
ところで、特許文献１は、複数のレコードに対応する要素の集合を母集団としてサンプリングする手法の一例を開示している。特許文献１に開示された手法では、特定の属性に着目し、データベースのテーブルに含まれる全てのレコードをスキャンしながら、各レコードに含まれる属性値のハッシュ値が計算される。そして、ハッシュ値が閾値を超えたときにのみ、レコードはサンプルに含められる。サンプルに含まれるレコードの数が大きくなりすぎた場合は、閾値を変更してサンプルの一部を捨てることで、サンプルの大きさは一定以内に収められる。【００１２】
このように、特許文献１に開示された手法によれば、属性値のハッシュ値が閾値を超えるレコードは、全て、サンプルに含められることになるため、レコードではなく、属性値の集合を母集団とするサンプリングを正しく実現できる。すなわち、属性値が等確率に選択され、選ばれた属性値を持つレコードは全てサンプルに含まれる、という状態が実現される。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】米国特許第７０４７２３０号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１４】
上述した特許文献１に開示された手法によれば、一つ以上のレコードに対応する要素の集合を母集団とするサンプリングを実現できる。しかしながら、特許文献１に開示された手法を用いても、サンプルを作成するためにはテーブルの全レコードをスキャンする必要があり、サンプルの作成は低速となってしまう。【００１５】
一方、特許文献１には、事前にサンプルを作成しておいて、外部からクエリが入力された際にそのサンプルを用いてクエリに応答する手法についても開示されている。しかしながら、事前にサンプルを作成する手法では、外部から入力されたクエリの条件に適合するサンプルが存在しない場合、高速に応答することが不可能である。更に、様々なクエリに応答できるように、様々な種類のサンプルを事前に用意しておこうとすると、保存すべきデータ量が増大してストレージ容量を浪費してしまう。【００１６】
本発明の目的の一例は、上記問題を解消し、母集団の少なくともひとつの要素が複数のレコードに関連付けられているデータベースにおいて、クエリの条件に適合するサンプリングを高速に実行し得る、情報処理装置、情報処理方法、及びコンピュータ読み取り可能な記録媒体を提供することにある。
【課題を解決するための手段】
【００１７】
上記目的を達成するため、本発明の一側面における情報処理装置は、データベースに含まれるデータのサンプリングを行うための情報処理装置であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定され、
当該情報処理装置は、
外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、目標サンプル属性指定部と、
前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、サンプル条件特定部と、
前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
サンプリング部と、
を備えている、ことを特徴とする。【００１８】
また、上記目的を達成するため、本発明の一側面における情報処理方法は、データベースに含まれるデータのサンプリングを行うための情報処理方法であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
当該情報処理方法は、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を有する、ことを特徴とする。【００１９】
更に、上記目的を達成するため、本発明の一側面におけるコンピュータ読み取り可能な記録媒体は、コンピュータによって、データベースに含まれるデータのサンプリングを行うためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
前記コンピュータに、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を実行させる命令を含む、プログラムを記録している、ことを特徴とする。
【発明の効果】
【００２０】
以上のように、本発明によれば、母集団の少なくともひとつの要素が複数のレコードに関連付けられているデータベースにおいて、クエリの条件に適合するサンプリングを高速に実行することができる。
【図面の簡単な説明】
【００２１】
【図１】図１は、本発明の実施の形態における情報処理装置の概略構成を示すブロック図である。
【図２】図２は、本発明の実施の形態における情報処理装置の具体的構成を示すブロック図である。
【図３】図３は、本発明の実施の形態において集計対象となるデータベースの一例を示す図である。
【図４】図４は、本発明の実施の形態で用いるハッシュ関数による入出力の一例を示す図である。
【図５】図５は、図３に示したデータベースのテーブルを分割して得られるバケットの一例を示す。
【図６】図６は、図３に示したデータベースのテーブルを分割して得られるバケットの他の例を示す。
【図７】図７は、本発明の実施の形態における情報処理装置の動作を示すフロー図である。
【図８】図８は、本発明の実施の形態で用いられる入力データの一例を示す図である。
【図９】図９は、本発明の実施の形態で用いられるビューの一例を示す図である。
【図１０】図１０は、本発明の実施の形態で用いられるビューの他の例を示す図である。
【図１１】図１１は、本発明の実施の形態で用いられるビューの他の例を示す図である。
【図１２】図１２は、本発明の実施の形態で用いられるビューの他の例を示す図である。
【図１３】図１３は、本発明の実施の形態で用いられるサンプル条件クエリの一例を示す図である。
【図１４】図１４は、本発明の実施の形態において出力計算部が作成するクエリの一例を示す図である。
【図１５】図１５は、本実施の形態における情報処理装置によるサンプリングが処理するレコードの数を概念的に示す図である。
【図１６】図１６は、本発明の実施の形態における情報処理装置を実現するコンピュータの一例を示すブロック図である。
【発明を実施するための形態】
【００２２】
（実施の形態）
本発明の実施の形態における、情報処理装置、情報処理方法、及びプログラムについて、図１〜図１６を参照しながら説明する。
【００２３】
［装置構成］
最初に、本実施の形態における情報処理装置の概略構成について図１を用いて説明する。図１は、本発明の実施の形態における情報処理装置の概略構成を示すブロック図である。
【００２４】
図１に示すように、情報処理装置１００は、データベース２００に含まれるデータのサンプリングを行うための装置である。
【００２５】
データベース２００においては、それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できる、サンプル属性が設定されている。更に、テーブルに含まれるレコードには、当該レコードに含まれるサンプル属性の値から計算されたハッシュ値が、サンプル属性のレベルとして設定されている。
【００２６】
また、図１に示すように、情報処理装置１００は、目標サンプル属性指定部１１と、サンプル条件特定部１２と、サンプリング部１３とを備えている。
【００２７】
目標サンプル属性指定部１１は、外部から入力された入力データに基づいて目標サンプル属性として、母集団を構成する要素を表す属性として指定できるサンプル属性を指定する。目標サンプル属性は、サンプリングにおいて母集団を構成する要素を表している。
【００２８】
サンプル条件特定部１２は、入力データに基づいて、サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する。
【００２９】
サンプリング部１３は、まず、サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、サンプルに包含されるレコードが満たす条件であるレベル条件を設定する。続いて、サンプリング部１３は、テーブルに含まれるレコードのうち、目標サンプル属性のレベルがレベル条件を満たすレコードを取得し、これをサンプルに包含させる。
【００３０】
加えて、サンプリング部１３は、サンプルについて、サンプル条件が満たされているかどうかを判定し、判定の結果、サンプル条件が満たされていない場合は、目標レベルを変更して、再度、前記レコードを取得する。
【００３１】
このように、本実施の形態では、テーブルにサンプル属性が設定され、各レコードにはサンプル属性のレベルが設定されている。従って、入力データに基づいて、目標サンプル属性が指定されたとき、目標サンプル属性のレベルがレベル条件を満たすレコードを、サンプル条件が満たされるまで取り出すことで、十分なサンプルが得られるので、レベル条件を満たさないレコードをチェックする必要がない。つまり、本実施の形態によれば、母集団の少なくともひとつの要素が複数のレコードに関連付けられているデータベースにおいて、クエリの条件に適合するサンプリングを高速に実行し得る。
【００３２】
続いて、図２を用いて、本実施の形態における情報処理装置の構成についてより具体的に説明する。図２は、本発明の実施の形態における情報処理装置の具体的構成を示すブロック図である。
【００３３】
図２に示すように、本実施の形態においては、情報処理装置１００は、処理実行部１０と、データベース管理部２０と、データベース記憶部３０とを備えている。処理実行部１０は、上述した目標サンプル属性指定部１１、サンプル条件特定部１２、及びサンプリング部１３を備えており、これらによって構築されている。処理実行部１０については後述する。
【００３４】
データベース記憶部３０は、集計対象となるデータベース２００を記憶する。具体的には、データベース記憶部３０は、ハードディスク等の記憶装置によって構築されており、データベース２００は、記憶装置の記憶領域に格納されている。また、データベース２００はテーブルの集合であり、各テーブルはレコードの集合である。
【００３５】
本実施の形態では、上述したように、データベース２００に含まれる一つ以上のテーブルについて、サンプリングの対象として指定できる一つ以上の属性が、あらかじめ定められている。本実施の形態では、これらの属性を「サンプル属性」と表記する。
【００３６】
サンプル属性のひとつの値は、サンプリングの母集団のひとつの要素を表す。また、サンプル属性の値の異なり数は、サンプリングの母集団として用いるほど十分に大きいものとする。
【００３７】
本実施の形態では、同一のサンプル属性が、データベース２００に含まれている複数のテーブルに含まれていてもよい。また、サンプル属性を含まないテーブルがデータベースに含まれていてもよい。
【００３８】
また、本実施の形態において、情報処理装置１００は、外部から入力データが入力された際に、そのデータに基づいて、サンプル属性の中から一つを選択し、選択されたサンプル属性の値を要素とする母集団からのサンプリングを実現する。すなわち、そのサンプル属性の値がランダムに選ばれ、その値を持つレコードのうち入力データに指定された条件を満たすレコードがサンプルを表すテーブルに含まれる。
【００３９】
サンプル属性の値は、レコードに対して付与される値であれば、どのような種類の値でもよい。レコードの一部としてデータベースに明示的に記録されている値のほかに、それらの値に基づいて算出される何らかの値でもよい。たとえば、レコードが属性Ａと属性Ｂとを有する場合であれば、属性Ａと属性Ｂとから算出される値が、サンプル属性の値として用いられていてもよい。
【００４０】
レコードがデータベースに挿入されるたびに、レコードの内容とは独立した乱数が計算され、その値がサンプル属性の値として設定されてもよい。この場合、サンプル属性の値を要素とするサンプリングは、レコードを要素とするサンプリングに等しくなる。
【００４１】
後述するように、サンプル属性の値は、値から計算されるレベルに基づいてレコードの配置を決定する際に用いられる。そのため、レコードの配置さえ決定できるのであれば、サンプル属性の値そのものがデータベースに記録されている必要はない。
【００４２】
図３は、本発明の実施の形態において集計対象となるデータベースの一例を示す図である。図３の例では、サンプル属性に「＊」をつけることで、サンプル属性を他の属性から区別している。この例では、データベースは「ＯＲＤＥＲＳ」と「ＣＵＳＴＯＭＥＲ」との２つのテーブルを備えている。図３に示すように、ＯＲＤＥＲＳは３つのサンプル属性を含み、ＣＵＳＴＯＭＥＲは２つのサンプル属性を含む。ＯＲＤＥＲＳは、注文を表すテーブルである。ＯＲＤＥＲＫＥＹは注文を表す識別子であり、ＣＵＳＴＫＥＹは顧客を表す識別子であり、ＨＯＵＳＥＨＯＬＤＫＥＹは顧客が所属する世帯を表す識別子である。ＰＲＩＣＥはその注文で支払われた金額を表す。ＮＡＴＩＯＮは顧客の住む国を表す。
【００４３】
図３に示すデータベース２００を記録している情報処理装置１００は、例えば、外部入力データに基づいてサンプリングの対象としてＣＵＳＴＫＥＹが選択されると、顧客を母集団の要素とするサンプリングを行う。このデータベースにはＣＵＳＴＫＥＹ＝１からＣＵＳＴＫＥＹ＝１０までの１０人の顧客が登場しているが、この１０人がそれぞれ等確率で選択され、選択された顧客に関するレコードのうち、外部入力データに指定された条件を満たす全てのレコードがサンプルに包含される。
【００４４】
同様に、外部入力データにおいてＯＲＤＥＲＫＥＹが選択されていれば、情報処理装置１００は、注文を母集団の要素とするサンプリングを行い、ＨＯＵＳＥＨＯＬＤＫＥＹが選択されていれば、世帯を母集団の要素とするサンプリングを行う。
【００４５】
ＯＲＤＥＲＳ及びＣＵＳＴＯＭＥＲという２つのテーブルは、ＣＵＳＴＫＥＹ及びＨＯＵＳＥＨＯＬＤＫＥＹという２つのサンプル属性を共有している。一方、ＯＲＤＥＲＫＥＹというサンプル属性は、ＯＲＤＥＲＳにのみ含まれている。このように、テーブル間で同じサンプル属性が共有されていてもよいし、テーブルごとに異なるサンプル属性が含まれていてもよい。
【００４６】
データベース記憶部３０は、データベース２００の各テーブルに含まれるレコードを、さらに小さな集合に分けて取り扱うことができる。本実施の形態では、この小さな集合を「バケット」と表記する。テーブルに含まれる全てのレコードは、いずれかのバケットに割り当てられる。このバケットは、データベース記憶部３０において、データの配置を決めるために使われる。
【００４７】
より具体的には、本実施の形態では、同じバケットに含まれるレコードは近接して配置される。近接して配置されるとは、たとえば、同じバケットに属するレコードがハードディスク上で同じブロックに配置されることを意味する。
【００４８】
後述するように、情報処理装置１００は、テーブルに関する入力データ（クエリ）を受けつけるが、内部ではレコードがバケットに分かれていることを利用してサンプリングと集計とが実行される。本実施の形態では、同じバケットに含まれるレコードは近接して配置されているため、同じバケットに含まれる複数のレコードを取得する処理は高速に実行される。このことを利用して、より高速なサンプリングが実現される。
【００４９】
レコードが所属するバケットは、レコードが含む一つ以上のサンプル属性のレベルによって決定される。この点について、以下に詳しく説明する。
【００５０】
サンプル属性が取る個々の値は、ひとつのレベルに関連づけられている。このレベルは、上述した「サンプル属性のレベル」に該当する。また、サンプル属性のレベルとしては、特殊なハッシュ関数にサンプル属性の値を入力したときに出力される、ハッシュ値が用いられる。
【００５１】
ハッシュ関数としては、データベース２００において、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数が挙げられる。ハッシュ関数の具体例としては、サンプル属性の値が入力されたときに、値に応じて、［０，Ｌ−１］の範囲にあるＬ個の整数のいずれかを、下記の数１に示す確率で割り当て、割り当てた整数を出力する、ハッシュ関数が挙げられる。Ｌは、レベルの数を指定する定数である。また、下記の数１において、Ｂは正の定数である。
【００５２】
【数１】
2017135264.tif 000003
【００５３】
また、本実施の形態では、ハッシュ関数は、レベルが上がるごとに、値が割り当てられる確率が減少していくように設定されている。従って、サンプル属性値が、レベル０に割り当てられる確率を基準にすると、レベル１に割り当てられる確率はＢ分の１となり、レベル２に割り当てられる確率はさらにそのＢ分の１となる。
【００５４】
また、上記数１に示す条件を満たすハッシュ関数として、たとえば、特許文献１において使用している“ｄｉｅ−ｈａｓｈ”というハッシュ関数を用いてもよい。
【００５５】
図４は、本発明の実施の形態で用いるハッシュ関数による入出力の一例を示す図である。図４の例では、Ｌ＝３、Ｂ＝２であるときに、サンプル属性値として１から１６までの整数が入力された場合に、割り当てられるレベルの例を示している。図４の例では、サンプル属性の値は、低いレベルに割り当てられる確率が高く、高いレベルに割り当てられる確率は低くなっている。
【００５６】
また、図４の例では、サンプル属性値として整数が用いられているが、サンプル属性値は整数以外の値、たとえば文字列などであってもよい。その場合、ハッシュ関数としては、文字列を入力として整数を出力するハッシュ関数が用いられればよい。
【００５７】
更に、サンプル属性ごとに、異なるハッシュ関数が用いられてもよい。たとえば、ＣＵＳＴＫＥＹのレベルを計算するときと、ＯＲＤＥＲＫＥＹのレベルを計算するときとで、異なるハッシュ関数が用いられてもよい。
【００５８】
但し、複数のテーブルにおいて、同一のサンプル属性のレベルを計算する場合には、どのテーブルについても同一のハッシュ関数が用いられるものとする。理由は以下の通りである。まず、本実施の形態においては、同一のレベルを持つレコードがサンプルに含まれるようにサンプリングが行われる。そして、各テーブルにおいて、同一のハッシュ関数を用いてレベルを決めるようにすれば、異なるテーブルに含まれている、そのサンプル属性について同じ値を持つレコードが、必ずサンプルに含まれることが保証されるからである。
【００５９】
また、各レコードに複数のサンプル属性が含まれている場合は、それぞれのレコードには、レコードに含まれるサンプル属性毎に、当該サンプル属性の値に対応するレベルが割り当てられる。ここで、レコードが含む複数のサンプル属性それぞれの値に対応するレベルを、ある一定の順序で並べたものを「レベルの配列」と表記する。このレベルの配列によって、レコードが割り当てられるバケットが定められる。
【００６０】
たとえば、図３に示したＯＲＤＥＲＳの３行目のレコードでは、複数のサンプル属性は、「（ＯＲＤＥＲＫＥＹ，ＣＵＳＴＫＥＹ，ＨＯＵＳＥＨＯＬＤＫＥＹ）＝（３，２，１）」である。この場合、それぞれに対して、図４に示すハッシュ関数を用いてレベルを計算すると、レベルの配列として「（ＯＲＤＥＲＫＥＹのレベル，ＣＵＳＴＫＥＹのレベル，ＨＯＵＳＥＨＯＬＤＫＥＹのレベル）＝（０，１，０）」が得られる。このレベルの配列を用いて、このレコードが所属するバケットが決定される。
【００６１】
本実施の形態では、テーブルを分割して得られる各バケットは、テーブルのレコードが持つレベル配列に対応して用意されている。
【００６２】
但し、本実施の形態においては、レベル配列に含まれるレベルの和が、事前に定められた閾値θ以上となるとき、このレコードはトップバケットと呼ばれる特殊なバケットに割り当てられるものとする。このように定めることで、レコード数が小さいバケットを減らして、サンプリングを高速化する効果がある。
【００６３】
トップバケットの利点について詳細に説明する。レベル配列のレベルの和が大きいとき、レコードがそのレベル配列に割り当てられる確率は低くなる。すると、レコード数が小さいバケットが大量にできてしまう。これらの小さなバケットに個別にアクセスすると集計速度が遅くなる。しかし、このような小さなバケットをひとつのバケットに集約し、一度にまとめてアクセスされるようにすれば、大量のアクセスが発生せずに高速化される。これがトップバケットの利点である。
【００６４】
テーブルの属性のうち、ひとつ以上が、レコードの配置を制御するためのクラスタ属性として指定されていてもよい。その場合、バケットに含まれるレコードは、クラスタ属性の順番でソートされて配置されている。クラスタ属性としては、たとえば、レコードの時系列順序を表す属性を用いることができる。
【００６５】
テーブルのバケットへの分割について、図３及び図４に加えて、更に図５に示す例を用いて説明する。図５は、図３に示したデータベースのテーブルを分割して得られるバケットの一例を示す。図６は、図３に示したデータベースのテーブルを分割して得られるバケットの他の例を示す。
【００６６】
図５及び図６の例では、Ｌ＝３およびθ＝３とする。すなわち、レベルは０，１，２のいずれかであり、レベル配列の和が３以上であればトップバケットに保存される。レベルは図４に示したハッシュ関数を用いて計算されている。
【００６７】
図５の例では、それぞれのバケットがひとつのテーブルとして表現されている。「ＯＲＤＥＲＳ＿ＢＵＣＫＥＴ＿０＿０＿０」は、ＯＲＤＥＲＳから、レベル配列が（０，０，０）となるレコードのみを抽出することで得られるバケットである。他のバケットも同様の命名規則に基づく。
【００６８】
「ＯＲＤＥＲＳ＿ＢＵＣＫＥＴ＿ＴＯＰ」は、ＯＲＤＥＲＳから得られるトップバケットである。このトップバケットには、新たな属性として、ＯＲＤＥＲＫＥＹのレベルを表すＯＲＤＥＲＫＥＹＬＥＶＥＬ、ＣＵＳＴＫＥＹのレベルを表すＣＵＳＴＫＥＹＬＥＶＥＬ、ＨＯＵＳＥＨＯＬＤＫＥＹのレベルを表すＨＯＵＳＥＨＯＬＤＫＥＹＬＥＶＥＬが追加されている。トップバケットに含まれるレコードは、それぞれ異なるレベルを持つため、各レコードには、明示的にレベルを表す属性が追加されている。
【００６９】
図６の例では、図５に示したＯＲＤＥＲＳと同様に、ＣＵＳＴＯＭＥＲのバケットが示されている。ＣＵＳＴＯＭＥＲは、２つのサンプル属性しか持たないため、レベル配列の長さも２つである。
【００７０】
図３に示したテーブルは、情報処理装置１００に対して外部から問い合わせを行う際の論理的なビューである。一方、図５及び図６に示したバケットは、情報処理装置１００内部でのレコードの配置を定めるために使われる。
【００７１】
上述したように、データベース記憶部３０においては、同じバケットに含まれるレコードが近接して配置される。これにより、同じバケットに含まれるレコードは同時に高速に取得される。このように配置することで、ひとつのバケットに含まれるレコードを少ないアクセス回数で取得することができる。
【００７２】
この近接性を実現するには、最も単純には、同じバケットに含まれるレコードが記憶領域上に並べて配置されていればよい。あるバケットのレコードがほしいとき、そのバケットのレコードを含む一連のブロックをまとめて入出力することで、同じバケットのレコードを同時に取得できる。
【００７３】
また、ひとつのバケットに含まれるレコードは、記憶領域上で厳密に連続していなくてもよい。ひとつのバケットに含まれるレコードは、複数のデータベース記憶部（記憶装置）３０に分散して記憶されていてもよい。ひとつのバケットに含まれるレコードについて、ある程度まとめてアクセスすることができれば、高速化の効果を得るには十分である。また、図２の例では、データベース記憶部３０は、情報処理装置１００に備えられているが、本実施の形態では、データベース記憶部３０は、情報処理装置１００とは別のサーバ装置に構築されていても良い。この場合では、ひとつのバケットに含まれるレコードは、複数のサーバに分散して記憶されている。
【００７４】
特に、クラスタ属性が定義されている場合は、同じバケットの中でクラスタ属性が近いレコードは、記憶領域上で近くに配置されているのがよい。この場合、全てのレコードは、ソートされ、クラスタ属性の順番で並べて配置される。
【００７５】
また、テーブルが複数のサンプル属性を有するとき、そのテーブルを分割して得られる個々のバケットは、独立してサンプルとして用いられることはない。何故なら、同じサンプル属性の値を持つレコードが、複数のバケットに分散して存在するからである。たとえば、図５の例では、ＣＵＳＴＫＥＹ＝３が示す顧客の注文が、複数のバケットに分散している。つまり、それぞれのバケットは、同じ顧客の注文の一部しか含まないため、顧客を要素とする母集団からのサンプルと見なすことができない。同様に、他のサンプル属性に関しても、正しいサンプルとは見なせない。
【００７６】
後述するように、本実施の形態においては、入力データに基づいて指定された目標サンプル属性に応じて、同一のレベルに対応する複数のバケットを統合することで、目標サンプル属性に関する正しいサンプルとして使うことができるサンプルテーブルが作成される。個々のバケットは、サンプルと見なすことはできないが、指定された目標サンプル属性に応じて複数のバケットを統合することで、目標サンプル属性に関する正しいサンプルを作成できるのである。
【００７７】
本実施の形態では、データベース管理部２０が、上述の方法によって、データベース記憶部３０の記憶領域におけるレコードそれぞれの配置を、当該レコードが含むサンプル属性のレベルに基づいて決定する。即ち、データベース管理部２０によって、各レコードは当該レコードが含むサンプル属性のレベルに基づいて所属するバケットが決定され、同じバケットに含まれるレコードは近接して配置される。
【００７８】
更に、データベース２００において、複数のサンプル属性が設定されている場合は、データベース管理部２０は、レコード毎に、複数のサンプル属性のレベルの合計を求める。そして、データベース管理部２０は、求めた合計が閾値を超えないレコードについては、当該レコードが含むサンプル属性のレベルの個々の値に基づいて配置を決定し、求めた合計が閾値を超えるレコードについては、合計に基づいて配置を決定する。即ち、求めた合計が閾値を超えないレコードについては、トップバケット以外のバケットに所属させ、求めた合計が閾値を超えるレコードについては、トップバケットに所属させる。
【００７９】
また、データベース管理部２０は、データベース記憶部３０に記録されたデータベース２００に対して問い合わせを実行する。具体的には、データベース管理部２０は、処理実行部１０からクエリを入力として受付け、データベース記憶部３０からレコードを取得して計算を行い、計算結果を処理実行部１０に出力する。
【００８０】
本実施の形態では、処理実行部１０からデータベース管理部２０に入力されるクエリは、ＳＱＬを用いて記述されているものとする。ただし、本発明の範囲は、ＳＱＬに限定されるものではない。たとえば、本実施の形態においては、クエリは、ＳＱＬを独自に拡張したデータベース言語を用いて記述されていてもよい。また、メモリ上のデータ構造への参照を渡すことで問い合わせが実現されていてもよい。
【００８１】
本実施の形態では、データベース記憶部３０及びデータベース管理部２０は、既存のＤＢＭＳを用いて実現することができる。このとき、情報処理装置１００全体は、既存のＤＢＭＳをバックエンドに持つ新たなＤＢＭＳとして機能する。そしてこのバックエンドＤＢＭＳは、レコードをバケットごとにまとめて記録するための、情報処理装置１００の部分構造として動作する。このとき処理実行部１０は、外部から入力データを受け取って、それをバックエンドＤＢＭＳへのクエリに書き換える、中継役として動作する。
【００８２】
バックエンドＤＢＭＳは、レコードをバケットごとに近接して記録することができれば、どのようにレコードを記録していても構わない。たとえば、ひとつのバケットをバックエンドＤＢＭＳにおける一つのテーブルとして実現することができる。図５に示す例を用いれば、図５に示す各バケットが、バックエンドＤＢＭＳにおけるテーブルとして記録される。
【００８３】
また、複数のバケットをバックエンドＤＢＭＳにおけるひとつのテーブルとして実現してもよい。たとえば、クラスタ属性を指定できるＤＢＭＳをバックエンドＤＢＭＳとして用いて、バケットを示すための属性を新たに追加して、この属性をクラスタ属性としてバックエンドＤＢＭＳに登録すると、同じバケットに含まれるレコードが自動的に近接して配置されるため、同様の近接性を実現できる。このとき、クエリでバケットを示す属性を指定することで、同じバケットに含まれるレコードを一度に取得することができる。元のデータベースにおいてクラスタ属性が設定されている場合、そのクラスタ属性を、バックエンドDBMSにおける二次的なクラスタ属性として用いることができる。すなわち、各レコードはバケットを示す属性でソートされることでバケットに分割され、同じバケットに属する複数のレコードは元のデータベースにおけるクラスタ属性でソートされる。
【００８４】
以下の説明では、ひとつのバケットが、バックエンドＤＢＭＳにおけるひとつのテーブルとして記録されているものとして説明する。
【００８５】
図３、図５及び図６の例を用いて説明する。本実施の形態では、情報処理装置１００がＤＢＭＳとして管理するテーブルは、図３に示した「ＯＲＤＥＲＳ」と「ＣＵＳＴＯＭＥＲ」との２つであるとする。一方、情報処理装置１００が内部に保持するバックエンドＤＢＭＳにおいては、図５及び図６に示した個々のバケットがそれぞれひとつのテーブルとして保持されている。
【００８６】
バックエンドＤＢＭＳは、単一のサーバで動作するＤＢＭＳでもよいし、複数のサーバを統合して作られた分散型ＤＢＭＳであってもよい。
【００８７】
処理実行部１０は、データベース記憶部３０に記録されたレコードに対する集計装置として動作する。処理実行部１０は、外部から入力データを受付け、この入力データを元に、新たなクエリを内部で生成して、データベース管理部２０に送信する。データベース管理部２０は、処理実行部１０から受信したクエリに基づいてデータベース記憶部３０に記録されたレコードを取得し、クエリの計算結果を処理実行部１０に送信する。処理実行部１０は、データベース管理部２０からクエリの計算結果を受け取ることで、入力データの結果を計算し、計算結果を外部に出力する。
【００８８】
また、図２に示すように、本実施の形態では、処理実行部１０は、目標サンプル属性指定部１１、サンプル条件特定部１２、及びサンプリング部１３に加えて、入力データ受付部１４と、目標テーブル指定部１５と、出力計算部１６とを備えている。
【００８９】
入力データ受付部１４は、外部から入力された入力データを受け付け、受付けた入力データを、目標サンプル属性指定部１１、サンプル条件特定部１２、及び目標テーブル指定部１５に入力する。
【００９０】
目標サンプル属性指定部１１は、入力データに基づき、サンプル属性の中の一つを目標サンプル属性として指定する。例えば、入力データに、「顧客１人当りの注文数の平均」を求めるクエリが含まれているとする。この場合は、目標サンプル属性指定部１１は、顧客キー（ＣＵＳＴＫＥＹ）を目標サンプル属性として指定する。
【００９１】
また、データベース２００において、複数のサンプル属性が設定されている場合は、目標サンプル属性指定部１１は、入力データに基づいて、複数のサンプル属性のうちの一つを目標サンプル属性として指定することもできる。
【００９２】
目標テーブル指定部１５は、データベース２００において、入力データに基づいて、複数のテーブルの中から、目標サンプル属性がサンプル属性として設定されているテーブルを、サンプリングの目標となる目標テーブルとして指定する。この場合、サンプリング部１３は、目標テーブルから取得されたレコードをサンプルに包含させる。
【００９３】
サンプル条件特定部１２は、上述したように、入力データに基づいて、サンプルが満たすべきサンプル条件を特定する。例えば、入力データに、「１０００人以上の顧客のデータを用いた１人当りの注文数の平均」を求めるクエリが含まれているとする。この場合、サンプル条件特定部１２は、「サンプルに含まれる顧客の数が１０００人以上」をサンプル条件として特定する。
【００９４】
サンプリング部１３は、本実施の形態では、サンプル条件が満たされるまでサンプルのサイズを変更する。つまり、サンプリング部１３は、初めに目標レベルを選択し、目標レベルに基づく条件をレベル条件として設定する。次に、サンプリング部１３は、目標テーブルに含まれるレコードのうち、目標サンプル属性のレベルがレベル条件を満たすレコードを取得し、取得したレコードをサンプルの一部とする。
【００９５】
次に、サンプリング部１３は、レベル条件を満たすレコードを、データベース記憶部２０の記憶領域から読み出し、それらのレコードの集合をサンプルテーブルとして、サンプルテーブルがサンプル条件を満たすかを判定する。この判定は、データベース管理部２０への問い合わせとして実現される。
【００９６】
更に、サンプリング部１３は、判定の結果、サンプル条件が満たされていない場合は、サンプルテーブルがサンプル条件を満たすまで、もしくは目標レベルが０に達するまで、目標レベルを変更して、データベース管理部２０に問い合わせを行う。一方、サンプリング部１３は、サンプル条件が満たされている場合は、出力計算部１６に、サンプル条件が満たされたことを通知する。
【００９７】
例えば、サンプリング部１３は、目標サンプル属性のレベルが目標レベルより大きいことを、レベル条件として設定することができる。この場合、サンプリング部１３は、目標サンプル属性のレベルが目標レベルより大きいレコードを取得して、これをサンプルに包含させる。また、サンプリング部１３は、判定の結果、サンプル条件が満たされていない場合に、目標レベルを値が小さくなるように変更して、再度、レコードを取得し、これをサンプルに包含させる。
【００９８】
出力計算部１６は、サンプル条件が満たされると、レベル条件とサンプル条件とを満たし、且つサンプルに包含されたレコードの集合を用いて、入力データに対する出力内容を計算する。また、出力計算部１６は、出力内容を、外部に出力する。
【００９９】
［装置動作］
次に、本発明の実施の形態における情報処理装置１００の動作について図７〜図１５を用いて説明する。図７は、本発明の実施の形態における情報処理装置の動作を示すフロー図である。また、以下の説明においては、適宜図１〜図６を参酌する。また、本実施の形態では、情報処理装置１００を動作させることによって、情報処理方法が実施される。よって、本実施の形態における情報処理方法の説明は、以下の情報処理装置１００の動作説明に代える。
【０１００】
図７に示すように、まず、入力データ受付部１４は、外部から入力された入力データを受付ける（ステップＡ１）。
【０１０１】
本実施の形態では、入力データは、サンプリングの方法を指定するデータである。入力データは、例えば、サンプリングの対象となる目標サンプル属性の指定、サンプリングの対象となる目標テーブルの指定、及びサンプルが満たすべきサンプル条件の指定を含むことができる。このとき、情報処理装置１００は、指定された目標サンプル属性について、サンプル条件を満たすまで、指定された目標テーブルのサンプリングを実施する。
【０１０２】
入力データは、たとえば、データベース言語で記述されたテキストデータであってもよい。この場合、テキストは、ＳＱＬを拡張した言語を用いて記述されていてもよいし、独自のデータベース言語を用いて記述されていてもよい。
【０１０３】
また、入力データは、データベース言語で記述されたテキストデータに限らず、サンプリングの方法を指定できるデータであれば、どのようなものでもよい。たとえば、サンプル属性の名称のリストがウェブアプリケーション上に表示されている場合であれば、ユーザがマウス等によって特定の名称を選択すると、この選択された名称が目標サンプル属性として指定される。このとき、指定された目標サンプル属性を特定するデータが、ウェブアプリケーションから、入力データとして入力される。
【０１０４】
図８は、本発明の実施の形態で用いられる入力データの一例を示す図である。図８に示す入力データは、ＳＱＬを拡張したデータベース言語で記述されたテキストデータである。図８の例においては、従来のＳＱＬに存在する句以外に、新たにＳＡＭＰＬＥ句とＵＮＴＩＬ句とが加わっている。このＳＡＭＰＬＥ句とＵＮＴＩＬ句とは、サンプリングの方法を指定するために独自に定義されたものである。
【０１０５】
ＳＡＭＰＬＥ句は、目標サンプル属性及び目標テーブルを指定するための句である。図８の例では、ＳＡＭＰＬＥ句は、ＣＵＳＴＫＥＹを目標サンプル属性として指定している。また、ＳＡＭＰＬＥ句は、ＯＲＤＥＲＳ及びＣＵＳＴＯＭＥＲを目標テーブルとして指定している。さらに、ＳＡＭＰＬＥ句は、ＡＳ句を用いて、ＯＲＤＥＲＳから得られるサンプルテーブルに、ＯＲＤＥＲＳ＿ＳＡＭＰＬＥという別名を付与し、ＣＵＳＴＯＭＥＲから得られるサンプルテーブルに、ＣＵＳＴＭＥＲ＿ＳＡＭＰＬＥという別名を付与している。
【０１０６】
ＷＩＴＨ句は、従来のＳＱＬに存在する句であり、サブクエリに別名を付与する機能を持つ。図８の例では、ＳＡＭＰＬＥ句で定義されたＯＲＤＥＲＳ＿ＳＡＭＰＬＥとＣＵＳＴＯＭＥＲ＿ＳＡＭＰＬＥとを、ＣＵＳＴＫＥＹで等価結合してＷＨＥＲＥ句でフィルタリングするサブクエリを定義し、ＪＯＩＮＥＤ＿ＴＡＢＬＥという別名を付与している。
【０１０７】
ＵＮＴＩＬ句は、サンプルが満たすべき条件であるサンプル条件を指定するための句である。ＳＡＭＰＬＥ句において定義されたサンプルテーブルは、サンプリングが進むにつれて少しずつ拡大される。そして、ＵＮＴＩＬ句に定義されたサンプル条件が満たされたとき、サンプリングを停止し、サンプルテーブルを用いて後続するＳＥＬＥＣＴ句を実行する。
【０１０８】
図８の例では、ＷＩＴＨ句で定義されたＪＯＩＮＥＤ＿ＴＡＢＬＥに含まれるＣＵＳＴＫＥＹの異なり数が１０００以上になる、というサンプル条件が指定されている。これは、即ち、ＪＯＩＮＥＤ＿ＴＡＢＬＥに１０００人以上の顧客のレコードが含まれたときサンプリングを停止して、後続するＳＥＬＥＣＴ  ＡＶＧ（ｓｕｍ）以降の集計が実行されることを意味している。
【０１０９】
以上の説明をまとめると、図８に示す外部入力データは、「２０１５−０１−０２から２０１５−０１−０８の期間に注文を行った、日本に住む顧客について、１０００人をサンプリングして、一人あたりの利用金額を合計し、さらに平均をとって出力する」という集計を意味する。
【０１１０】
図８に示すクエリが表す集計は、レコードをランダムに選ぶ従来のサンプリングでは計算困難である集計の一例である。何故なら、期間内の一人あたりの利用金額を合計するためには、ランダムに選ばれた顧客について、その顧客が期間内に行った複数の注文に対応するレコードを、全てサンプルテーブルに含める必要があるからである。本実施の形態では、このようなクエリを高速に計算することができる。
【０１１１】
なお、サンプル条件は、ステップＡ１で入力される入力データに含まれていなくてもよい。後述するように、サンプルが満たすべき条件が必要になるのは、ステップＡ５であるから、ステップＡ５において、再度入力が受け付けられてもよい。
【０１１２】
次に、目標サンプル属性指定部１１は、外部からの入力データに基づいて、サンプリングの対象となる目標サンプル属性を指定する（ステップＡ２）。この目標サンプル属性は、データベース記憶部３０においてレコードの配置を決定するために用いられている一つ以上のサンプル属性の中から選択される。図８の例では、目標サンプル属性指定部１１は、ＣＵＳＴＫＥＹを目標サンプル属性として指定する。
【０１１３】
次に、目標テーブル指定部１５は、外部からの入力データに基づいて、サンプリングの対象となる目標テーブルを指定する（ステップＡ３）。この目標テーブルは、目標サンプル属性指定部１１で指定された目標サンプル属性を含むテーブルの中から選択される。図８の例では、目標テーブル指定部１５は、ＯＲＤＥＲＳ及びＣＵＳＴＯＭＥＲを目標テーブルとして指定する。
【０１１４】
次に、サンプル条件特定部１２は、外部からの入力データを元に、サンプルが満たすべき条件であるサンプル条件を特定する（ステップＡ４）。図８の例では、サンプル条件特定部１２は、ＵＮＴＩＬ句に指定された式がＴＲＵＥになることを、サンプル条件として特定する。
【０１１５】
以上のステップＡ２からＡ４において、外部からの入力データに明示的に指定がない情報については、推定によって補われてもよい。たとえば、目標テーブルが明示的に指定されていない場合は、目標テーブル指定部１５は、目標サンプル属性を含む全てのテーブルを目標テーブルと見なしてもよい。また、同様の場合において、目標テーブル指定部１５が、外部からの入力データに含まれるＳＱＬにおけるテーブルを目標テーブルと見なし、目標サンプル属性指定部１１が、それらのテーブルに共通して含まれるサンプル属性を目標サンプル属性と見なす、といった態様であってもよい。
【０１１６】
次に、サンプリング部１３は、目標レベルを初期化する（ステップＡ５）。
【０１１７】
本実施の形態では、レコードの目標サンプル属性のレベルと、現在の目標レベルとを比較して、ある条件を満たしているレコードだけがサンプリングされる。この条件が「レベル条件」となる。
【０１１８】
目標レベルは、目標レベルを変更することでサンプルのサイズを制御するための変数である。目標レベルが高いほど取得されるレコードの数は少なく、目標レベルが低いほど取得されるレコードの数が多くなる。単純には、目標レベルは、レベルの最大値に設定されていればよい。後述するように、設定した目標レベルで取得されたレコードの数が少なければ、目標レベルを下げて、各処理が再実行される。
【０１１９】
目標レベルの変更によってサンプルサイズが変更されるようになっていれば、レベル条件はどのようなものでもよい。上述したようにレコードの目標サンプル属性のレベルが目標レベル以上になることがレベル条件とされてもよいし、レコードの目標サンプル属性のレベルが目標レベルと等しくなることがレベル条件とされてもよい。以下では、レコードの目標サンプル属性のレベルが目標レベル以上になることをレベル条件とする。
【０１２０】
次に、サンプリング部１３は、目標サンプル属性、目標テーブル、及び目標レベルに基づいて、レベル条件を満たすレコードを用いて、サンプル条件クエリを生成する（ステップＡ６）。サンプル条件クエリは、後述のステップにおいて、サンプル条件が満たされているかどうかの判定に用いられる。
【０１２１】
目標サンプル属性のレベルが目標レベル以上になるというレベル条件を満たすレコードは、目標サンプル属性のレベルが目標レベル以上となるバケット、または、トップバケットの、いずれかに必ず包含される。よって、サンプル条件クエリは、そのようなバケットのみからレコードが取得されるように設定される。
【０１２２】
より具体的には、サンプリング部１３は、まず、目標テーブル毎に、目標レベル以上のレコードを含むバケットからレコードを取得するビューを定義する。このビューがサンプルテーブルを表す。そして、サンプリング部１３は、サンプル条件クエリを、これらのサンプルテーブルからレコードを取得するように定義する。
【０１２３】
図９は、本発明の実施の形態で用いられるビューの一例を示す図である。具体的には、図９は、ＯＲＤＥＲＳのサンプルテーブルをビューとして定義するＳＱＬ文の一例を示している。図９の例では、図５に示したバケットを用いてサンプルテーブルが定義されている。また、図９の例においては、Ｌ＝３、かつθ＝３であり、目標レベルは１である。ＯＲＤＥＲＳテーブルにおけるレベル配列は、（ＯＲＤＥＲＫＥＹのレベル、ＣＵＳＴＫＥＹのレベル、ＨＯＵＳＥＨＯＬＤＫＥＹのレベル）という順番で並んでいる。
【０１２４】
このとき、ＣＵＳＴＫＥＹのレベルが１以上であり、かつレベルの和が３未満であるようなレベル配列は、（０，２，０）、（１，１，０）、（０，１，１）、及び（０，１，０）の４通りである。これに加えて、トップバケットからもレコードを取得する必要がある。これらのレベル配列を持つバケットを表すテーブルをＵＮＩＯＮ句で結びつけることで、ＣＵＳＴＫＥＹのレベルが１以上となる全てのレコードをＯＲＤＥＲＳから選択するビューが作成される。
【０１２５】
ただし、トップバケットには、目標レベル未満となるレコードも含まれているため、これらは除外する工夫が必要である。これを実現するため、例えば、サンプリング部１３は、トップバケットから、目標サンプル属性のレベルが目標レベル以上となるレコードだけを取得するビューを作成し、そのビューからレコードを取得する。また、サンプリング部１３は、サンプル属性のレベルを、レコードの属性として明示的にトップバケットに記録し、ビューのＷＨＥＲＥ句でフィルターをかけることで、目標レベル未満のレコードを除外することもできる。
【０１２６】
図１０は、本発明の実施の形態で用いられるビューの他の例を示す図である。具体的には、図１０は、ＯＲＤＥＲＳのトップバケットから、目標サンプル属性のレベルが目標レベル以上となるレコードだけを取得するビューを作成するＳＱＬ文の一例を示している。ＣＵＳＴＫＥＹＬＥＶＥＬは、ＣＵＳＴＫＥＹのレベルを格納する属性である。このＳＱＬ文では、目標レベルが１であり、ＣＵＳＴＫＥＹのレベルが１以上となるレコードのみがトップバケットから取得される。図１０において定義されたＯＲＤＥＲＳ＿ＢＵＣＫＥＴ＿ＴＯＰを、図９に示したＯＲＤＥＲＳ＿ＢＵＣＫＥＴ＿ＴＯＰに代入することで、目標サンプル属性のレベルが目標レベル以上となるレコードだけが取得される。
【０１２７】
また、図１１及び図１２も、本発明の実施の形態で用いられるビューの他の例を示す図である。具体的には、図１１は、ＣＵＳＴＯＭＥＲのサンプルテーブルをビューとして定義するＳＱＬ文の一例を示す。図１２は、ＣＵＳＴＯＭＥＲのトップバケットから、目標サンプル属性のレベルが目標レベル以上となるレコードだけを取得するビューを作成するＳＱＬ文の一例を示す。
【０１２８】
図１３は、本発明の実施の形態で用いられるサンプル条件クエリの一例を示す図である。具体的には、図１３は、サンプル条件が満たされているかどうかを判定するＳＱＬ文の一例である。図１３に示すＳＱＬ文は、サンプル条件クエリとして用いられる。また、図１３に示すＳＱＬ文は、図９及び図１１で定義されたサンプルテーブルを用いて、サンプル条件が満たされているかどうかを判定する。図１３に示すＳＱＬ文は、図８に示す拡張ＳＱＬ文から、ＷＩＴＨ句とＵＮＴＩＬ句とを抽出し、ＵＮＴＩＬをＳＥＬＥＣＴに置換することで生成されたものである。図１３に示すＳＱＬ文を実行すると、真偽値が出力される。真偽値がＴＲＵＥであれば、サンプル条件が満たされたことを示し、ＦＡＬＳＥであれば、サンプル条件がまだ満たされていないことを示す。
【０１２９】
図９から図１３に示したＳＱＬ文には、「ＣＲＥＡＴＥ  ＶＩＥＷ」文が用いられている。これは、サンプルテーブルを直接データベースに保存せずに、後述するステップでその場で計算するための工夫である。なお、本実施の形態では、サンプリング部１３は、「ＣＲＥＡＴＥ  ＴＡＢＬＥ」文を使って、サンプルテーブルを一度データベースに保存することもできる。
【０１３０】
また、本実施の形態において、図９から図１３に示したＳＱＬ文は一例であり、サンプル条件クエリの構成はこれに限定されることはない。サンプル条件クエリとしては、内部ＤＢＭＳのテーブル構成に応じたクエリ構成が用いられてもよい。たとえば、図９から図１３は、バケットをバックエンドＤＢＭＳに個別のテーブルとして保存する場合の方法を示している。しかし、本実施の形態では、複数のバケットが、バックエンドＤＢＭＳ上ではひとつのテーブルとして保存されている場合に、レコードに各サンプル属性のレベルを新たな属性として付与しておき、そのレベルが目標レベル以上となることを条件とするビューが作成されても良い。この場合においても、図９〜図１３の例と同様の結果が得られるクエリが実現される。
【０１３１】
次に、サンプリング部１３は、サンプル条件クエリを実行し、サンプルがサンプル条件を満たしているかどうかを判定する（ステップＡ７）。具体的には、サンプリング部１３は、サンプル条件クエリを、データベース管理部２０に入力し、データベース管理部２０が返す真偽値を用いて、サンプルがサンプル条件を満たしているかどうかを判定する。また、データベース管理部２０は、データベース記憶部３０に記憶されているデータを用いてサンプル条件クエリの出力を計算する。
【０１３２】
サンプリング部１３は、ステップＡ７の判定の結果、サンプルがサンプル条件を満たしていない場合は、ステップＡ９に進み、サンプルがサンプル条件を満たしている場合は、ステップＡ１１に進む（ステップＡ８）。
【０１３３】
ステップＡ８においてサンプルがサンプル条件を満たしていない場合は、サンプリング部１３は、目標レベルが０（ゼロ）であるかどうかを判定する（ステップＡ９）。サンプリング部１３は、目標レベルが０（ゼロ）であればステップＡ１１に進み、０（ゼロ）でなければステップＡ１０に進む。
【０１３４】
ステップＡ１０においては、サンプリング部１３は、目標レベルを下げ、その後、ステップＡ６に戻る（ステップＡ１０）。単純には、サンプリング部１３は、目標レベルを「１」下げる。目標レベルを「１」下げることは、ステップＡ６で取得されるレコード数の増加量の期待値がＢ倍されることを意味する。何故なら、新たな目標レベルには、前回の目標レベルのＢ倍のレコードが含まれていると期待できるからである。これにより、ステップＡ６が実行されるたびに、取得されるレコード数は増加していく。そして、サンプル条件が満たされるか、目標レベルが０になるまで、サンプルの生成が繰り返される。なお、サンプリング部１３は、もし、目標レベルを「１」下げてもサンプル条件を満たさないと推量する場合は、目標レベルを「２」以上下げることもできる。
【０１３５】
ステップＡ８においてサンプルがサンプル条件を満たしている場合、または、ステップＡ９において、目標レベルが０である場合は、出力計算部１６は、サンプルを用いて出力内容を計算する（ステップＡ１１）。
【０１３６】
また、ステップＡ１１では、目標レベルが０である場合は、サンプル条件は満たさなかったが、元のテーブルからレコードを全て得られているので、出力計算部１６は、これらを用いて出力を計算する。この場合、サンプリングではなく、クエリに当てはまる全てのデータを使った厳密な結果が出力される。サンプル条件が満たされなかった場合は、出力計算部１６は、エラーを出力してもよい。
【０１３７】
出力計算部１６による出力内容の計算は、データベース管理部２０に対してクエリを与えることで実現できる。出力内容を計算するクエリは、たとえばＳＱＬを用いて記述できる。
【０１３８】
図１４は、本発明の実施の形態において出力計算部が作成するクエリの一例を示す図である。具体的には、図１４は、サンプルを用いて出力内容を計算するＳＱＬ文の一例を示している。図１４に示すＳＱＬ文は、図８に示した入力データから、ＳＡＭＰＬＥ句とＵＮＴＩＬ句とを除去して得られたものである。サンプルテーブルは、既にＵＮＴＩＬ句に記述された条件を満たしている。このため、その後、図１４に示されたＳＱＬ文を実行すれば、外部入力データに指定された通りの集計を実現できる。
【０１３９】
また、本実施の形態は、処理実行部１０において、サンプル条件の判定に用いたレコードが別途キャッシュされており、出力計算部１６が、キャッシュされたレコードを用いて出力内容を計算する態様であってもよい。この態様においては、出力計算部１６によるデータベース管理部２０への問い合わせは省略することができる。
【０１４０】
そして、ステップＡ１１の実行後、出力計算部１６は、計算した出力内容を、外部に出力する（ステップＡ１２）。本実施の形態では、サンプルが条件を満たした後に、計算結果が出力されるが、本実施の形態はこれに限定されるものではない。これを変更し、本実施の形態は、出力計算部１６が目標レベルごとに出力を行なう態様であってもよい。
【０１４１】
すなわち、目標レベルがＬ−１であるときの出力、目標レベルがＬ−２であるときの出力が順次出力されてもよい。この態様では、最初は少数のサンプルによる、精度の低い推定結果が表示され、順次、サンプルが増加し、精度の高い推定結果が表示されるようになる。
【０１４２】
これにより、外部のユーザが現在の進捗状況を監視し、十分な情報が得られたと判断すればユーザのコマンド入力によってサンプリングを終了するといった、オンラインアグリゲーションと同様の動作が実現されてもよい。この場合、ユーザのコマンド入力がサンプリングの停止条件となる。
【０１４３】
［実施の形態による効果］
本実施の形態の効果について、以下に説明する。
【０１４４】
上述した特許文献１に開示された手法は、テーブルの全てのレコードをスキャンしながら、ハッシュ関数で計算されるレベルに応じてサンプルの一部を捨てることで、サンプルの大きさを一定以内に保つ技術である。この手法では、サンプルの作成に時間がかかるため、外部からの入力によって指定された条件を満たすサンプルを高速に作成することはできない。
【０１４５】
更に、特許文献１には、事前にサンプルを作成しておいて、そのサンプルに対してクエリを適用する方法が開示されているが、この方法では外部からの入力によって指定された条件を満たすことは困難である。たとえば、図８に示すクエリのように、特定の期間に注文した特定の国に住む顧客を１０００人サンプリングしたいという要求があるとき、事前に作成したサンプルの中に、このような複雑な条件を満たす顧客が十分に含まれているとは限らない。かといって、様々な条件を想定して大量のサンプルを作っておくと、膨大な記憶領域を浪費してしまう。
【０１４６】
本実施の形態では、事前にレコードは、ハッシュ関数で計算されるレベルに応じて並べ替えられる。そして、外部からサンプルが要求されると、目標サンプル属性のレベルが高いレコードから優先的にチェックされ、指定された条件を満たすレコードが十分な数集まった時点でサンプリングが打ち切られる。このとき、目標サンプル属性のレベルが低いレコードはチェックされない。これにより、大半のレコードを無視できるため、サンプルの生成は高速である。しかも、事前にサンプルを作成する場合と異なり、外部から指定された条件を満たすサンプルが作成される。更に、本実施の形態では、元から存在するデータを並べ替えるだけであり、レコードを複製する必要がないので、記憶領域を浪費しない。
【０１４７】
本実施の形態は、ひとつのテーブルが複数のサンプル属性を持つ場合に、特に効果的である。事前にサンプルを作成する方法では、サンプリングに用いる属性ごとに別途サンプルを作成して保存する必要があるため、サンプリングに用いる属性が増えるほど、より多くの記憶領域が浪費される。これに対して、本実施の形態においては、サンプル属性が増加しても、レコードの配置が変わるだけで、レコードを複製する必要がない。これにより、記憶領域の浪費が抑制される。
【０１４８】
また、もしもテーブルにおけるサンプル属性がひとつだけであれば、サンプル属性の値にランダムな順番を定めてその順番でソートする方法を用いれば、テーブルの先頭からシーケンシャルアクセスすることで、そのサンプル属性の値におけるサンプリングを実現できる。たとえば、図３に示すＯＲＤＥＲテーブルについて、ＣＵＳＴＫＥＹにランダムな順番を決めて、その順番でＯＲＤＥＲテーブルをソートしておけば、先頭からシーケンシャルアクセスすることで顧客を母集団にしてサンプリングできる。但し、このような単純な手法は、複数のサンプル属性に対応できない。たとえば顧客でサンプリングするためにソートしてしまうと、今度は世帯でサンプリングできなくなってしまう。
【０１４９】
これに対して、本実施の形態では、複数のサンプル属性について、指数関数的に偏りがあるレベルを計算して、レベルの組み合わせに応じてバケットに分割することで、複数のサンプル属性のいずれについても高速にサンプルを作成できる。指数関数的に分割されたレベルの数は、後述するようにレコード数をＮとしてＬ＝Ｏ（ｌｏｇ  Ｎ）個に抑えることができ、レベルの組み合わせの数が爆発的に増加することを防ぐことができる。これにより、複数のサンプル属性のいずれを目標としてサンプリングしても、わずかな数のバケットをチェックするだけで条件を満たすサンプルを生成できる。
【０１５０】
また、本実施の形態では、目標テーブル指定部１５は、同一の目標サンプル属性がサンプル属性として設定されている２以上のテーブルを、目標テーブルとして指定することができる。この場合、サンプリング部１３は、指定された２以上のテーブルそれぞれから取得したレコードを、同一の目標サンプル属性に基づいて結合し、結合によって生成されたレコードをサンプルに包含し、サンプル条件が満たされているかどうかを判定する。
【０１５１】
つまり、本実施の形態は、複数のテーブルが同じサンプル属性を共有しており、そのサンプル属性の値が等しくなる条件でテーブルを等価結合するとき、特に効果的である。何故なら、複数のテーブルからその属性を用いてサンプリングすることで、それぞれのテーブルから小さなサンプルテーブルを抽出し、サンプルテーブル同士を等価結合することで、計算コストを大幅に減らすことができるためである。小さなテーブル同士の結合は、大きなテーブル同士の結合よりも計算コストが小さい。
【０１５２】
従来の、レコードを母集団の要素とするサンプリングの場合は、異なるテーブルから得られたサンプル同士を等価結合しても、正確な推定結果を得ることができない。何故なら、等価結合するためには、等価結合に用いられる属性について、同じ値がどちらのサンプルにも含まれている必要があるからである。レコードを母集団の要素とするサンプリングでは、同じ値がサンプルに含まれる保証がない。
【０１５３】
一方、本実施の形態では、同じサンプル属性であれば同一のハッシュ関数を用いてレベルが定められている。よって、ある目標レベルを用いてレコードを抽出するとき、異なるテーブルであっても、同じサンプル属性の値が両方のサンプルに含まれる。これにより、サンプル同士の等価結合が正確に実現できる。
【０１５４】
そして、本実施の形態では、サンプル同士を等価結合したテーブルを用いて、サンプル条件が満たされているかどうかを判定し、サンプル条件が満たされるまでサンプル作成を継続することができる。これにより、複数のテーブルに関する条件を満たすようなサンプルを高速に作成できる。
【０１５５】
図３に示すデータベースの例を用いて、上記の点を説明する。目標サンプル属性がＣＵＳＴＫＥＹであり、ＯＲＤＥＲＳとＣＵＳＴＯＭＥＲとのそれぞれからサンプリングするとする。このとき、たとえば、ＯＲＤＥＲＳからＣＵＳＴＫＥＹ＝９となるレコードがサンプリングされているならば、ＣＵＳＴＯＭＥＲに含まれるＣＵＳＴＫＥＹ＝９となるレコードも必ずサンプリングされる。何故なら、同一のハッシュ関数を用いて計算されたレベルを用いて、レコードが取得されているからである。このように、ＣＵＳＴＫＥＹの選択された値を持つレコードがどちらのテーブルからも取得されるため、ＣＵＳＴＫＥＹを用いてサンプルテーブル同士を等価結合できる。
【０１５６】
図８に示す例では、このサンプル同士を結合したテーブルに関する条件を用いてサンプル条件が記述されている。すなわち、ＯＲＤＥＲＳから取得したサンプルテーブルとＣＵＳＴＯＭＥＲから取得したサンプルテーブルを結合することで、特定の期間に注文し、しかも顧客の住む国が特定の国であるような顧客だけを取得している。本実施の形態では、このように、複数のテーブルに関する条件を満たすようなサンプルを高速に作成することができる。
【０１５７】
本実施の形態は、特に、データベースを、スタースキーマのようなデータウェアハウス用途で用いる際に重要になる。データウェアハウス用途では、巨大なファクトテーブルと複数のディメンションテーブルが存在し、ファクトテーブルとディメンションテーブルを外部キーで結合することで集計する。ディメンションテーブルは、それぞれ顧客や製品など、集計の切り口となる次元を表している。
【０１５８】
このようなデータウェアハウスでの集計をサンプリングで近似するためには、顧客ごとの集計や製品ごとの集計などの集計のタイプに応じて、母集団を切り替えてサンプリングする必要がある。本実施の形態は、このような、母集団を切り替えて様々な集計を行う場面において、顧客や製品を予めサンプル属性に指定しておくことで、どの母集団においてもサンプリングを高速に実施できる。
【０１５９】
たとえば、図８に示す例では、ＣＵＳＴＫＥＹを目標サンプル属性として指定することで、顧客１０００人について一人あたりの合計利用金額の平均を計算している。ここで、ＣＵＳＴＫＥＹをＨＯＵＳＥＨＯＬＤＫＥＹに変更すると、１０００世帯について一世帯あたりの合計利用金額の平均を計算することができる。このように、事前のサンプル作成なしで、様々な母集団について高速にサンプリングを行うことができる。
【０１６０】
また、本実施の形態は、特に、データベースのテーブルにクラスタ属性が設定されているときに、重要となる。この場合、データベース管理部２０は、データベース記憶部３０の記憶領域におけるレコードそれぞれの配置を決定する際に、テーブルに含まれ、且つ、サンプル属性のレベルが等しい複数のレコードについては、クラスタ属性の値に基づいて配置を決定することができる。
【０１６１】
つまり、この場合、バケットに含まれているレコードも、元のテーブルに設定されたクラスタ属性と同じクラスタ属性を用いてソートして配置される。これにより、クラスタ属性を条件にしたサンプリングが実行されると、クラスタ属性の条件に当てはまらないレコードをまとめて無視できるため、高速にサンプルを収集できるという効果が得られることになる。
【０１６２】
たとえば、図３に示す例では、元となるＯＲＤＥＲＳテーブルがＯＲＤＥＲＤＡＴＥという注文日付を表す属性をクラスタ属性としてソートされている。そして、図５及び図６に示す例では、ＯＲＤＥＲＳテーブルのバケットに含まれるレコードを同じく注文日付の順番でソートされている。これにより、注文日付を条件にしたサンプリングにおいて、条件に当てはまるレコードをまとめて取得することができる。たとえば、図８に示す例は、「２０１５年１月２日から２０１５年１月８日までに注文された注文である」ことを条件としたクエリである。このクエリが入力されたとき、本実施の形態では、指定された時間範囲に含まれるレコードをまとめて取得できる一方、指定された時間範囲外のレコードをまとめて無視することができるため、条件を満たすレコードを効率的に収集できる。
【０１６３】
最後に、本実施の形態が高速に実行される点について、何故高速に実行できるのか、具体的に考察する。
【０１６４】
レコード数Ｎの注文テーブルからのサンプリングを考える。また、顧客が一つ以上の定数オーダ個の注文に対応しており、顧客数はＯ（Ｎ）であるとする。
【０１６５】
このとき、レベル数Ｌを、Ｌ＝Ｏ（ｌｏｇ（Ｎ））となるように定める。ｌｏｇの底はＢである。このとき、あるサンプル属性に関して、最大のレベルであるＬ−１に割り当てられる属性値の数の期待値は、Ｎによらず定数オーダとなる。何故なら、レベルＬ−１に割り当てられる確率は、レベル０に割り当てられる確率に比べて、ＢのＬ乗分の１、すなわちＯ（Ｎ）分の１になるためである。
【０１６６】
このとき、外部入力データによって、Ｍ人分の注文をサンプリングすることが求められたとする。ただし、外部入力データの指定した条件によって、Ｆ人に１人の割合でしかサンプルに包含されないとする。
【０１６７】
更に、このとき、本実施の形態では、レベルの高いレコードから順に探索して、Ｍ人分以上の注文が得られた時点で、サンプリングを停止して目標レベルを固定する。このときの目標レベル以上のレベルの数をＫと置く。このとき、目標レベル以上のＫ個のレベルには、Ｏ（Ｆ・Ｍ）人分のレコードが含まれる。
【０１６８】
そして、Ｎが十分大きければ、本実施の形態が処理するレコード数は、全体のレコード数Ｎには依存しない。Ｎがどれだけ巨大であっても、本実施の形態が処理するレコードの数は一定である。何故なら、Ｎが大きければ大きいほど、低いレベルに含まれるレコード数は増加するが、上位Ｋレベルの探索においては、低いレベルに大量のレコードがあっても無視されるからである。
【０１６９】
図１５は、本実施の形態における情報処理装置によるサンプリングが処理するレコードの数を概念的に示す図である。図１５に示すように、本実施の形態によるサンプリングは、レコード数Ｎが小さい場合でも、大きい場合でも、計算量が変化しない。どちらの場合でも、上位Ｋレベル（この図ではＫ＝３）を取得することで、サンプリングが終了する。
【０１７０】
すなわち、１０００人分のデータを取得するよう外部から要求されたとき、データベースに含まれる顧客の人数が１万人であっても１億人であっても、本実施の形態によるサンプリングが処理するレコードの数は変化しない。
【０１７１】
また、計算速度の点では、レコードの絶対数が少ないことだけではなく、複数のレコードを一度に取得できることも重要である。一般に、ＤＢＭＳはブロックごとに入出力を行うが、サンプリングされるべきレコードが異なるブロックに散らばっている場合、少数のレコードを取得するために何度もブロックを入出力する必要があり、速度が遅くなる。
【０１７２】
本実施の形態では、同一のバケットに所属するレコードを近接して配置することで、この問題を解決している。
【０１７３】
同一のバケットに含まれるレコードが効率的に取得できる場合、次に問題になるのは、サンプリングでアクセスする必要があるバケットの数である。すなわち、ある目標サンプル属性の目標レベルを固定したときに、レベル条件を満たすレコードが含まれている可能性があるバケットの数が問題である。
【０１７４】
単純に、全てのサンプル属性についてＬ＝Ｏ（ｌｏｇ  Ｎ）個のレベルに分割してしまうと、チェックすべきバケットの数はＮに依存する。あるテーブルに含まれるサンプル属性の数をＳとするとき、ひとつのサンプル属性のある目標レベルに対応するバケットは、それ以外の属性Ｓ−１個についての組み合わせにより、ＬのＳ−１乗個存在することになる。これはＮに依存して大きくなる。
【０１７５】
本実施の形態では、θ＝Ｌとなるようにトップバケットの閾値θを設定することで、サンプリングでアクセスする必要があるバケットの数も、データ量Ｎに依存しないように設定できる。
【０１７６】
たとえば、複数のサンプル属性が含まれるテーブルについて、ひとつを目標サンプル属性として指定しサンプリングを行うとする。最大のレベルであるＬ−１を目標レベルとするとき、このレベルに対応するバケットは、トップバケットと、他のサンプル属性のレベルが０になるバケットのみである。何故なら、他のサンプル属性が１以上になるレコードは、全てトップバケットに含まれるからである。
【０１７７】
同様に、目標レベルを下げるほど、下げたぶんだけ考慮すべきバケットの数は増加するが、途中のレベルでサンプリングが終了するならば、このバケット数はＬに依存せず、つまりデータ量Ｎに依存しない。
【０１７８】
このような利点は、レベルが上がるごとに、割り当てられるレコードが減少することによって得られている。もし単純に、レコードを各レベルに均等に分割してしまうと、ひとつのレベルに所属するレコード数か、バケット数のどちらかがＮに依存してしまい、データ量によって計算量が大きく変化してしまう。
【０１７９】
以上のように、本実施の形態においては、レコードの数の点においてもバケットの数の点においても、データ全体の一部を調べるだけで済み、巨大なデータに対してもクエリの条件を満たすサンプルを高速に作成できる。
【０１８０】
［プログラム］
本発明の実施の形態におけるプログラムは、コンピュータに、図７に示すステップＡ１〜Ａ１２を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態における情報処理装置１００と情報処理方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、目標サンプル属性指定部１１、サンプル条件特定部１２、サンプリング部１３、入力データ受付部１４と、目標テーブル指定部１５、出力計算部１６及びデータベース管理部２０として機能し、処理を行なう。また、本実施の形態では、データ記憶部３０は、コンピュータに備えられたハードディスク等の記憶装置によって実現されていても良いし、本実施の形態におけるプログラムを実行するコンピュータとは別のコンピュータ上に構築されていても良い。
【０１８１】
また、本実施の形態におけるプログラムは、複数のコンピュータによって構築されたコンピュータシステムによって実行されても良い。この場合は、例えば、各コンピュータが、それぞれ、目標サンプル属性指定部１１、サンプル条件特定部１２、サンプリング部１３、入力データ受付部１４と、目標テーブル指定部１５、出力計算部１６及びデータベース管理部２０のいずれかとして機能しても良い。
【０１８２】
ここで、本実施の形態におけるプログラムを実行することによって、情報処理装置１００を実現するコンピュータについて図１６を用いて説明する。図１６は、本発明の実施の形態における情報処理装置を実現するコンピュータの一例を示すブロック図である。
【０１８３】
図１６に示すように、コンピュータ１１０は、ＣＰＵ１１１と、メインメモリ１１２と、記憶装置１１３と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。
【０１８４】
ＣＰＵ１１１は、記憶装置１１３に格納された、本実施の形態におけるプログラム（コード）をメインメモリ１１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであっても良い。
【０１８５】
また、記憶装置１１３の具体例としては、ハードディスクドライブの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。
【０１８６】
データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【０１８７】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash（登録商標））及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記録媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記録媒体が挙げられる。
【０１８８】
なお、本実施の形態における情報処理装置１００は、プログラムがインストールされたコンピュータではなく、各部に対応したハードウェアを用いることによっても実現可能である。更に、情報処理装置１００は、一部がプログラムで実現され、残りの部分がハードウェアで実現されていてもよい。
【０１８９】
上述した実施の形態の一部又は全部は、以下に記載する（付記１）〜（付記３３）によって表現することができるが、以下の記載に限定されるものではない。
【０１９０】
（付記１）
データベースに含まれるデータのサンプリングを行うための情報処理装置であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定され、
当該情報処理装置は、
外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、目標サンプル属性指定部と、
前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、サンプル条件特定部と、
前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
サンプリング部と、
を備えている、ことを特徴とする情報処理装置。
【０１９１】
（付記２）
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記目標サンプル属性指定部が、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
付記１に記載の情報処理装置。
【０１９２】
（付記３）
前記データベースが記憶装置の記憶領域に格納されており、
当該情報処理装置が、
前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、データベース管理部を、更に備えている、
付記１または２に記載の情報処理装置。
【０１９３】
（付記４）
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記データベース管理部が、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
付記３に記載の情報処理装置。
【０１９４】
（付記５）
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記データベース管理部が、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
付記３または４に記載の情報処理装置。
【０１９５】
（付記６）
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
付記１〜５のいずれかに記載の情報処理装置。
【０１９６】
（付記７）
前記サンプリング部が、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
付記１〜６のいずれかに記載の情報処理装置。
【０１９７】
（付記８）
前記サンプリング部が、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、付記７に記載の情報処理装置。
【０１９８】
（付記９）
前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、目標テーブル指定部を更に備え、
前記サンプリング部は、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
付記１〜６のいずれかに記載の情報処理装置。
【０１９９】
（付記１０）
前記目標テーブル指定部が、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記サンプリング部が、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
付記９に記載の情報処理装置。
【０２００】
（付記１１）
当該情報処理装置が、
前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、出力計算部を更に備えている、
付記１〜１０のいずれかに記載の情報処理装置。
【０２０１】
（付記１２）
データベースに含まれるデータのサンプリングを行うための情報処理方法であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
当該情報処理方法は、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を有する、ことを特徴とする情報処理方法。
【０２０２】
（付記１３）
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ａ）のステップにおいて、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
付記１２に記載の情報処理方法。
【０２０３】
（付記１４）
前記データベースが記憶装置の記憶領域に格納されており、
（ｄ）前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、ステップを、更に有する、
付記１２または１３に記載の情報処理方法。
【０２０４】
（付記１５）
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ｄ）のステップにおいて、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
付記１４に記載の情報処理方法。
【０２０５】
（付記１６）
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記（ｄ）のステップにおいて、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
付記１４または１５に記載の情報処理方法。
【０２０６】
（付記１７）
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
付記１２〜１６のいずれかに記載の情報処理方法。
【０２０７】
（付記１８）
前記（ｃ）のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
付記１２〜１７のいずれかに記載の情報処理方法。
【０２０８】
（付記１９）
前記（ｃ）のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、付記１８に記載の情報処理方法。
【０２０９】
（付記２０）
（ｅ）前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを更に有し、
前記（ｃ）のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
付記１２〜１７のいずれかに記載の情報処理方法。
【０２１０】
（付記２１）
前記（ｅ）のステップにおいて、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記（ｃ）のステップにおいて、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
付記２０に記載の情報処理方法。
【０２１１】
（付記２２）
（ｆ）前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、ステップを更に有している、
付記１２〜２１のいずれかに記載の情報処理方法。
【０２１２】
（付記２３）
コンピュータによって、データベースに含まれるデータのサンプリングを行うためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
前記コンピュータに、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を実行させる命令を含む、プログラムを記録している、コンピュータ読み取り可能な記録媒体。
【０２１３】
（付記２４）
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ａ）のステップにおいて、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
付記２３に記載のコンピュータ読み取り可能な記録媒体。
【０２１４】
（付記２５）
前記データベースが記憶装置の記憶領域に格納されており、
前記プログラムが、前記コンピュータに、
（ｄ）前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、ステップを実行させる命令を更に含む、
付記２３または２４に記載のコンピュータ読み取り可能な記録媒体。
【０２１５】
（付記２６）
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ｄ）のステップにおいて、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
付記２５に記載のコンピュータ読み取り可能な記録媒体。
【０２１６】
（付記２７）
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記（ｄ）のステップにおいて、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
付記２５または２６に記載のコンピュータ読み取り可能な記録媒体。
【０２１７】
（付記２８）
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
付記２３〜２７のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【０２１８】
（付記２９）
前記（ｃ）のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
付記２３〜２８のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【０２１９】
（付記３０）
前記（ｃ）のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、付記２９に記載のコンピュータ読み取り可能な記録媒体。
【０２２０】
（付記３１）
前記プログラムが、前記コンピュータに、
（ｅ）前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを実行させる命令を更に含み、
前記（ｃ）のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
付記２３〜２８のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【０２２１】
（付記３２）
前記（ｅ）のステップにおいて、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記（ｃ）のステップにおいて、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
付記３１に記載のコンピュータ読み取り可能な記録媒体。
【０２２２】
（付記３３）
前記プログラムが、前記コンピュータに、
（ｆ）前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、ステップを実行させる命令を更に含む、
付記２３〜３２のいずれかに記載のコンピュータ読み取り可能な記録媒体。
【０２２３】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０２２４】
この出願は、２０１６年２月５日に出願された日本出願特願２０１６−０２１１９８を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０２２５】
以上のように、本発明によれば、母集団の少なくともひとつの要素が複数のレコードに関連付けられているデータベースにおいて、クエリの条件に適合するサンプリングを高速に実行することができる。本発明は、大規模なデータベースからのサンプルを必要とする種々の分野において有用である。
【符号の説明】
【０２２６】
１０  処理実行部
１１  目標サンプル属性指定部
１２  サンプル条件特定部
１３  サンプリング部
１４  入力データ受付部
１５  目標テーブル指定部
１６  出力計算部
２０  データベース管理部
３０  データベース記憶部
１００  情報処理装置
１１０  コンピュータ
１１１  ＣＰＵ
１１２  メインメモリ
１１３  記憶装置
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
２００  データベース
【図１】
2017135264.tif 000004
【図２】
2017135264.tif 000005
【図３】
2017135264.tif 000006
【図４】
2017135264.tif 000007
【図５】
2017135264.tif 000008
【図６】
2017135264.tif 000009
【図７】
2017135264.tif 000010
【図８】
2017135264.tif 000011
【図９】
2017135264.tif 000012
【図１０】
2017135264.tif 000013
【図１１】
2017135264.tif 000014
【図１２】
2017135264.tif 000015
【図１３】
2017135264.tif 000016
【図１４】
2017135264.tif 000017
【図１５】
2017135264.tif 000018
【図１６】
2017135264.tif 000019
【手続補正書】
【提出日】平成30年8月2日(2018.8.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データベースに含まれるデータのサンプリングを行うための情報処理装置であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定され、
当該情報処理装置は、
外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、目標サンプル属性指定部と、
前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、サンプル条件特定部と、
前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
サンプリング部と、
を備えている、ことを特徴とする情報処理装置。
【請求項２】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記目標サンプル属性指定部が、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
請求項１に記載の情報処理装置。
【請求項３】
前記データベースが記憶装置の記憶領域に格納されており、
当該情報処理装置が、
前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、データベース管理部を、更に備えている、
請求項１または２に記載の情報処理装置。
【請求項４】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記データベース管理部が、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
請求項３に記載の情報処理装置。
【請求項５】
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記データベース管理部が、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
請求項３または４に記載の情報処理装置。
【請求項６】
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
請求項１〜５のいずれかに記載の情報処理装置。
【請求項７】
前記サンプリング部が、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
請求項１〜６のいずれかに記載の情報処理装置。
【請求項８】
前記サンプリング部が、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、請求項７に記載の情報処理装置。
【請求項９】
前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、目標テーブル指定部を更に備え、
前記サンプリング部は、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
請求項１〜６のいずれかに記載の情報処理装置。
【請求項１０】
前記目標テーブル指定部が、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記サンプリング部が、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
請求項９に記載の情報処理装置。
【請求項１１】
当該情報処理装置が、
前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、出力計算部を更に備えている、
請求項１〜１０のいずれかに記載の情報処理装置。
【請求項１２】
データベースに含まれるデータのサンプリングを行うための情報処理方法であって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
当該情報処理方法は、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を有する、ことを特徴とする情報処理方法。
【請求項１３】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ａ）のステップにおいて、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
請求項１２に記載の情報処理方法。
【請求項１４】
前記データベースが記憶装置の記憶領域に格納されており、
（ｄ）前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、ステップを、更に有する、
請求項１２または１３に記載の情報処理方法。
【請求項１５】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ｄ）のステップにおいて、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
請求項１４に記載の情報処理方法。
【請求項１６】
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記（ｄ）のステップにおいて、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
請求項１４または１５に記載の情報処理方法。
【請求項１７】
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
請求項１２〜１６のいずれかに記載の情報処理方法。
【請求項１８】
前記（ｃ）のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
請求項１２〜１７のいずれかに記載の情報処理方法。
【請求項１９】
前記（ｃ）のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、請求項１８に記載の情報処理方法。
【請求項２０】
（ｅ）前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを更に有し、
前記（ｃ）のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
請求項１２〜１７のいずれかに記載の情報処理方法。
【請求項２１】
前記（ｅ）のステップにおいて、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記（ｃ）のステップにおいて、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
請求項２０に記載の情報処理方法。
【請求項２２】
（ｆ）前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、ステップを更に有している、
請求項１２〜２１のいずれかに記載の情報処理方法。
【請求項２３】
コンピュータによって、データベースに含まれるデータのサンプリングを行うためのプログラムであって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
前記コンピュータに、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を実行させる命令を含むプログラム。
【請求項２４】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ａ）のステップにおいて、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
請求項２３に記載のプログラム。
【請求項２５】
前記データベースが記憶装置の記憶領域に格納されており、
前記プログラムが、前記コンピュータに、
（ｄ）前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、ステップを実行させる命令を更に含む、
請求項２３または２４に記載のプログラム。
【請求項２６】
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ｄ）のステップにおいて、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
請求項２５に記載のプログラム。
【請求項２７】
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記（ｄ）のステップにおいて、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
請求項２５または２６に記載のプログラム。
【請求項２８】
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
請求項２３〜２７のいずれかに記載のプログラム。
【請求項２９】
前記（ｃ）のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
請求項２３〜２８のいずれかに記載のプログラム。
【請求項３０】
前記（ｃ）のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、請求項２９に記載のプログラム。
【請求項３１】
前記プログラムが、前記コンピュータに、
（ｅ）前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを実行させる命令を更に含み、
前記（ｃ）のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
請求項２３〜２８のいずれかに記載のプログラム。
【請求項３２】
前記（ｅ）のステップにおいて、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記（ｃ）のステップにおいて、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
請求項３１に記載のプログラム。
【請求項３３】
前記プログラムが、前記コンピュータに、
（ｆ）前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、ステップを実行させる命令を更に含む、
請求項２３〜３２のいずれかに記載のプログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
本発明は、情報処理装置、情報処理方法、及びプログラムに関する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
本発明の目的の一例は、上記問題を解消し、母集団の少なくともひとつの要素が複数のレコードに関連付けられているデータベースにおいて、クエリの条件に適合するサンプリングを高速に実行し得る、情報処理装置、情報処理方法、及びプログラムを提供することにある。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】変更
【補正の内容】
【００１９】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、コンピュータによって、データベースに含まれるデータのサンプリングを行うためのプログラムであって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
前記コンピュータに、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を実行させることを特徴とする。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１０５
【補正方法】変更
【補正の内容】
【０１０５】
ＳＡＭＰＬＥ句は、目標サンプル属性及び目標テーブルを指定するための句である。図８の例では、ＳＡＭＰＬＥ句は、ＣＵＳＴＫＥＹを目標サンプル属性として指定している。また、ＳＡＭＰＬＥ句は、ＯＲＤＥＲＳ及びＣＵＳＴＯＭＥＲを目標テーブルとして指定している。さらに、ＳＡＭＰＬＥ句は、ＡＳ句を用いて、ＯＲＤＥＲＳから得られるサンプルテーブルに、ＯＲＤＥＲＳ＿ＳＡＭＰＬＥという別名を付与し、ＣＵＳＴＯＭＥＲから得られるサンプルテーブルに、ＣＵＳＴＯＭＥＲ＿ＳＡＭＰＬＥという別名を付与している。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１８０
【補正方法】変更
【補正の内容】
【０１８０】
［プログラム］
本発明の実施の形態におけるプログラムは、コンピュータに、図７に示すステップＡ１〜Ａ１２を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態における情報処理装置１００と情報処理方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、標サンプル属性指定部１１、サンプル条件特定部１２、サンプリング部１３、入力データ受付部１４と、目標テーブル指定部１５、出力計算部１６及びデータベース管理部２０として機能し、処理を行なう。また、本実施の形態では、データベース記憶部３０は、コンピュータに備えられたハードディスク等の記憶装置によって実現されていても良いし、本実施の形態におけるプログラムを実行するコンピュータとは別のコンピュータ上に構築されていても良い。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０２１２
【補正方法】変更
【補正の内容】
【０２１２】
（付記２３）
コンピュータによって、データベースに含まれるデータのサンプリングを行うためのプログラムであって、
前記データベースにおいて、
それに含まれる一つ以上のテーブルには、母集団を構成する要素を表す属性として指定できるサンプル属性が設定され、
前記テーブルに含まれるレコードには、当該レコードに含まれる前記サンプル属性の値から計算されたハッシュ値が、前記サンプル属性のレベルとして設定されている場合において、
前記コンピュータに、
（ａ）外部から入力された入力データに基づいて、前記サンプリングにおいて母集団を構成する要素を表す目標サンプル属性として、前記サンプル属性を指定する、ステップと、
（ｂ）前記入力データに基づいて、前記サンプリングによって作成するサンプルが満たすべき条件をサンプル条件として特定する、ステップと、
（ｃ）前記サンプルに包含されるレコードを決定するためのレベルを目標レベルとして選択し、更に、選択した目標レベルを用いた、前記サンプルに包含されるレコードが満たす条件であるレベル条件を設定し、
そして、前記テーブルに含まれる前記レコードのうち、前記目標サンプル属性のレベルが前記レベル条件を満たすレコードを取得して前記サンプルに包含させ、
加えて、前記サンプルについて、前記サンプル条件が満たされているかどうかを判定し、判定の結果、前記サンプル条件が満たされていない場合は、前記目標レベルを変更して、再度、前記レコードを取得する、
ステップと、
を実行させる命令を含むプログラム。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０２１３
【補正方法】変更
【補正の内容】
【０２１３】
（付記２４）
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ａ）のステップにおいて、外部から入力された入力データに基づいて、複数の前記サンプル属性のうちのひとつを目標サンプル属性として指定する、
付記２３に記載のプログラム。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】０２１４
【補正方法】変更
【補正の内容】
【０２１４】
（付記２５）
前記データベースが記憶装置の記憶領域に格納されており、
前記プログラムが、前記コンピュータに、
（ｄ）前記記憶領域における前記レコードそれぞれの配置を、当該レコードが含む前記サンプル属性のレベルに基づいて決定する、ステップを実行させる命令を更に含む、
付記２３または２４に記載のプログラム。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】０２１５
【補正方法】変更
【補正の内容】
【０２１５】
（付記２６）
前記データベースにおいて、複数の前記サンプル属性が設定されており、
前記（ｄ）のステップにおいて、
前記レコード毎に、複数の前記サンプル属性のレベルの合計を求め、
求めた合計が閾値を超えないレコードについては、当該レコードが含む前記サンプル属性のレベルの個々の値に基づいて配置を決定し、
求めた合計が閾値を超えるレコードについては、前記合計に基づいて配置を決定する、
付記２５に記載のプログラム。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】０２１６
【補正方法】変更
【補正の内容】
【０２１６】
（付記２７）
前記データベースに含まれるテーブルにレコードの配置を定めるクラスタ属性が設定されており、
前記（ｄ）のステップにおいて、
前記記憶領域における前記レコードそれぞれの配置を決定する際に、前記テーブルに含まれ、且つ、前記サンプル属性のレベルが等しい複数のレコードについては、前記クラスタ属性の値に基づいて配置を決定する、
付記２５または２６に記載のプログラム。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】０２１７
【補正方法】変更
【補正の内容】
【０２１７】
（付記２８）
前記データベースにおいて、小さい値を出力する確率に比べて、大きい値を出力する確率が指数関数的に小さくなる、ハッシュ関数を用いて、前記レベルとなる前記ハッシュ値が計算されている、
付記２３〜２７のいずれかに記載のプログラム。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】０２１８
【補正方法】変更
【補正の内容】
【０２１８】
（付記２９）
前記（ｃ）のステップにおいて、前記目標サンプル属性のレベルが前記目標レベルより大きいことを、前記レベル条件として設定し、前記目標サンプル属性のレベルが前記目標レベルより大きいレコードを取得して、前記サンプルに包含させる、
付記２３〜２８のいずれかに記載のプログラム。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】０２１９
【補正方法】変更
【補正の内容】
【０２１９】
（付記３０）
前記（ｃ）のステップにおいて、判定の結果、前記サンプル条件が満たされていない場合に、前記目標レベルを値が小さくなるように変更して、再度、前記レコードを取得して、前記サンプルに包含させる、付記２９に記載のプログラム。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】０２２０
【補正方法】変更
【補正の内容】
【０２２０】
（付記３１）
前記プログラムが、前記コンピュータに、
（ｅ）前記データベースが複数の前記テーブルを含む場合に、前記入力データに基づいて、複数の前記テーブルの中から、前記目標サンプル属性がサンプル属性として設定されているテーブルを、前記サンプリングの目標となる目標テーブルとして指定する、ステップを実行させる命令を更に含み、
前記（ｃ）のステップにおいて、前記目標テーブルから取得されたレコードを前記サンプルに包含させる、
付記２３〜２８のいずれかに記載のプログラム。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】０２２１
【補正方法】変更
【補正の内容】
【０２２１】
（付記３２）
前記（ｅ）のステップにおいて、同一の前記目標サンプル属性がサンプル属性として設定されている２以上の前記テーブルを、前記目標テーブルとして選択し、
前記（ｃ）のステップにおいて、選択された前記２以上のテーブルそれぞれから取得したレコードを、同一の前記目標サンプル属性に基づいて結合し、結合によって生成されたレコードを前記サンプルに包含し、前記サンプル条件が満たされているかどうかを判定する、
付記３１に記載のプログラム。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】０２２２
【補正方法】変更
【補正の内容】
【０２２２】
（付記３３）
前記プログラムが、前記コンピュータに、
（ｆ）前記サンプルに包含された前記レコードの集合を用いて、前記入力データに対する出力を計算する、ステップを実行させる命令を更に含む、
付記２３〜３２のいずれかに記載のプログラム。
【国際調査報告】
2017135264.tif 000020
2017135264.tif 000021