JP2000187668A - グループ化方法と重複排除方法 - Google Patents

グループ化方法と重複排除方法

Info

Publication number
JP2000187668A
JP2000187668A JP10364729A JP36472998A JP2000187668A JP 2000187668 A JP2000187668 A JP 2000187668A JP 10364729 A JP10364729 A JP 10364729A JP 36472998 A JP36472998 A JP 36472998A JP 2000187668 A JP2000187668 A JP 2000187668A
Authority
JP
Japan
Prior art keywords
rows
row
value
hash
grouping
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP10364729A
Other languages
English (en)
Inventor
Shinji Fujiwara
真二 藤原
Kazutomo Ushijima
一智 牛嶋
Itaru Nishizawa
格 西澤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP10364729A priority Critical patent/JP2000187668A/ja
Priority to US09/469,615 priority patent/US6381601B1/en
Publication of JP2000187668A publication Critical patent/JP2000187668A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • G06F16/24556Aggregation; Duplicate elimination
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/953Organization of data
    • Y10S707/954Relational
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99937Sorting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

(57)【要約】 【課題】入力リストの一つ以上の列の値が同じ行を一つ
のグループとする処理の高速化 【解決手段】入力リスト1をスキャンし、グループ化を
行う列の空でない部分集合となる列の値を引数としたハ
ッシュ関数によりハッシュ値を生成し、そのハッシュ値
を持つ行が2行以上あるかどうかを判定する。入力リス
ト1を再度スキャンし、1回目のスキャンで同一のハッ
シュ値を持つ行が1行しかないと判定されたハッシュ値
を持つ行に関しては、直ちに集計列の計算処理8を行
い、その結果を出力し、一方、2行以上あると判定され
た行に対してはその行を通常のグループ化処理の入力と
する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、特定の列の値が相
互に同じである、データベースの複数のレコード(行)
をグループとして識別するグループ化方法およびデータ
ベース内の互いに重複する行を削除する重複排除方法に
関する。
【0002】
【従来の技術】データウェアハウスシステムではデータ
ベースに対してユーザやアプリケーションサーバが問い
合わせを発行する。特に、近年、多次元解析サーバ、デ
ータマイニングサーバ、ERP(業務統合パッケージ)
などのアプリケーションサーバからデータベースに問い
合わせが発行される場合が多くなってきた。データベー
スは一般に複数のレコードにより構成され、各レコード
は複数の項目に対するデータを含む。たとえば、ある製
品の部品に関する情報を含む部品データベースは、それ
ぞれ一つの部品に関するデータを表すレコードからな
り、各レコードは、その部品に関して定められた複数の
項目についてのデータを含む。たとえば、部品のサイ
ズ、強度、価格、仕入先等である。これらの項目は部
品、したがってレコードには依らないで同じである。し
たがって、このような構造のデータベースは一般には表
形式のデータと見なすことができる。各行は、一つの部
品に対応し、各列は、部品に対して定めた一つの項目に
対応する。以下では、このような表形式のデータベース
を議論する。その際、データベースを表あるいは表デー
タあるいはテーブルと呼び、あるレコードを行データあ
るいは単に行と呼ぶことがある。同じ項目に関する複数
のレコード内の互いに対応するデータの集合を列データ
あるいは単に列と呼ぶことがある。データウェアハウス
システムではユーザからの問い合わせが示す条件を満た
す複数の行データをデータベースから検索する。検索さ
れた複数の行データについて問い合わせが指定する処理
をさらに行い、その結果をユーザに通知する。データベ
ースの問い合わせの中で、特に最近多く用いられるよう
になってきた処理に、集計処理およびグループ化処理が
ある。集計処理とは、問い合わせの結果得られた複数の
行データに関して、問い合わせが指定した特定の列デー
タの最大値、最小値、あるいは平均値を求めたり、ある
いは、問い合わせの結果得られた行の数を求めるとい
う、問い合わせ結果データに関して行う数値計算処理で
ある。グループ化処理とは、問い合わせの結果得られた
複数の行の内、問い合わせが指定するある複数の列の組
(グループ化列)のデータが互いに等しい複数の行を一
つのグループとして分類する処理である。グループ化処
理では各グループに対して集計処理を行う。グループ化
処理は、例えば、年齢、地域、性別の売り上げ額の平均
を求める等の処理に用いられる。ちなみに、グループ化
処理の処理結果は、グループ化列の値と集計処理の結果
の組から成る。
【0003】従来のグループ化方法としては、Selim G.
Akl, “Parallel Sorting Algorithms,”Academic Pre
ss, Inc.(米)、p.48〜49に開示されているマー
ジソートに基づく方式やM. Papazoglou, W. Valder,
“Relational Database Management,” PRENTICE HALL
(米)p.262〜264に開示されているハッシュ方
式をあげることができる。
【0004】図4にマージソート方式によるグループ化
処理のフローチャートを示す。マージソート方式では、
データベースを構成する複数のレコードの特定の列の値
が同じ複数のレコードは同一のグループに属し、その列
の値が他のレコードと異なるレコードは、他のグループ
に属するように、全レコードが区分される。そのため
に、マージソート方式では、グループ化の前に全レコー
ドをその特定の列に関してソートする。すなわち、まず
二次記憶装置から複数のレコード順次読み出す。ここで
は二次記憶装置は、そこからのデータの読み出しあるい
はそこへのデータの書き込みは、ブロックという一定サ
イズのデータを単位にして行うように構成されている仮
定する。一つのブロックは一般には複数のレコードを含
む。したがって、まず複数のレコードを含む一つのブロ
ックを主記憶装置に読み込む(40)。読み込まれたブ
ロック内の複数のレコードをいずれかの列のデータに関
して主記憶装置上の作業領域を使用してソートした後
(41)、そのレコードを一つのブロックとして二次記
憶装置に書き戻す(42)。この操作をすべてのレコー
ドが読み込まれるまで複数のブロックに対して繰り返
す。(43)。こうしてブロックごとにソートされた複
数のレコード(すなわち、レコードリスト)二次記憶装
置に形成された後に、それらのブロックの間で二次記憶
装置内の作業領域を使用してマージソートを行ない、全
ブロックに属するソートされたレコードのリストを二次
記憶装置上に得る(44)。以上の操作の後、ソートさ
れたレコードリストの全レコードの特定の列に属するデ
ータを二次記憶装置から順次読み込みながら(45、4
7)、それらのレコードに対してその列に関するグルー
プ化処理を行なう(46)。すなわち、その列の値が同
じ複数のレコードは同一のグループに属し、その列の値
が他のレコードと異なるレコードは、他のグループに属
するように、全レコードが区分される。
【0005】しかしこのマージソート方式では、上記ス
テップ44では、二次記憶装置内の作業領域を使用して
全レコードのマージソートを行なうため、二次記憶装置
に対して大量のI/O動作が発生し、マージソート処理
に時間が掛かる。またマージソート処理(ステップ4
4)とグループ化処理(ステップ46)は、パイプライ
ン的に並行して実行できず、マージソート処理(ステッ
プ44)のために二次記憶装置をアクセスした後にグル
ープ化処理(ステップ46)のために二次記憶装置を再
度アクセスしなければならない。このため、この方式で
はマージソート処理の時間とグループ化処理の時間との
総和に等しい処理時間が掛かり、全体として処理時間が
掛かる。この課題を解決する方法として用いられて来た
のがハッシュ方式である。
【0006】図5に従来のハッシュ方式によるグループ
化処理のフローチャートを示す。ハッシュ方式では、二
次記憶装置に格納された一つのブロックを主記憶装置上
に読み出すと(50)、読み出されたブロック内の複数
のレコードの各々に対して主記憶装置上の作業領域を使
用してハッシュ関数を用いたグループ化処理を行なう
(51)。同時に並行して集計処理を実行し、主記憶装
置内の集計領域に保持された各グループ毎の集計結果を
更新して行く(52)。
【0007】すなわち、主記憶装置上の作業領域内にレ
コードが新たに読み込まれる毎にそのレコード内のデー
タの内、特定の列に属するデータに対してハッシュ値を
求め、主記憶装置上の作業領域内に準備されたハッシュ
表にそのレコードを登録する。ハッシュ表は、以下に述
べるポインタ領域、各レコードの記憶領域、各レコード
の記憶領域の後続位置に設けられた集計領域とポインタ
領域の集合を指す。すなわち、このハッシュ表には、異
なるハッシュ値に対応する複数のポインタを保持する複
数のポインタ領域が準備され、いずれかのレコードが主
記憶装置に新たに読み込まれたときに、そのレコードの
データの内、グループ化に使用する特定の行に属するデ
ータに対してハッシュ値を上記ハッシュ関数を用いて算
出する。そのハッシュ値を有するレコードが、それまで
に検出されていないときには、このポインタ領域内のこ
のハッシュ値に対応するポインタ領域にそのレコードの
上記主記憶領域内の記憶位置を示すポインタを記憶す
る。こうして、そのレコードがそのハッシュ値を有する
グループに登録されたことになる。さらに、そのレコー
ドがそのハッシュ値を有するグループの唯一のメンバー
と仮定して、そのレコード内のデータを用いてそのグル
ープに対する集計処理を行い、集計処理結果データをそ
のレコードの記憶領域の次に位置する集計領域に記憶す
る。その集計領域のさらに後続の領域は、同じグループ
に属する他のレコードをポイントするポインタを記憶す
る領域として予約される。
【0008】上記主記憶装置に新たに読み込まれたレコ
ードに対するハッシュ値を有する他のレコードが既に上
記ハッシュ表に登録済みであるときには、既に登録済み
のレコードの後続のポインタ記憶領域にこの新たなレコ
ードの記憶領域のアドレスをポインタとして記憶する。
こうしてこの新たなレコードをそのハッシュ値を有する
グループに登録したことになる。さらに、この新たなレ
コードの記憶領域の後続の記憶領域に新たな集計領域と
ポインタ領域を確保する。この新たな集計領域には、す
でに登録されたレコードに対して既に記憶された集計結
果データとこの新たなレコード内のデータとに基づい
て、この新たなレコードを含むグループに対する集計処
理結果を算出し、この新たなレコードの記憶領域の後続
の集計結果領域に書き込む。以上の処理を全てのレコー
ドに対して繰り返す(55)。但し、主記憶装置に読み
込まれたレコードの数が増大すると、上記ハッシュ表の
領域が大きくなりすぎ、次の新たなレコードを主記憶装
置に保持できなくなることが生じる。このときには、次
のレコードを主記憶装置のハッシュ表領域に格納できる
か否かを判定し(53)、判定結果が非のときには、ハ
ッシュ表に既に登録された他のレコードを二次記憶装置
に追い出した上で(54)、次の新たなレコードの処理
を開始する。
【0009】このグループ化処理(51)と集計処理
(52)はパイプライン的に実行可能である。すなわ
ち、ある新たに主記憶装置に読み込まれたレコードに対
するグループ化処理を実行し、その後、そのレコードが
属するグループに対する集計処理を順次実行する。この
集計処理を実行するときに、それと並行して主記憶装置
に新たに読み込まれたさらに後続のレコードに対するグ
ループ化処理が実行される。したがって、グループ化の
ための一時ファイルを作成せずにグループ化処理を行な
う。しかし、ステップ54により主記憶装置よ外部記憶
装置の間でデータの転送がランダムに発生する。したが
って、外部記憶装置へのI/Oアクセスの時間が問題と
なる。
【0010】
【発明が解決しようとする課題】ハッシュグループ化方
式によるグループ化処理は、グループ化処理によりデー
タの行数が大幅に削減できることを前提としている。そ
のため、グループ重複度(一つのグループに属する行の
数)のグループ間での平均値(これを以下ではグループ
平均重複度と呼ぶ)が1に近い場合には、この手法はあ
まり効果を発揮しない。
【0011】しかし、実際の多次元解析においては、解
析の軸が多くなってくると、各グループに属する行が1
行というグループが多くなってくる。このような場合、
ハッシュ方式ではハッシュ表が主記憶装置上に展開でき
なくなり、外部記憶装置へのI/O動作が多く発生し、
グループ化処理に必要な時間が増大するという問題があ
る。また、多段変換方式でも、前倒ししたグループ化に
よる行数削減の効果が得られないため、多段に分解した
オーバヘッドによりかえって処理コストが増加してしま
うという問題がある。
【0012】また、別の問い合わせ処理の基本処理であ
る重複排除処理に関しても同様に、行の重複度が問題と
なる。ここで、行の値が同じである行の数をその行の重
複度という。各行の重複度の平均値(以後これを平均行
重複度と呼ぶ)が1に近い場合には、ほとんど重複行が
存在しないことになる。この場合、従来の重複排除処理
では効率よく処理することができず、そのような場合に
はソートマージに基づく方式を採らざるを得なかったと
いう問題があった。
【0013】本発明では、平均グループ重複度が1に近
い場合のグループ化処理を効率よく実行するグループ化
方法を提供することを目的とする。
【0014】本発明の他の目的は、平均行重複度が1に
近い場合の重複排除処理を効率よく実行する重複排除方
法を提供することを目的とする。
【0015】
【課題を解決するための手段】上記の目的を達成するた
め、本発明によるグループ化方法は、データベースに含
まれるレコードリストの複数の行の各々に対して、その
行の、一つ以上の予め指定されたグループ化用の列の少
なくとも一部の列の値と同一の値を有する少なくとも一
つの他の行が存在する可能性がないかを判別し、上記判
別により上記他の行が存在する可能性がないとそれぞれ
判別された一部の複数の行をそれぞれ一つのグループに
属する行と判定し、上記レコードリストの上記複数の行
の内の上記一部の行以外の他の複数の行を、上記グルー
プ化用の列の値が同じである複数の行が同一のグループ
に属するように、複数のグループに区分するように第2
の処理を実行するステップを有する。
【0016】より具体的には、上記可能性を判別するス
テップは、データベースに含まれるレコードリストの複
数の行の各々に対して、その行の、一つ以上の予め指定
されたグループ化用の列の少なくとも一部の列の値を引
数とするハッシュ関数によりハッシュ値を生成し、上記
複数の行に対して生成された複数のハッシュ値により、
各行に対して生成されたハッシュ値と同一のハッシュ値
を有する少なくとも一つの他の行が存在するか否かを判
別し、上記判別により同一のハッシュ値を有する他の行
が存在しないとそれぞれ判別された一部の複数の行を、
グループ化用の列の上記少なくとも一部の列の値が同一
である他の行が存在する可能性がない行と判定するステ
ップを有する。この方法は、平均グループ重複度が1に
近い場合に効果的である。
【0017】本発明による重複排除方法では、上記グル
ープ化方法と同じ処理を重複排除処理にも同様に適用す
る。
【0018】さらに、本発明は、平均グループ重複度が
1に近くない場合にも有効なグループ化方法として、繰
り返しバケット分割を行い、繰り返し毎に複数のハッシ
ュ関数を順次切り替えて使用するグループ化処理方法も
提供する。
【0019】
【発明の実施の形態】以下、本発明に係るグループ化方
法と重複排除方法を図面に示したいくつかの実施の形態
を参照してさらに詳細に説明する。なお、以下において
は、同じ参照番号は同じものもしくは類似のものを表わ
すものとする。また、発明の第2の実施の形態以降にお
いては、発明の第1の実施の形態との相違点を主に説明
するに止める。
【0020】<発明の実施の形態1>本実施の形態で使
用するデータベースは、任意の計算機(図示せず)に接
続された外部記憶装置(図示せず)に記憶され、以下に
述べる処理は、その計算機の主記憶装置(図示せず)と
上記外部記憶装置を使用してその計算機内の処理装置
(図示せず)により実行される。ここでは、その計算機
は、ワークステーション等の単一のプロセッサ(図示せ
ず)からなる計算機であると仮定する。しかし、その計
算機は、多数のプロセッサを含む並列計算機でもよい。
【0021】図1はビットマップを用いた本発明のグル
ープ化処理の一実施形態の概略を示す図である。以下に
その手順を示す。
【0022】(a)データベースに対するユーザからの
問い合わせの結果、レコードリスト1が検出されたとす
る。このレコードリストは外部記憶装置内に記憶されて
いるとする。このレコードリスト1内の全レコードを順
次外部記憶装置から主記憶装置上に読み出す。各レコー
ドに対して、グループ化に使用する列(グループ化列)
G={g1,…,gk}の空でない部分集合となるハッ
シュ列H⊆G,H≠{}の値を引数として、ハッシュ関
数hash1( )でハッシュ値を生成する(4)。す
なわち、グループ化の基準に一つの列Gを使用するとき
には、ハッシュ列Hは、その一つの列に等しい。グルー
プ化の基準に複数の列Gを使用するときには、ハッシュ
列Hは、複数の列Gの内の一つの列または複数の列の組
み合わせである。ハッシュ関数hash1( )は、そ
のハッシュ列Hが採りうる全ての値の数よりも少ない数
のハッシュ値を採りうるように定めておく。このハッシ
ュ値をアドレスとしてビットマップB1(5)の該当す
るエントリを参照する。ビットマップB1は、ハッシュ
列Hに対してハッシュ関数hash1( )が採りうる
全ての値に対応して設けられたビット記憶領域を有する
ビットマップである。
【0023】(b)ビットマップB1のそのエントリが
0ならば、当該エントリのビットを1にする。ビットマ
ップB1のそのエントリが既に1ならばビットマップB
2(6)の対応するエントリを1にする。ビットマップ
B2もビットマップB1と同じサイズを有し、各ビット
記憶領域は、ビットマップB1内の一つのビット記憶領
域に対応する。以上の処理を全レコードに対して繰り返
す。以上の処理の結果、ビットマップB2のエントリが
0ならば、当該エントリに対応するハッシュ値を持つレ
コードは1つしかないことが分かる。ビットマップB2
のエントリが1ならば、当該エントリに対応するハッシ
ュ値を持つレコード(行)は複数あることになる。ビッ
トマップB1、B2の対応するエントリがともに0なら
ば、当該エントリに対応するハッシュ値を持つレコード
(行)は存在しない。
【0024】(c)レコードリスト1を再度読み込み
(3)、各行の前記ハッシュ列Hの値を引数として同じ
ハッシュ関数hash1( )でハッシュ値を生成し
(9)、そのハッシュ値をアドレスとしてビットマップ
B2(6)の該当するエントリを読み出す。
【0025】(d)ビットマップB2のエントリが0な
らば、当該エントリに該当するハッシュ値を持つ行は1
つしかない。従って、その行のグループ化列の値と同じ
グループ化列の値を持つ他の行が存在する可能性はない
ことになる。したがって、当該行と同じグループに属す
る行は現在処理中の行しかないことがわかるので、主記
憶装置の作業領域上に保持されたその行のデータ内の、
集計対象の列について直ちに集積処理(8)を行い、そ
の結果をその行を含むグループに対する集計処理結果デ
ータとして出力する。なお集計処理の対象である集計列
をF={f1,…,fm}とする。すなわち、一般に、
集計処理は、複数の集計列の各々に対して行う複数の処
理からなっている。
【0026】(e)一方、B2のエントリが1ならば、
当該エントリに該当するハッシュ値を持つ行が2つ以上
あることがわかるので、当該行を通常のグループ化処理
(13)の入力とする(7)。通常のグループ化処理で
は、例えば、従来のマージソートに基づくグループ化方
法を適用する。しかし、ハッシュ関数に基づく方法など
他の方法を適用することもできる。
【0027】マージソートによるグループ化方法では、
従来と同様に、まず、一行にてグループを構成する行を
除いた入力レコードリストをグループ化に使用する列
(グループ化列)Gでマージソートして(10)、ソー
ト済みのレコードリスト(11)を外部記憶装置上に生
成する。次にソート前提のグループ化処理(12)によ
り各グループ毎の集計処理を行い、その結果を出力す
る。ステップ7以降の処理は、図4に示した従来の処理
と全く同じように実行される。
【0028】なお、本実施形態ではビットマップB1と
B2を用いて各エントリの出現回数を0回出現、1回出
現、2回以上出現の3つに区分して管理している。すな
わち、各ビットマップの内容と出現回数は以下の通りで
ある。
【0029】 出現回数 B1 B2 0回 0 0 1回 1 0 2回以上 1 1 図2には本発明のビットマップを用いたグループ化処理
の詳細な流れを示す図である。まず最初に、ビットマッ
プB1及びB2の領域を主記憶装置の作業領域上に確保
し、各エントリのビットを0に初期化する(20)。ビ
ットマップB1及びB2のエントリ数は同数とし、レコ
ードリストL(1)の行数の1/2以上のエントリ数を
確保することとする。なぜなら、レコードリストLの行
数の1/2未満だと、平均グループ化重複度が1で、か
つ、ハッシュ列Hに対するハッシュ値が一様に分布した
としても、ハッシュ値の平均重複度が2となってしま
い、本発明による高速化が期待できないからである。効
率を上げるためには、ビットマップB1及びB2のエン
トリ数はハッシュ値のシノニムも考慮に入れて、入力レ
コードリストLの行数の1.4倍以上を確保することが
望ましい。また、確保したビットマップのエントリ数に
あわせてハッシュ関数hash1( )を設定する。
【0030】次に、処理すべきレコードリストL内の複
数のレコードを外部記憶装置から主記憶装置内の作業領
域に順次読み込む。1行(レコード)が読み込まれる
と、ハッシュ値hadrを求める(21)。ハッシュ値
hadrでビットマップB1の該当するエントリの値を
読み出す。読み出した値をb1valとする(22)。
次に、値b1valが0かどうかを判定し(23)、も
し0ならば、ビットマップB1の該当するエントリのビ
ットに1をセットする(24)。そうでないなら、ビッ
トマップB2の該当するエントリのビットに1をセット
する(25)。以上の(21)から(25)までの処理
をレコードリストが終了するまで繰り返す(26)。
【0031】全てのレコードリストLに対して上記処理
を施した後、レコードリストL内の全レコードを先頭か
ら再度外部記憶装置から主記憶装置内の作業領域に順次
読み込む。(27)。1行(レコード)が読み込まれる
とその行(レコード)に対して再度同じハッシュ関数を
用いてハッシュ値hadrを求める(28)。もしステ
ップ21でこの行に対して生成したハッシュ値hadr
を主記憶装置等に記憶しておくことができ、再利用でき
るのであれば、ステップ28では、再度ハッシュ値ha
drを生成する必要はなく、記憶された値を再利用して
もよい。次に、ハッシュ値hadrでビットマップB2
の該当するエントリを読み出す。読み出した値をb2v
alとする(29)。次に値b2valが0かどうかを
判定し(30)、もし0ならば当該行と同一のグループ
に属する行は他にないので、集計列F={f1,…,f
m}の計算処理を行い(31)、その結果をその行を含
むグループに対する集計処理結果として出力する(3
2)。そうでないなら、当該行を通常のグループ化処理
の入力とする。すなわち、当該行を通常のグループ化処
理に対して引き渡し、そのグループ化処理の出力行があ
ればグループ化処理の結果として出力する(33)。以
上の(28)から(33)までの処理を入力リストが終
了するまで繰り返す(34)。
【0032】そして、最後に通常のグループ化処理に入
力終了を通知し、そのグループ化処理から与えられる集
計結果をグループ化処理の結果として前記の出力結果と
合わせて出力する(35)。
【0033】図3は上記グループ化処理の集計列計算処
理に用いる集計関数変換表39の一例である。集計列計
算処理は、グループに属する行が1行しかない場合には
ステップ31で実行され、そうでないときにはステップ
33で呼び出された通常のグループ化処理の中で実行さ
れる。すなわち、集計列計算処理は、グループ化処理に
対してユーザが指定した関数の値を各グループの各集計
列に対して計算する処理である。ここでは、集計列計算
処理は、集計関数変換表39の左列に記載されているよ
うに、合計を求める関数SUM、最大を求める関数MA
X、最小を求める関数MIN、平均を求める関数AV
G、行数を求める関数COUNTを各グループの各集計
列について実行する処理からなると仮定する。ステップ
31では、集計関数変換表39内の関数COUNT以外
の他の関数の値としては、集計関数変換表39の右列に
記載されているように、各集計列C1の値をそのままそ
の集計列に対する関数の値として出力し、それぞれのグ
ループに分類された行数を求める関数COUNTの値と
して、それぞれのグループに分類されたレコードのうち
集計列C1に有効な値を持つ行数を求める関数COUN
Tの値として、集計列C1の値がNullであれば定数
0を、Nullでなければ定数1を出力し、また、問い
合わせが集計列C1の値が0か否かに依らないでグルー
プの行数を出力することを要求するときには、定数1を
出力する。これにより、グループ化処理に対してユーザ
が指定した集計関数の値を、以上のようにして抽出され
た一行しか含まれないグループに対しては、計算するこ
となく簡単に決定できる。集計関数としては、これらの
関数以外にも2乗和を求める関数や2乗平均を求める関
数など、各種集計関数が適用可能である。集計関数が2
乗和を求める関数である場合には、以上のようにして抽
出された一行しか含まれないグループに対しても集計関
数の値を計算する必要はある。しかし、2乗和を求める
集計関数の場合には、グループ内の行数が1行しかない
場合には、その行のデータの内、集計列に属するデータ
の値の2乗を計算すればよく、その値は容易に計算可能
である。集計関数が2乗平均を求める関数の場合には、
グループ内の行数が1行しかないときには、その行のデ
ータの内、集計列に属するデータの値をそのまま出力す
ればよい。
【0034】平均のグループ重複度が1に近いレコード
リストでは、大部分のグループは1行しかない含まず、
それら以外のグループの数は極めて少ない。そのような
レコードリストに対して本実施の形態によるグループ化
処理を適用すると、グループ内の行数が1行しかないグ
ループは、予め検出され、それらに対する集計計算は簡
単に実行される。それらのグループ以外の極めて少ない
グループに対してのみ本来のグループ化処理(たとえば
マージソート方法によるグループ化処理またはハッシュ
関数によるグループ化処理)を実行すればよい。あるレ
コードリストの平均のグループ重複度が1に近いか否か
を判断するには、予め1に近い所定値を定めておき、そ
のレコードリストの平均のグループ重複度がその所定値
以下あるいは未満であるか否かを判断すればよい。この
所定値は、たとえば1.2とすることができる。より望
ましくは、実際に本実施の形態によるグループ化処理が
適用される計算機システムあるいはデータベースシステ
ムによりこの所定値を定めることが望ましい。すなわ
ち、本実施の形態によるグループ化処理を適用した方が
グループ化処理が高速に実行できるか否かを異なるグル
ープ重複度を有する複数のレコードリストについて評価
し、本実施の形態によるグループ化処理が高速となるグ
ループ重複度の最大値あるいはそお近傍の値を上記所定
位置とすればよい。
【0035】本実施の形態では、レコードリストの全体
を外部記憶装置から主記憶装置内の作業領域に2回読み
込む必要がある。しかし、そのための処理時間の増大よ
りも、通常のグループ化処理を実行すべきグループ数が
削減され、それにより処理時間が減少されることの効果
が大きく、レコードリスト全体に対するグループ化処理
の時間は大幅に減少できる。この効果は、処理すべきレ
コードリストの平均のグループ重複度が1に近い程、顕
著である。
【0036】<発明の実施の形態1の変形例> (1)以上では、グループ化処理は一つの処理装置を有
する計算機で実行されると仮定し、したがって、各処理
は逐次的に行うように記述した。しかし、複数の処理装
置を有し、それらに共通の外部記憶装置を有する計算機
ではグループ化処理処理をより高速に実行できる。すな
わち、レコードリストの読み込み(ステップ21、28
(図2))と、ビットマップのアクセス(ステップ2
2、24、25、28)と、通常のグループ化処理の実
行などを、上記複数の処理装置を用いてパイプライン的
に実行すると、処理時間をさらに短縮できる。但し、図
2のステップ21から26迄と、ステップ27から34
迄は互いに処理をオーバラップすることはできない。す
なわち、ステップ27はステップ21から26までの処
理が終わった後に起動される必要がある。
【0037】(2)さらに、並列データベースマシンの
ように、複数の処理装置を有し、各処理装置に付随して
外部記憶装置を有する計算機ではグループ化処理をより
高速に実行できる。すなわち、レコードリストを行単位
で、複数の部分レコードリストに分割し、それらの複数
の部分レコードリストを上記複数の処理装置の異なるも
のに割り当てて、それぞれの処理装置に割り当てられた
行をそれぞれの処理装置に随する二次記憶装置に記憶す
る。こうして上記レコードリストを複数の部分レコード
リストに区分する。それぞれの部分レコードリストを上
記複数の処理装置により並列に処理させればよい。
【0038】その場合、レコードリストの分割に当たっ
ては、各行に対する、ハッシュ列に対するハッシュ値に
基づき、同じハッシュ値を持つ複数の行が同じ外部記憶
装置に記憶され、同じ処理装置で処理されるように、各
行を割り当てる処理装置を決めることが望ましい。その
場合には、それぞれの処理装置は他の処理装置とは全く
独立に本処理をそれぞれに割り当てられた部分レコード
リストに対して適用できる。
【0039】そうでない場合には、各行を一度いずれか
の処理装置に割り当てた後に(その処理装置に属する二
次記憶装置に記憶させた後に)、各行のハッシュ列に対
するハッシュ値に基づき、同じハッシュ値を持つ複数の
行が同じ処理装置に割り当てるように、各行を再分配し
た後に、本処理を適用することが望ましい。なお、行が
水平分割されている場合のグループ化処理の最適化方法
の詳細については後で図10を用いて詳細に説明する。
【0040】(3)本実施の形態ではビットマップB1
とB2を用いて各ハッシュ値の出現回数を0回、1回、
2回以上の3つに区分して管理している。すなわち、ハ
ッシュ列に対するハッシュ値が採りうる異なる値の数を
nとすると、二つのビットマップB1、B2の総容量は
2nビットになる。しかし、3状態を2ビットで管理す
るのは実際には冗長であり、必要な主記憶装置内の領域
の容量が大きくなる。そこで、例えば、3のn乗が2の
2k乗よりも小さく、かつ、n>kとなるような自然数
kを選択できる場合、より小さな主記憶装置内の領域を
用いて各ハッシュ値の出現回数を管理できる。すなわ
ち、i番目のハッシュ値の出現回数が0,1,2という
状態にそれぞれ0×3i、1×3i、2×3iなる自然数
を割り当て、全ハッシュ値に割り当てられた自然数の総
和を2進数にて表す。すなわち、各ハッシュ値の出現回
数を3進数の1桁で表し、その3進数が示す数を2進数
にて表す。その総和は、3nよりも小さく、上記条件よ
りその総和は、22kよりも小さくなる。したがって、そ
の総和を2進数にて表すには、その2進数は2kビット
でよいことがわかる。したがって、上記二つのビットマ
ップ0B1、B2の総容量2nビットより少なくて済む
ことが分かる。
【0041】具体的には、2kビットの状態データの記
憶領域を主記憶装置上に確保し、その初期値を0にす
る。図2のステップ21でハッシュ値を求めた後に、図
2のステップ23〜25に代えて以下の処理を実行す
る。求められたハッシュ値が、ハッシュ関数が採りうる
i番目のハッシュ値とする。そのi番目のハッシュ値の
過去の(それまでの)出現回数が0回、1回のときに上
記状態データを更新し、その過去の出現回数が2回目の
ときには上記状態データを更新しないのはビットマップ
の時と同じである。すなわち、i番目のハッシュ値の出
現回数が2回目に達すると、その後にi番目のハッシュ
値が出現しても、上記状態データを更新しない。したが
って、上記状態データを更新する前に、上記状態データ
からi番目のハッシュ値の過去の出現回数を算出する。
そのために、上記状態データを自然数3iを表す2進数
で割り算し、得られた余りをさらに3で割り算する。得
られた余りが0,1,2のときにそのi番目のハッシュ
値の過去の出現回数が0回,1回あるいは2回以上とな
る。i番目のハッシュ値の過去の出現回数が0回あるい
は1回のときには、上記状態データを更新するために、
自然数3iを表す2進数を上記状態データに加算する。
加算される値は過去の出現回数が0回あるいは1回でも
同じである。i番目のハッシュ値の過去の出現回数が2
回以上のときには、上記状態データを更新しない。
【0042】図2のステップ29、30に代えて以下の
処理を実行する。ステップ28で求められたハッシュ値
の出現回数が1回であるかあるいはそうでないか(すな
わち2回以上であるか)を判別する。この判別の方法は
上に述べたとおりである。この出現回数が1回であると
きには、ステップ31に進む。出現回数が2回以上であ
るときには、ステップ33に進む。例えば、n=5、k
=4とすると、3の5乗=243、2の(2×4)乗=
256となり上記条件を満たす。この組み合わせを用い
ると、8ビットの2進数で5つのハッシュ値の各々に対
する3つの出現回数区分を管理することが可能となる。
単純に2ビットで1つのハッシュ値に対する3つの出現
回数区分を管理する場合には8ビットでは4エントリ分
の状態しか管理できないが、本変形例では状態管理に使
用する主記憶装置上の領域を20%削減することが可能
となる。但し、各ハッシュ値に対する出現回数区分を判
別するために上記のように除算を行わなくてはならず、
ビットマップを使用した場合よりもこの判別に時間が掛
かる。しかしながら、この除算を高速にできる演算器を
有する計算機では、この判別も高速に行うことができ
る。
【0043】<発明の実施の形態2>次に、本発明に掛
かる重複排除方法について説明する。図6は本発明の重
複排除処理の一実施形態の概略を示す図である。以下に
その手順を示す。
【0044】(a)データベースに対するユーザからの
問い合わせの結果、レコードリスト60が検出されたと
する。このレコードリストは外部記憶装置内に記憶され
ているとする。このレコードリスト1内のレコード内の
全レコードを順次外部記憶装置から主記憶装置上に読み
出す。各レコードに対して、リストを構成する複数の列
の空でない部分集合となる(すなわち、複数の列から選
ばれた一つまたは複数の列からなる)ハッシュ列Hを引
数として、hash1( )関数でハッシュ値を生成す
る(63)。ハッシュ関数hash1( )の引数はリ
ストの構成列C={c1,…,ck}の空でない部分集
合H⊆C,H≠{ }とする。ハッシュ関数hash1
( )は、そのハッシュ列Hが採りうる全ての値の数よ
りも少ない数のハッシュ値を採りうるように定めてお
く。このハッシュ値をアドレスとしてビットマップB1
(65)の該当するエントリを参照する。
【0045】(b)ビットマップB1のそのエントリが
0ならば、当該エントリのビットを1にする。ビットマ
ップB1のそのエントリが既に1ならばビットマップB
2(66)の対応するエントリを1にする。ビットマッ
プB2もビットマップB1と同じサイズを有し、各ビッ
ト記憶領域は、ビットマップB1内の一つのビット記憶
領域に対応する。以上の処理を全レコードに対して繰り
返す。以上の処理の結果、ビットマップB2のエントリ
が0ならば、当該エントリに対応するハッシュ値を持つ
レコードは1つしかないことが分かる。ビットマップB
2のエントリが1ならば、当該エントリに対応するハッ
シュ値を持つレコード(行)は複数あることになる。ビ
ットマップB1、B2の対応するエントリがともに0な
らば、当該エントリに対応するハッシュ値を持つレコー
ド(行)は存在しない。
【0046】(c)レコードリストを再度読み込み(6
2)、各行の前記ハッシュ列Hを引数として同じhas
h1( )関数でハッシュ値を生成し(64)、そのハ
ッシュ値をアドレスとしてビットマップB2(66)の
該当するエントリを読み出す。
【0047】(d)ビットマップB2のエントリが0な
らば、当該エントリに該当するハッシュ値を持つ行は1
つしかない。従って、当該行と同じ値を保持する他の行
が存在する可能性がないことがわかるので、直ちにその
行を重複排除処理後のレコードとして出力する。
【0048】(e)一方、ビットマップB2のエントリ
が1ならば、当該エントリに該当するハッシュ値を持つ
行が2つ以上あることがわかるので、その行と同じ値を
保持する他の行(重複行)が存在する可能性がある。し
たがって、当該行を通常の重複排除処理(68)の入力
とする(67)。通常の重複排除処理では、例えば、従
来のマージソートに基づく方法やハッシュ関数に基づく
方法など、種々の方法を適用する。図6では、通常の重
複排除方法としてマージソート方法を適用した場合の実
施例を示している。マージソート方法では、まず、重複
行を削除した後の行により構成される入力リストをリス
ト構成列Cでマージソートしてソート済みリストを外部
記憶装置上に生成する。次にそのリストに対してソート
前提の重複排除処理により重複行の削除を行い、その削
除後のリストを出力する。
【0049】図7は上記重複排除処理の詳細な流れを示
す図である。まず最初にビットマップB1及びB2の領
域を主記憶装置の作業領域上に確保し、各エントリのビ
ットを0に初期化する(70)。ビットマップB1及び
B2のエントリ数は同数とし、入力リストLの行数の1
/2以上のエントリ数を確保することとする。なぜな
ら、入力リストLの行数の1/2未満だと、行重複度が
1で、かつ、ハッシュ値が一様に分布したとしても、ハ
ッシュ値の平均重複度が2となってしまい、本発明によ
る高速化が期待できないからである。効率を上げるため
には、ビットマップB1及びB2のエントリ数はハッシ
ュ値のシノニムも考慮に入れて、入力リストLの行数の
1.4倍以上を確保することが望ましい。また、確保し
たビットマップのエントリ数にあわせてハッシュ関数h
ash1( )を設定する。
【0050】次に、処理すべきレコードリストL内の複
数のレコードを外部記憶装置から主記憶装置内の作業領
域に順次読み込む。1行が読み込まれると、ハッシュ値
hadrを求める(71)。ハッシュ値hadrでビッ
トマップB1の該当するエントリの値を読み出す。読み
出した値をb1valとする(72)。次に、b1va
lの値が0かどうかを判定し(73)、もし0ならば、
ビットマップB1の該当するエントリのビットに1をセ
ットする(74)。そうでないなら、ビットマップB2
の該当するエントリのビットに1をセットする(7
5)。以上のステップ71から75までの処理を入力リ
ストが終了するまで繰り返す(76)。
【0051】全ての入力リストLに対して上記処理を施
した後、入力リストL内の全レコードを先頭から再度外
部記憶装置から主記憶装置内の作業領域に順次読み込む
(77)。1行(レコード)が読み込まれるとその行
(レコード)に対して再度同じハッシュ関数を用いてハ
ッシュ値hadrを求める(78)。もしステップ71
の処理でこの行に対して生成したハッシュ値hadrを
主記憶装置等に記憶しておくことができ、再利用できる
のであれば、ここでは、再度生成する必要はなく、その
記憶された値を再利用する。次に、hadrの値でビッ
トマップB2の該当するエントリを読み出す。読み出し
た値をb2valとする(79)。次にb2valの値
が0かどうかを判定し(80)、もし0ならば当該行と
同一の値を持つ行は他にないので、その行をそのまま重
複排除処理結果として1行出力する(81)。そうでな
いなら、当該行を通常の重複排除処理の入力とする。す
なわち、当該行を引数として、たとえばマージソート法
を用いるかもしくはハッシュ表を用いる通常の重複排除
処理を呼び出し、この重複排除処理の出力行があれば重
複排除処理の結果として出力する(82)。以上のステ
ップ78から82までの処理を入力リストが終了するま
で繰り返す(83)。
【0052】そして、最後に通常の重複排除処理に入力
終了を通知し、通常の重複排除処理からその後出力され
る重複排除処理後のリストを出力する(84)。
【0053】重複排除処理を行う場合でも、リストLに
はほとんど重複する行がない場合が多い。すなわち、平
均行重複度が1に近い。そのため、上記重複排除方法に
より、通常の重複排除処理を行うべきリスト内の行の数
を大幅に削減でき、高速に通常の重複排除処理を行うこ
とが可能となる。したがって、上記重複排除方法を実行
する前にデータベースのレコードリストの平均行重複度
が1に近いか否かを判定し、レコードリストの行重複度
が1に近いときに上記重複排除方法を実行することが望
ましい。レコードリストの平均行重複度が1に近いか否
かを判定するには予め1に近い所定値を決めておき、そ
のレコードリストの平均行重複度がその所定値以下ある
いは未満であるか否かを判定すればよい。この所定値
は、一定値を使用することができるが、より望ましく
は、実際に本実施の形態による重複排除処理が適用され
る計算機システムあるいはデータベースシステムにより
この所定値を定めることが望ましいことは、先に述べた
グループ化処理のための所定値と同じである。
【0054】なお、重複排除処理はリストLの全ての構
成列をグループ化列とし、集計列がない特殊なグループ
化処理と等価である。後で図9を用いて説明する平均の
グループ重複度が2以上の場合に適用可能なハイブリッ
ドハッシュグループ化方法や、並列データベースにおけ
るグループ化処理の最適化方法は、重複排除処理を上記
特殊なグループ化処理へ等価変換することで、重複排除
処理にも適用することが可能となる。
【0055】図8は本発明の効果を説明するための問い
合わせの一例である。本問い合わせはデータベースのベ
ンチアークとして知られているTPC−Dベンチマーク
のQ16に相当する処理を行う問い合わせである。
【0056】本問い合わせは以下のような手順で実行さ
れる。
【0057】(a)PART表を次の単表選択条件で絞
り込む。
【0058】P_BRAND <> ’Brand#4
5’ and P_TYPE NOT LIKE ’M
EDIUM POLISHED%’and P_SIZ
E IN (49,14,23,45,19,3,3
6,9) その処理により得られたPART表とPARTSUPP
表とをPARTKEYをキーとして結合する。その後、
NOT IN条件で絞り込む。その結果、SF×120
k行程度の表が得られる。SFはスケールファクタ、1
k行は1000行を意味する。
【0059】(b){P_BRAND, P_TYP
E, P_SIZE, P_SUPPKEY}の列で重
複排除処理を行う。結果はSF×120k行程度とな
る。すなわち、平均行重複度がきわめて1に近いため、
重複排除処理を行ってもほとんど行数が減らない。
【0060】(c){P_BRAND, P_TYPE, P_SIZE}でグル
ープ化し、グループ毎の行数カウントを行う。
【0061】これらの一連の処理の内、(b)の重複排
除処理において実際に削除される重複行はSF=1の時
で数十行である。例えばビットマップB1及びB2のエ
ントリ数をSF*1Mビット程度確保すれば、ハッシュ
値によるシノニムがほとんど発生せず、ビットマップB
2に1が立つのは重複している数十行のみとなる。従っ
て、これらの数十行のデータのみに対して通常の重複排
除処理を実行すればよく、その他の行は2回目のスキャ
ン処理の時に直ちに結果として出力されていく。この
為、重複排除処理に要する時間は大幅に減少する。スケ
ールファクタSF=1とすると、必要となるビットマッ
プB1とB2の容量の総和は256KB程度であり、十
分主記憶装置上に確保できる。さらに、スケールファク
タSFが大きくなっても、処理装置が複数台あれば、実
施の形態1の変形例で述べたのと同様に、それらの処理
装置に対して入力リストを、構成列のハッシュ値に基づ
いて再分配することにより1台当たりに確保すべきビッ
トマップの容量は小さくできる。さらに、複数の処理装
置間で主記憶装置が共有可能であれば、これらの共有主
記憶装置上に大きなビットマップを1つ作成することで
スケールファクタSFが大きくなった場合でも本手法が
適用可能となる。
【0062】<発明の実施の形態3>図9は平均グルー
プ重複度が2以上のレコードリストを効率よくグループ
化するのに適したグループ化方法の処理フローを示す。
本実施の形態では、予め主記憶装置上に集計領域90を
確保しておく。集計領域90は、複数の行のそれぞれの
グループ化列G={g1,…,gk}の値を保持するG
フィールドと集計列F={f1,…,fm}の各々に対
する集計結果を保持するFフィールドで構成され、グル
ープ化列)G={g1,…,gk}の空でない部分集合
となるハッシュ列H⊆G,H≠{ }複数のハッシュ関
数hash−k( )(k=1,2,3,,m)の各々
の値hadrにより各エントリがアクセスされる。な
お、各ハッシュ関数hash−k( )(k=1,2,
3,,またはm)は、グループ化列Gの空でない部分集
合となるハッシュ列H⊆G,H≠{ }の値を引数と
し、互いに独立な関数になるように予め定める。(ここ
でハッシュ関数gがハッシュ関数fに対して独立である
とは、「定義域の全ての値x、yに対して、f(x)=
f(y)ならばg(x)=g(y)」とはならないこと
である。例えば、互いに素の関係にある3数a,b,c
(a,b>c)を用意し、f(x)= (xmoda)mod
c,g(x)=(x mod b) mod cと定義する。)一
方、集計領域90に収まらなかった行を複数のバケット
に分割し、それぞれのバケットを一時リストとして蓄え
るためのバケット分割領域92を外部記憶装置上に用意
する。また、バケット分割領域92に格納すべき行を一
時的に保持する領域を主記憶装置の作業領域上に確保す
る。本実施の形態では、簡単化のためにバケット分割の
ための関数fは先に求めたhadrを引数とした関数と
する。しかし、関数fにも先のハッシュ関数と同様に、
グループ化列Gの空でない部分集合を引数にした複数の
独立したハッシュ関数を用いてもかまわない。
【0063】本実施形態によるグループ化処理の流れは
以下の通りである。
【0064】まず、グループ化すべきレコードリスト内
の全レコードを順次外部記憶装置から主記憶装置上に読
み出す。入力リストの一つの行(入力行)に対して、第
1のハッシュ関数hash−1( )によりハッシュ値
hadrを求め(93)、集計領域90のエントリを検
索する(91)。ハッシュ値hadrに対する集計領域
のエントリが空の場合には、その行のグループ化列Gを
集計領域90のGフィールドに登録し、その行が属する
グループがその行のみからなると仮定してそのグループ
に対する集計結果データ(これは一般に複数の関数値か
らなる)を算出し、Fフィールドに登録する。ハッシュ
値hadrに対する集計領域90のエントリが空でな
く、かつ、当該エントリのGフィールドの値と上記入力
行のグループ化列の値が一致した場合には、上記入力行
は、そのエントリに登録済みの行と同じグループに属す
ると判断できる。このときには、そのエントリの集計フ
ィールドFの値と入力行の集計列を用いて、そのグルー
プに対する新たな集計結果データを計算し、そのエント
リの集計フィールドF内の集計結果データを置換する。
集計領域90のエントリが空でなく、かつ、当該エント
リのGフィールドの値が入力行のグループ化列の値と異
なる場合には、上記ハッシュ関数によるシノニムが発生
したと判断できる。この場合には、上記ハッシュ値ha
drに対するバケット分割のための関数fの値 f(h
adr)を算出し(94)、その値により、バケット分
割領域92内のバケット95−1,95−2…、95−
pの一つを選択し、入力行を、グループ化されていない
行として、一時的にそのバケットに記憶した後に当該バ
ケットの一時リストとして外部記憶装置へ出力する。但
し、バケットに記憶されるのは、その各行の全体ではな
く、その各行のグループ化列と集計列であるが、以下で
は、簡単化のために、その各行が記憶されるということ
がある。
【0065】但し、一時リストの外部記憶装置への出力
は、後にシーケンシャルアクセスを用いて一括して行
う。すなわち、その入力行は一時的に主記憶装置の作業
領域上に保持され、同じ関数値f(hadr)を有する
他の行がその後処理されたときには、その後続の行は、
主記憶装置の作業領域内の上記入力行の記憶位置に続く
記憶位置に記憶される。こうして、同じ関数値f(ha
dr)を有する複数の行が作業領域に記憶されたときに
は、それらの行はその関数値に対する一時リストとし
て、外部記憶装置にシーケンシャルアクセスを用いて一
括して転送される。同じ関数値f(hadr)を有する
複数の行がその後さらに処理されたときには、それらの
行は一時的に作業領域に記憶された後に、同様に外部記
憶装置に転送される。この新たに転送された一時リスト
は、同じ関数値f(hadr)を有する先に外部記憶装
置に転送された一時リストと組合わされた、同じ関数値
f(hadr)を有する行の一時リストとして管理され
る。他の関数値f(hadr)を有する他の複数の行に
ついても同じである。したがって、主記憶装置の作業領
域上には同じ関数値f(hadr)を有する全ての行を
記憶する領域を確保する必要はない。また、同じ関数値
f(hadr)を有する複数の行を一括して外部記憶装
置に転送するので外部記憶装置に対するランダムアクセ
スは発生しない。したがって、主記憶装置から外部記憶
装置への一時ファイルの転送は、一時リスト内の各行
を、それが発生する毎に外部記憶装置に転送する場合に
比較すると、高速に行える。全ての入力リストの処理が
終わった段階では、集計領域90の各エントリは、グル
ープ化列の値が同じである一つのグループに対するデー
タを保持している。すなわち、Gフィールドには、その
グループに属する一つまたは複数の行に共通のグループ
化列の値が記憶され、Gフィールドには、その一つまた
は複数の行に対する集計結果データが記憶される。した
がって、各エントリのG、Fフィールドのデータをその
エントリに対するグループ化処理の結果として出力す
る。その後この集計領域90内の全データを無効にす
る。
【0066】次にバケット分割領域92に空でない一時
リストが存在するとき、その一時リストたとえば95−
1を再度入力リストとして先ほどと同様の処理をハッシ
ュ関数を変更して再帰的に行う。用いるハッシュ関数h
ash−kのkは、 (当該入力リストの再分割回数+1) となるようにし、繰り返し毎に添え字を1ずつ増やすよ
うにする。この一時リストに対する処理の過程では、一
時リストに含まれる複数の行の内で、先に述べたのと同
じ条件を満たす行を集計領域90に新たに登録する。ま
た、この条件を満たさない行は分割バケットとして、新
たなバケット分割領域を別途用意し、そのバケット分割
領域92内の、使用したハッシュ値に依存する領域に記
憶する。この一時リストに対する処理は、一時リストの
全ての行が集計領域90内で集計され、溢れが発生しな
くなるまで再帰的に繰り返される。
【0067】他にバケット分割領域92に、最初のハッ
シュ関数hash−1を使用した処理で生成された空で
ない他の一時リストが存在するとき、当該他の全ての一
時リストについても上記と同様に再帰的に処理する。こ
うして、以上の処理を全てのバケットの一時リストが空
になるまでハッシュ関数を変更して繰り返す。一時リス
トが空になると全ての行がグループ化されたことにな
る。本方式を、以後ではハイブリッドハッシュグループ
化処理(HHGB)と呼ぶことにする。
【0068】本手法によると、集計領域90と分割パケ
ットの一部を一時的に保持する作業領域を用いてハッシ
ュ方式によるグループ化処理を行うことができる。した
がって、従来のハッシュ方式によるグループ化処理のよ
うに大きなハッシュ表領域を主記憶装置上に確保する必
要はない。また、従来のハッシュ方式によるグループ化
処理では、ハッシュ表領域のサイズを制限したときある
いはグループの数が増大したとき、外部記憶装置へのラ
ンダムアクセスが発生するが、本実施の形態では必要と
する主記憶装置上の領域のサイズが小さくてよく、さら
に外部記憶装置へのアクセスはシーケンシャルアクセス
を利用して行うことができ、外部記憶装置へのアクセス
時間を低減できる。また、グループ数が少ない場合には
集計領域90に対してシノニムが発生しないため、外部
記憶装置へのアクセスが不要となり、パイプライン処理
でグループ化処理を行うことが可能となる。すなわち、
外部記憶装置からの入力リストの後続の行の読み込みと
並行して、読み込み済みの行に対して、ハッシュ関数値
の算出、それによる集計領域90の読み出し、その結果
による集計領域90内のデータの更新を行うことができ
る。
【0069】<発明の実施の形態4>以上、グループ化
処理の高速化方法について、平均グループ重複度が1に
近い場合と、平均グループ重複度が2以上の場合のそれ
ぞれについて従来よりも高速な処理方法を示してきた。
次に、データが行単位で水平分割格納されている並列デ
ータベースシステムにおいてこれらの方式を最適に適用
する、グループ化処理の最適化する方法について説明す
る。
【0070】図10は並列データベースに対するグルー
プ化処理を最適化する方式を示す図である。ここでは簡
単のため、並列データベースシステムは、複数の計算機
と、それぞれの計算機に付随した複数の外部記憶装置に
より構成される。データベースのレコード表(レコード
リストとも言う)は行単位に分割され、その結果複数の
部分レコード表(分割リストとも言う)に分割され、複
数の部分レコード表は、上記複数の外部記憶装置に分散
して記憶される。それらの計算機で実行される基本プロ
グラム(以下ではこれらを処理単位と呼ぶ)は、問い合
わせの受付ならびに結果の応答ならびに問い合わせ処理
の一部を受け持つプログラム(以下、これをフロントエ
ンドサーバ(FES)と呼ぶ)と、データベースのへの
アクセスならびに問い合わせが要求する処理するプログ
ラム(以下ではこれをバックエンドサーバ(BES)と
呼ぶ)とで構成されているとする。フロントエンドサー
バは、少なくとも一つの計算機上で実行され、バックエ
ンドサーバは、複数の計算機の各々上で実行される。フ
ロントエンドサーバが実行される計算機上でもバックエ
ンドサーバは実行される。フロントエンドサーバは、各
計算機に搭載されてもよい。いずれかの計算機に搭載さ
れたフロントエンドサーバが、問い合わせを受付け、こ
の問い合わせが要求する処理の実行を、その計算機およ
び他の複数の計算機上に搭載された複数のバックエンド
サーバに要求する。各バックエンドサーバがその処理
を、そのバックエンドサーバが搭載された計算機に付随
する外部記憶装置に記憶された、上記データベースの一
部のデータ(部分レコード表)に対して他のバックエン
ドサーバでの処理の実行と並行して実行する。各バック
エンドサーバは、処理結果をフロントエンドサーバに通
知し、フロントエンドサーバは、それぞれのバックエン
ドサーバから通知された処理結果をまとめて、問い合わ
せへの応答を作成し、問い合わせ元のプログラムに送付
する。本実施の形態では、この問い合わせがグループ化
を含んでいるときに適用される。しかし、これ以外のシ
ステム構成であっても、データベースのレコード表が行
単位に分割され、その結果複数の部分レコード表に分割
され、複数の外部記憶装置に分散して格納されているの
であれば全く同様に本最適化方法を適用することは可能
である。
【0071】まず、グループ化列(図ではグループ化キ
ーと記載)がデータの分割キーを含むかどうかにより最
適化方法が異なる。なぜなら、グループ化列がデータの
分割キーを含んでいる場合には、同一グループは必ず同
一分割リストに属することが保証できるからである。こ
れは、分割リストはそのように作成される。その場合に
は、それぞれの分割リスト内でグループ化処理を行えば
データ全体のグループ化処理を行ったことになる。他
方、グループ化列がデータの分割キーを含んでいない場
合には、同一グループに属する行が複数の分割リストに
分散して格納されているため、分割リスト間でグループ
化処理をやり直す必要がある。なお、並列データベース
における平均グループ重複度は、グループ数をg、入力
リストの合計の行数をL、分割数をnとした場合、グル
ープ化列が分割キーを含む場合には、L/g、グループ
化列が分割キーを含まない場合には、L/g/nとな
る。
【0072】また、このほかにも、バックエンドサーバ
がグループ化処理を行った後に、次に実行すべき処理単
位がフロントエンドサーバかバックエンドサーバか、あ
るいは、グループ化ユニークキーで入力リストがすでに
ソートされているかどうか、あるいは、平均グループ重
複度の値などにより、それぞれG1からG9までの処理
方法を選択する。グループ化ユニークキーとはグループ
化キーの部分集合列であり、グループ化キーの値が一意
に決まるとグループ化処理におけるグループが一意に決
まる列の集合である。すなわち、グループ化ユニークキ
ーはグループ化列を関数従属させる列の集合のことを言
う。グループ化列そのものは必ずグループ化ユニークキ
ーとなる。また、グループ化列に当該リストのユニーク
キーが含まれている場合、当該ユニークキーはグループ
化ユニークキーとなる。
【0073】以下、具体的な最適化方法について図10
に従って説明する。
【0074】(1)まず、グループ化列が分割キーを含
む場合 (1.1)次の処理がフロントエンドサーバである場合 この場合は、例えば、次の処理がマージ処理であるとき
である。
【0075】(1.1.1)入力リストが既にグループ
化ユニークキーでソート済みである場合 各バックエンドサーバは、対応する分割ソート前提のグ
ループ化処理を行い、結果をフロントエンドサーバに送
信する。フロントエンドサーバは各バックエンドサーバ
から送信されてきた結果を並列に受信し(以下、この動
作をP−SCANと呼ぶ)、結果として出力する(G
1)。
【0076】(1.1.2)入力リストがグループ化ユ
ニークキーでソートされていない場合 (1.1.2.1)もしグループ重複度が1よりすこし
大きいか(例えば1.2以上)、全レコードの集計領域
が一度に主記憶上に確保できそうな場合 各バックエンドサーバでHHGB処理を行い、結果をフ
ロントエンドサーバにそれぞれ出力する。フロントエン
ドサーバは各バックエンドサーバから送信されてきた結
果を並列に受信し、結果として出力する(G2)。
【0077】(1.1.2.2)グループ重複度が1に
きわめて近く(例えば1.2未満)、かつ、全レコード
の集計領域が一度に主記憶上に確保できそうでなけれ
ば、各バックエンドサーバでビットマップグループ化処
理を行い、結果をフロントエンドサーバに出力する。な
お、ビットマップグループ化処理では、重複度が2以上
と判定された行についてのみHHGBを適用する。フロ
ントエンドサーバは各バックエンドサーバから送信され
てきた結果を並列に受信し、結果として出力する(G2
d)。
【0078】(1.2)次の処理がバックエンドサーバ
である場合 これは、例えば次の処理がマージ前に行うジョインであ
る場合である。
【0079】(1.2.1)入力リストが既にグループ
化ユニークキーでソート済みであれば(1.1.1)と
同様の最適化を行う(G3)。
【0080】(1.2.2)入力リストがグループ化ユ
ニークキーでソートされていない場合 (1.2.2.1)もしグループ重複度が1よりすこし
大きいか(例えば1.2以上)、全レコードの集計領域
が一度に主記憶上に確保できそうならば、各バックエン
ドサーバでHHGB処理を行い、結果を次バックエンド
サーバにそれぞれ出力する。次バックエンドサーバは各
バックエンドサーバから送信されてきた結果を並列に受
信し、結果として出力する(G4)。
【0081】(1.2.2.2)グループ重複度が1に
きわめて近く(例えば1.2未満)、かつ、全レコード
の集計領域が一度に主記憶上に確保できそうでなけれ
ば、各バックエンドサーバでビットマップグループ化処
理を行い、結果を次バックエンドサーバにそれぞれ出力
する。なお、ビットマップグループ化処理では、重複度
が2以上と判定された行についてのみHHGBを適用す
る。次バックエンドサーバは各バックエンドサーバから
送信されてきた結果を並列に受信し、結果として出力す
る(G4d)。
【0082】(2)グループ化列が分割キーを含まない
場合には、 (2.1)次の処理がフロントエンドサーバであれば、 (2.1.1)入力リストが既にグループ化ユニークキ
ーでソート済みであればそれぞれの処理単位でソート前
提のグループ化処理を行い、結果をフロントエンドサー
バにそれぞれ送信する。フロントエンドサーバは各バッ
クエンドサーバから送信されてきた結果をさらにグルー
プ化ユニークキーでソートされるようにトーナメント方
式でマージしながら並列に受信し(T−SCAN)、そ
の結果をソート前提グループ化処理により再度グループ
化してから、その結果を出力する(G5)。
【0083】(2.1.2)入力リストがグループ化ユ
ニークキーでソートされていない場合、 (2.1.2.1)もしグループ重複度が1よりかなり
大きい(例えば2以上)ならば、各バックエンドサーバ
でHHGB処理を行い、グループ化列を分割キーとして
その結果をバックエンドサーバ間で再分配する。各バッ
クエンドサーバは送られてきたデータを並列に受信し、
それらを入力リストとして(1.1.2.1)の処理を
適用する(G6)。
【0084】(2.1.2.2)グループ重複度が1程
度(例えば2未満)ならば、直ちに、グループ化列を分
割キーとして入力リストをバックエンドサーバ間で再分
配する。各バックエンドサーバは送られてきたデータを
並列に受信し、それらを入力リストとして、再分配後の
グループ重複度の値に応じて(1.1.2.1)もしく
は(1.1.2.2)の処理を適用する(G7)。
【0085】(2.2)次の処理がバックエンドサーバ
であれば、 (2.2.1)もしグループ重複度が1よりかなり大き
い(例えば2以上)ならば、各バックエンドサーバでハ
イブリッドハッシュグループ化処理(HHGB)処理を
行い、グループ化列を分割キーとしてその結果をバック
エンドサーバ間で再分配する。各バックエンドサーバは
送られてきたデータを並列に受信し、それらを入力リス
トとして再度ハイブリッドハッシュグループ化処理を適
用する。
【0086】(2.2.2)平均グループ重複度が1程
度(例えば2未満)の場合 直ちに、グループ化列を分割キーとして入力リストをバ
ックエンドサーバ間で再分配する。各バックエンドサー
バは送られてきたデータを並列に受信し、それらを入力
リストとして、再分配後の平均グループ重複度の値に応
じて(1.2.2.1)もしくは(1.2.2.2)の
処理を適用する(G9)。
【0087】以上の最適化により並列データベースにお
いてグループ化処理を最適に実行することが可能とな
る。また、重複排除処理に関しても前述の通り、特殊な
グループか処理に変換することにより上記最適化が適用
可能となる。
【0088】
【発明の効果】1レコードのみで構成されるグループを
先に判別する発明によるグループ化方法によれば、平均
グループ重複度が1に近い場合にグループ化処理を大幅
に高速化できる。同様に重複削除処理も高速化できる。
【0089】また、複数のハッシュ関数を用いる本発明
によるグループ化方法によれば、平均グループ重複度が
1に近くない場合でもグループ化処理を高速に行うこと
ができる。
【図面の簡単な説明】
【図1】ハッシュ関数を用いた本発明に係るグループ化
処理の概要を示す図。
【図2】図1に示したループ化処理の流れを示す図。
【図3】集計列計算処理における関数変換方法を示す
図。
【図4】マージソート法を用いた従来のグループ化処理
の流れを示す図。
【図5】ハッシュ関数を用いた従来のグループ化処理の
流れを示す図。
【図6】ハッシュ関数を用いた本発明に係る重複排除処
理の概要を示す図。
【図7】図6の重複排除処理の流れを示す図。
【図8】図6の重複排除処理を適用するのに好適な問い
合わせの例を示す図。
【図9】マージソート法を用いた本発明に係るグループ
化処理の流れを示す図。
【図10】並列データベースに対する本発明に係るグル
ープ化処理の最適化方法を示す図。
【符号の説明】
1…入力リスト、5…ビットマップ(B1)、6…ビッ
トマップ(B2)、39…関数変換表、95−1〜95
−p…バケット格納用一時リスト。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 西澤 格 東京都国分寺市東恋ケ窪一丁目280番地 株式会社日立製作所中央研究所内 Fターム(参考) 5B075 QR00 QT06

Claims (15)

    【特許請求の範囲】
  1. 【請求項1】データベースに含まれるレコードリストの
    複数の行の各々の、一つ以上の予め指定されたグループ
    化用の列の少なくとも一部の列の値に対して所定の第1
    の処理を実行して各行に対してその行のグループ化用の
    列の値が同一である少なくとも一つの他の行が存在する
    可能性がないかを判別し、 上記判別により同一グループ化用の列の値を有する他の
    行が存在する可能性がないとそれぞれ判別された一部の
    複数の行をそれぞれ一つのグループに属する行と判定
    し、 第2の処理により、上記レコードリストの上記複数の行
    の内の上記一部の行以外の他の複数の行を、上記グルー
    プ化用の列の値が同じである複数の行が同一のグループ
    に属するように、複数のグループに区分するグループ化
    方法。
  2. 【請求項2】上記可能性を判別するステップは、 上記データベースに含まれるレコードリストの複数の行
    の各々に対して、その行の、一つ以上の予め指定された
    グループ化用の列の少なくとも一部の列の値を引数とす
    るハッシュ関数によりハッシュ値を生成し、 上記複数の行のに対して生成された複数のハッシュ値に
    より、各行に対して生成されたハッシュ値と同一のハッ
    シュ値を有する少なくとも一つの他の行が存在するか否
    かを判別するステップを有し、 上記判定ステップは、上記判別により同一のハッシュ値
    を有する他の行が存在しないとそれぞれ判別された一部
    の複数の行をそれぞれ一つのグループに属する行と判定
    するステップを有する請求項1記載のグループ化方法。
  3. 【請求項3】上記判別は、 各行に対して、上記ハッシュ値が生成される毎に、上記
    ハッシュ関数が生成可能な複数のハッシュ値のそれぞれ
    を生成した行の数が、0か、1かあるいは2以上である
    かを識別するための計数データをその生成されたハッシ
    ュ値に関連して更新し、 上記レコードリストの上記複数の行について上記更新を
    実行した後に、上記複数の行について上記ハッシュ値の
    生成ステップを再度実行し、 再度生成されたハッシュ値を生成した行の数が1つであ
    るか否かを上記計数データに基づいて判別するステップ
    を有する請求項2記載のグループ化方法。
  4. 【請求項4】上記計数データは、上記ハッシュ関数が生
    成可能な上記複数のハッシュ値の各々に対応して、その
    ハッシュ値を生成した行の数が、0か、1か2以上であ
    るかを計数する2ビットを有する請求項3記載のグルー
    プ化方法。
  5. 【請求項5】上記計数データは、上記ハッシュ関数が生
    成可能な上記複数のハッシュ値の各々に対応して、その
    ハッシュ値が第i番目のハッシュ値であるときに、その
    ハッシュ値を生成した行の数0、1、2以上を0×(3
    のi乗)、1×(3のi乗)、2×(3のi乗)なる自
    然数で表し、上記複数のハッシュ値に対応する上記自然
    数の総和を表す2進数であり、 上記ハッシュ関数が生成可能な上記複数のハッシュ値の
    総数をnとし、上記2進数のビット数を2kビットとす
    るとき、3のn乗が2の2k乗よりも小さく、かつ、n
    >kである請求項3記載のグループ化方法。
  6. 【請求項6】上記レコードリストの平均グループ重複度
    が1に近いか否かを判定するステップをさらに有し、 上記レコードリストの平均グループ重複度が1に近いと
    判定された場合に、上記判別するステップ以降のステッ
    プが実行される請求項1または2記載のグループ化方
    法。
  7. 【請求項7】上記判別により同一のハッシュ値を有する
    他の行が存在しないとそれぞれ判別された上記一部の複
    数の行の各々に基づいて、その行が属するグループに対
    する集計処理を上記区分するステップの実行結果に依ら
    ないで実行するステップをさらに有し、 上記区分するステップは、そのステップにより区分され
    た上記複数のグループの各々について集計処理を実行す
    るステップを有する請求項2記載のグループ化方法。
  8. 【請求項8】データベースに含まれるレコードリストの
    複数の行の各々の一つ以上の列の値に対して所定の第1
    の処理を実行してその行の値と同一の値を有する少なく
    とも一つの他の行が存在する可能性がないかを判別し、 上記レコードリストの上記複数の行の内の、上記判別に
    より同一の値を有する他の行が存在する可能性がないと
    それぞれ判別された一部の複数の行以外の他の複数の行
    に対して、同一の値を有する重複行の一つ以外の行を削
    除する第2の処理を実行し、 上記一部の複数の行と、上記削除後の上記他の複数の行
    とを重複排除後の行として出力する重複排除方法。
  9. 【請求項9】上記可能性についての判別ステップは、 データベースに含まれるレコードリストの複数の行の各
    々に対して、その行の一つ以上の列の値を引数とするハ
    ッシュ関数によりハッシュ値を生成し、 上記複数の行に対して生成された複数のハッシュ値によ
    り、各行に対して生成されたハッシュ値と同一のハッシ
    ュ値を有する少なくとも一つの他の行が存在するか否か
    を判別し、 上記レコードリストの上記複数の行の内の、上記判別に
    より同一のハッシュ値を有する他の行が存在しないとそ
    れぞれ判別された一部の複数の行を、同一の値を有する
    他の行が存在する可能性がない行であると判定するステ
    ップを有する請求項8記載の重複排除方法。
  10. 【請求項10】上記他の行の存在の判別ステップは、 各行に対して、上記ハッシュ値が生成される毎に、上記
    ハッシュ関数が生成可能な複数のハッシュ値のそれぞれ
    を生成した行の数が、0か、1かあるいは2以上である
    かを識別するための計数データをその生成されたハッシ
    ュ値に関連して更新し、 上記レコードリストの上記複数の行について上記更新を
    実行した後に、上記複数の行について上記ハッシュ値の
    生成ステップを再度実行し、 再度生成されたハッシュ値を生成した行の数が1つであ
    るか否かを上記計数データに基づいて判別するステップ
    を有する請求項9記載の重複排除方法。
  11. 【請求項11】上記計数データは、上記ハッシュ関数が
    生成可能な上記複数のハッシュ値の各々に対応して、そ
    のハッシュ値を生成した行の数が、0か、1か2以上で
    あるかを計数する2ビットを有する請求項10記載の重
    複排除方法。
  12. 【請求項12】上記計数データは、上記ハッシュ関数が
    生成可能な上記複数のハッシュ値の各々に対応して、そ
    のハッシュ値が第i番目のハッシュ値であるときに、そ
    のハッシュ値を生成した行の数0、1、2以上を0×
    (3のi乗)、1×(3のi乗)、2×(3のi乗)な
    る自然数で表し、上記複数のハッシュ値に対応する上記
    自然数の総和を表す2進数であり、 上記ハッシュ関数が生成可能な上記複数のハッシュ値の
    総数をnとし、上記2進数のビット数を2kビットとす
    るとき、3のn乗が2の2k乗よりも小さく、かつ、n
    >kである請求項10記載の重複排除方法。
  13. 【請求項13】上記レコードリストの平均行重複度が1
    に近いか否かを判定するステップをさらに有し、 上記レコードリストの平均行重複度が1に近いと判定さ
    れた場合に、上記可能性を判別するステップ以降のステ
    ップが実行される請求項8または9記載の重複排除方
    法。
  14. 【請求項14】データベースに含まれるレコードリスト
    の複数の行の各々に対して、その行の、一つ以上の予め
    指定されたグループ化用の列の少なくとも一部の列の値
    を引数とするハッシュ関数によりハッシュ値を生成し、 予め準備された集計領域内の複数のエントリの内の、該
    ハッシュ値に対応する一つのエントリが有効なグループ
    化列の値と集計データを記憶されているか否かを判定
    し、 上記一つのエントリが有効なグループ化列の値と集計デ
    ータを記憶していないならば、上記行の、予め定められ
    た集計列のデータに基づいて、その行が一つのグループ
    に属する唯一の行であるときの集計データを算出し、 上記各行のグループ化列の値と上記算出された集計デー
    タとを該一つのエントリに記憶し、 上記一つのエントリがすでにグループ化列の値と集計デ
    ータを記憶しているときには、その記憶されたグループ
    化列の値と上記ハッシュ値を生成した上記各行のグルー
    プ化列の値が同じであるか否かを判別し、 該一つのエントリにすでに記憶された上記グループ化列
    の値と、上記ハッシュ値を生成した上記各行のグループ
    化列の値が同じであるとき、上記ハッシュ値を生成した
    上記各行の上記集計列のデータに基づいて、該エントリ
    に記憶された上記集計データを、上記ハッシュ値を生成
    した上記各行が上記一つのエントリに対応するグループ
    に追加されたときのデータに更新し、 該エントリにすでに記憶された上記グループ化列の値
    と、上記ハッシュ値を生成した上記各行のグループ化列
    の値が異なるとき、上記各行のグループ化列のデータと
    集計列のデータをグループ化されていない行として記憶
    し、 上記レコードリストの上記複数の行に対して、上記生成
    するステップから登録するステップまでを実行後に、上
    記集計領域の上記複数のエントリに記憶されたデータを
    それぞれ一つのグループに関するデータとして出力し、 上記記憶するステップでグループ化されていない行とし
    て記憶された複数の行に対して上記生成するステップか
    ら上記出力するステップまでを、グループ化されていな
    い行がなくなるまで繰り返し、繰り返し時には上記生成
    するステップで使用するハッシュ関数を変更するグルー
    プ化方法。
  15. 【請求項15】上記記憶するステップは、 上記各行の上記グループ化列の値に依存して、上記各行
    が属する複数の分割リストの一つを決定し、 上記各行をその一つの分割リストに属する行として記憶
    するステップを有し、 上記繰り返すステップは、 上記複数の分割リストを順次選択し、 選択された分割リストに記憶された複数の行に対して、
    上記生成するステップから上記出力するステップを実行
    するステップを有する請求項14記載のグループ化方
    法。
JP10364729A 1998-12-22 1998-12-22 グループ化方法と重複排除方法 Pending JP2000187668A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP10364729A JP2000187668A (ja) 1998-12-22 1998-12-22 グループ化方法と重複排除方法
US09/469,615 US6381601B1 (en) 1998-12-22 1999-12-22 Grouping and duplicate removal method in a database

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP10364729A JP2000187668A (ja) 1998-12-22 1998-12-22 グループ化方法と重複排除方法

Publications (1)

Publication Number Publication Date
JP2000187668A true JP2000187668A (ja) 2000-07-04

Family

ID=18482526

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10364729A Pending JP2000187668A (ja) 1998-12-22 1998-12-22 グループ化方法と重複排除方法

Country Status (2)

Country Link
US (1) US6381601B1 (ja)
JP (1) JP2000187668A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005013571A1 (en) * 2003-07-25 2005-02-10 Attenex Corporation Evaluating a structured message store for message redundancy
JP2007527582A (ja) * 2004-03-05 2007-09-27 シーメンス メディカル ソリューションズ ユーエスエー インコーポレイテッド レコードのペアの空間のタイリングによるレコードのリンクのためのデータベース・アクセスの最適化
JP2009535704A (ja) * 2006-04-28 2009-10-01 ネットアップ,インコーポレイテッド サンプリングを利用して重複データを無くすシステム、及び方法
JP2015528603A (ja) * 2012-08-20 2015-09-28 オラクル・インターナショナル・コーポレイション 集約/グループ化動作:ハッシュテーブル法のハードウェア実装
JP2015191456A (ja) * 2014-03-28 2015-11-02 セイコーエプソン株式会社 制御装置、印刷システム、及び、制御装置の制御方法
CN112925776A (zh) * 2021-02-23 2021-06-08 中国石油天然气股份有限公司 一种油井功图数据查重方法

Families Citing this family (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8205237B2 (en) 2000-09-14 2012-06-19 Cox Ingemar J Identifying works, using a sub-linear time search, such as an approximate nearest neighbor search, for initiating a work-based action, such as an action on the internet
US8010988B2 (en) * 2000-09-14 2011-08-30 Cox Ingemar J Using features extracted from an audio and/or video work to obtain information about the work
US7225219B2 (en) * 2000-11-29 2007-05-29 Broadspider Networks, Inc. Distributed caching architecture for computer networks
US6658423B1 (en) * 2001-01-24 2003-12-02 Google, Inc. Detecting duplicate and near-duplicate files
US6778995B1 (en) 2001-08-31 2004-08-17 Attenex Corporation System and method for efficiently generating cluster groupings in a multi-dimensional concept space
US6978274B1 (en) 2001-08-31 2005-12-20 Attenex Corporation System and method for dynamically evaluating latent concepts in unstructured documents
US6888548B1 (en) * 2001-08-31 2005-05-03 Attenex Corporation System and method for generating a visualized data representation preserving independent variable geometric relationships
US7177856B1 (en) * 2001-10-03 2007-02-13 International Business Machines Corporation Method for correlating data from external databases
US7334003B2 (en) * 2002-01-11 2008-02-19 First Data Corporation Methods and systems for extracting related information from flat files
US7271804B2 (en) * 2002-02-25 2007-09-18 Attenex Corporation System and method for arranging concept clusters in thematic relationships in a two-dimensional visual display area
US7219104B2 (en) * 2002-04-29 2007-05-15 Sap Aktiengesellschaft Data cleansing
US7979712B2 (en) * 2002-07-01 2011-07-12 International Business Machines Corporation Network system, server and information terminal for list matching
US7007032B1 (en) * 2002-07-01 2006-02-28 Cisco Technology, Inc. Method and apparatus for removing redundancies from a list of data structures
US7277940B2 (en) * 2002-08-29 2007-10-02 Sap Ag Managing uneven authorizations in a computer data exchange
US7269665B2 (en) * 2002-08-29 2007-09-11 Sap Ag Isolated mapping point
US7370068B1 (en) * 2002-09-04 2008-05-06 Teradata Us, Inc. Sorting of records with duplicate removal in a database system
US7155427B1 (en) * 2002-10-30 2006-12-26 Oracle International Corporation Configurable search tool for finding and scoring non-exact matches in a relational database
US20050171948A1 (en) * 2002-12-11 2005-08-04 Knight William C. System and method for identifying critical features in an ordered scale space within a multi-dimensional feature space
US20040193609A1 (en) * 2003-03-26 2004-09-30 Sony Corporation Master content directory service server for providing a consolidated network-wide content directory
US7103603B2 (en) * 2003-03-28 2006-09-05 International Business Machines Corporation Method, apparatus, and system for improved duplicate record processing in a sort utility
US20040249808A1 (en) * 2003-06-06 2004-12-09 Microsoft Corporation Query expansion using query logs
US7610313B2 (en) * 2003-07-25 2009-10-27 Attenex Corporation System and method for performing efficient document scoring and clustering
US7925790B2 (en) 2003-09-17 2011-04-12 Sony Corporation Middleware filter agent between server and PDA
US7502447B2 (en) 2003-11-25 2009-03-10 Alcatel Lucent Call failure recording
US7191175B2 (en) 2004-02-13 2007-03-13 Attenex Corporation System and method for arranging concept clusters in thematic neighborhood relationships in a two-dimensional visual display space
US7739309B2 (en) * 2004-09-30 2010-06-15 Microsoft Corporation Method, system, and computer-readable medium for merging data from multiple data sources for use in an electronic document
US8131726B2 (en) * 2005-01-12 2012-03-06 International Business Machines Corporation Generic architecture for indexing document groups in an inverted text index
US7404151B2 (en) * 2005-01-26 2008-07-22 Attenex Corporation System and method for providing a dynamic user interface for a dense three-dimensional scene
US7356777B2 (en) * 2005-01-26 2008-04-08 Attenex Corporation System and method for providing a dynamic user interface for a dense three-dimensional scene
EP1866776B1 (en) * 2005-03-11 2015-12-30 Rocksoft Limited Method for detecting the presence of subblocks in a reduced-redundancy storage system
US20060218201A1 (en) * 2005-03-24 2006-09-28 International Business Machines Corporation System and method for effecting thorough disposition of records
US7562067B2 (en) * 2005-05-06 2009-07-14 Microsoft Corporation Systems and methods for estimating functional relationships in a database
US7461091B2 (en) * 2005-06-09 2008-12-02 Sap Aktiengesellschaft Controlling data transition between business processes in a computer application
KR101071043B1 (ko) * 2006-07-03 2011-10-06 인텔 코오퍼레이션 고속 오디오 검색을 위한 방법 및 장치
US8015162B2 (en) * 2006-08-04 2011-09-06 Google Inc. Detecting duplicate and near-duplicate files
US8204880B2 (en) * 2007-11-20 2012-06-19 Sap Aktiengeselleschaft Generic table grouper
US8108401B2 (en) * 2008-03-28 2012-01-31 International Business Machines Corporation Applying various hash methods used in conjunction with a query with a group by clause
US8352470B2 (en) * 2008-05-23 2013-01-08 International Business Machines Corporation Adaptive aggregation: improving the performance of grouping and duplicate elimination by avoiding unnecessary disk access
GB2462493B (en) * 2008-08-13 2012-05-16 Gnodal Ltd Data processing
US9063947B2 (en) * 2008-08-18 2015-06-23 Hewlett-Packard Development Company, L.P. Detecting duplicative hierarchical sets of files
US9542409B2 (en) 2008-11-26 2017-01-10 Red Hat, Inc. Deduplicated file system
US8180739B2 (en) * 2009-07-27 2012-05-15 International Business Machines Corporation Duplicate filtering in a data processing environment
US8572084B2 (en) * 2009-07-28 2013-10-29 Fti Consulting, Inc. System and method for displaying relationships between electronically stored information to provide classification suggestions via nearest neighbor
CA3026879A1 (en) 2009-08-24 2011-03-10 Nuix North America, Inc. Generating a reference set for use during document review
US8364651B2 (en) * 2009-08-28 2013-01-29 Optuminsight, Inc. Apparatus, system, and method for identifying redundancy and consolidation opportunities in databases and application systems
US8280844B2 (en) * 2010-02-15 2012-10-02 Bank Of America Corporation Anomalous activity detection
US9268832B1 (en) * 2010-05-18 2016-02-23 Netapp, Inc. Sorting a data set by using a limited amount of memory in a processing system
US8442988B2 (en) 2010-11-04 2013-05-14 International Business Machines Corporation Adaptive cell-specific dictionaries for frequency-partitioned multi-dimensional data
US8560505B2 (en) 2011-12-07 2013-10-15 International Business Machines Corporation Automatic selection of blocking column for de-duplication
US9792117B2 (en) 2011-12-08 2017-10-17 Oracle International Corporation Loading values from a value vector into subregisters of a single instruction multiple data register
US10534606B2 (en) 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
US9697174B2 (en) 2011-12-08 2017-07-04 Oracle International Corporation Efficient hardware instructions for processing bit vectors for single instruction multiple data processors
US8682932B2 (en) 2012-02-16 2014-03-25 Oracle International Corporation Mechanisms for searching enterprise data graphs
US8484208B1 (en) * 2012-02-16 2013-07-09 Oracle International Corporation Displaying results of keyword search over enterprise data
US8739124B2 (en) 2012-06-27 2014-05-27 Sap Ag Configuring integration capabilities for system integration
US9600522B2 (en) 2012-08-20 2017-03-21 Oracle International Corporation Hardware implementation of the aggregation/group by operation: filter method
US9727606B2 (en) 2012-08-20 2017-08-08 Oracle International Corporation Hardware implementation of the filter/project operations
US9965566B2 (en) * 2012-10-31 2018-05-08 Microsoft Technology Licensing, Llc Target criterion-based data file distribution
US9378535B2 (en) * 2013-08-29 2016-06-28 Advanced Micro Devices, Inc. Efficient duplicate elimination
US11113054B2 (en) 2013-09-10 2021-09-07 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression
US9430390B2 (en) 2013-09-21 2016-08-30 Oracle International Corporation Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications
US20150134625A1 (en) * 2013-11-13 2015-05-14 Netapp, Inc. Pruning of server duplication information for efficient caching
US10157202B2 (en) 2014-04-07 2018-12-18 International Business Machines Corporation Multi stage aggregation using digest order after a first stage of aggregation
US10025823B2 (en) 2015-05-29 2018-07-17 Oracle International Corporation Techniques for evaluating query predicates during in-memory table scans
US10067954B2 (en) 2015-07-22 2018-09-04 Oracle International Corporation Use of dynamic dictionary encoding with an associated hash table to support many-to-many joins and aggregations
US10061832B2 (en) 2016-11-28 2018-08-28 Oracle International Corporation Database tuple-encoding-aware data partitioning in a direct memory access engine
US10061714B2 (en) 2016-03-18 2018-08-28 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors
US10402425B2 (en) 2016-03-18 2019-09-03 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multi-core processors
AU2017274558B2 (en) 2016-06-02 2021-11-11 Nuix North America Inc. Analyzing clusters of coded documents
US10599488B2 (en) 2016-06-29 2020-03-24 Oracle International Corporation Multi-purpose events for notification and sequence control in multi-core processor systems
US10380058B2 (en) 2016-09-06 2019-08-13 Oracle International Corporation Processor core to coprocessor interface with FIFO semantics
US10783102B2 (en) 2016-10-11 2020-09-22 Oracle International Corporation Dynamically configurable high performance database-aware hash engine
US10459859B2 (en) 2016-11-28 2019-10-29 Oracle International Corporation Multicast copy ring for database direct memory access filtering engine
US10176114B2 (en) 2016-11-28 2019-01-08 Oracle International Corporation Row identification number generation in database direct memory access engine
US10725947B2 (en) 2016-11-29 2020-07-28 Oracle International Corporation Bit vector gather row count calculation and handling in direct memory access engine
US9934287B1 (en) 2017-07-25 2018-04-03 Capital One Services, Llc Systems and methods for expedited large file processing
US10839087B2 (en) * 2018-07-30 2020-11-17 Sap Se Secure data aggregation in databases using dynamic bucketization and grouping bucketization
US10824739B2 (en) * 2018-07-30 2020-11-03 Sap Se Secure data aggregation in databases using static shifting and shifted bucketization
US11113258B2 (en) * 2019-05-08 2021-09-07 Bank Of America Corporation Artificially-intelligent, continuously-updating, centralized-database-identifier repository system

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69232425T2 (de) * 1991-07-10 2002-10-10 Hitachi Ltd Sortierverfahren in einer verteilten Datenbank und Zugangsverfahren dazu
JP3269849B2 (ja) * 1992-05-29 2002-04-02 株式会社日立製作所 並列データベース処理システムとその検索方法
US6014655A (en) * 1996-03-13 2000-01-11 Hitachi, Ltd. Method of retrieving database
US5890150A (en) * 1997-01-24 1999-03-30 Hitachi, Ltd. Random sampling method for use in a database processing system and a database processing system based thereon
US5873074A (en) * 1997-04-18 1999-02-16 Informix Software, Inc. Applying distinct hash-join distributions of operators to both even and uneven database records
US6115705A (en) * 1997-05-19 2000-09-05 Microsoft Corporation Relational database system and method for query processing using early aggregation
JP2000250921A (ja) * 1999-02-26 2000-09-14 Hitachi Ltd データベースの管理方法およびシステム

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005013571A1 (en) * 2003-07-25 2005-02-10 Attenex Corporation Evaluating a structured message store for message redundancy
JP2007527582A (ja) * 2004-03-05 2007-09-27 シーメンス メディカル ソリューションズ ユーエスエー インコーポレイテッド レコードのペアの空間のタイリングによるレコードのリンクのためのデータベース・アクセスの最適化
JP4726889B2 (ja) * 2004-03-05 2011-07-20 シーメンス メディカル ソリューションズ ユーエスエー インコーポレイテッド レコードのペアの空間のタイリングによるレコードのリンクのためのデータベース・アクセスの最適化
JP2009535704A (ja) * 2006-04-28 2009-10-01 ネットアップ,インコーポレイテッド サンプリングを利用して重複データを無くすシステム、及び方法
JP2015528603A (ja) * 2012-08-20 2015-09-28 オラクル・インターナショナル・コーポレイション 集約/グループ化動作:ハッシュテーブル法のハードウェア実装
JP2015191456A (ja) * 2014-03-28 2015-11-02 セイコーエプソン株式会社 制御装置、印刷システム、及び、制御装置の制御方法
CN112925776A (zh) * 2021-02-23 2021-06-08 中国石油天然气股份有限公司 一种油井功图数据查重方法
CN112925776B (zh) * 2021-02-23 2023-11-28 中国石油天然气股份有限公司 一种油井功图数据查重方法

Also Published As

Publication number Publication date
US6381601B1 (en) 2002-04-30

Similar Documents

Publication Publication Date Title
JP2000187668A (ja) グループ化方法と重複排除方法
CN104685498B (zh) 聚合/分组操作的硬件实现方式:散列表方法
US9740706B2 (en) Management of intermediate data spills during the shuffle phase of a map-reduce job
US7558802B2 (en) Information retrieving system
US7469241B2 (en) Efficient data aggregation operations using hash tables
US9535956B2 (en) Efficient set operation execution using a single group-by operation
JP3952518B2 (ja) 多次元データ処理方法
US6772163B1 (en) Reduced memory row hash match scan join for a partitioned database system
US5842207A (en) Method for storing records of a distributed database by plural processors to provide a host processor with sorted records belonging to one of a plurality of key sections
JP3584630B2 (ja) データベース処理システムにおける分類集計処理方法
CN107209768A (zh) 用于数据集的可扩展排序的方法和设备
CN112015741A (zh) 一种海量数据的分库分表存储方法与装置
US10810174B2 (en) Database management system, database server, and database management method
JP4511469B2 (ja) 情報処理方法及び情報処理システム
US20210286817A1 (en) System and method for disjunctive joins using a lookup table
US20040044683A1 (en) Data compiling method
JP5464017B2 (ja) 分散メモリデータベースシステム、データベースサーバ、データ処理方法およびそのプログラム
US20230205769A1 (en) System and method for disjunctive joins
WO2005043409A1 (ja) 表形式データの結合方法、結合装置およびプログラム
JP4136594B2 (ja) データ処理方法およびデータ処理プログラム
CN115062028B (zh) 一种OLTP领域多表join查询的方法
CN106055690A (zh) 一种基于属性匹配的快速检索与获取数据特征方法
JP2004534981A (ja) データベース・システムでデータを編成し、問合せを処理する方法、およびそのような方法を実施するためのデータベース・システムおよびソフトウェア製品
JP2001022766A (ja) 多次元データベースの高速処理方法および装置
US20230325390A1 (en) Methods and systems for performing a vectorized delete in a distributed database system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040330

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040415

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061121

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070619