(57)【要約】【課題】グループ別ウィンドウにおいて分割された各グループを、負荷の増大を回避しながら効率的に削除する。【解決手段】プロセッサとメモリを備えた計算機が、時系列のタプルを含むストリームデータを処理する方法であって、計算機が、クエリ定義を受け付けてタプルを一以上のカラムの組であるグルーピングカラムと当該グルーピングカラムの値の組合せに従ってタプルグループに分割し、当該分割したタプルの同時生存個数を制限し、かつ、特定の条件を含むオペレータをクエリグラフに設定し、ストリームデータのタプルを受け付けて、オペレータに設定された特定の条件が含まれる場合は、グルーピングカラムの値に従って分類されるタプルグループを抽出し、当該タプルグループに属する全てのタプルを一括消去する。【選択図】図４
2014081759.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリを備えた計算機が、時系列のタプルを含むストリームデータを処理するストリームデータ処理方法であって、
前記計算機が、クエリ定義を受け付けて、前記タプルを一ないし複数のカラムの組であるグルーピングカラムと、当該グルーピングカラムの値の組合せに従ってタプルグループに分割し、当該分割したタプルの同時生存個数を制限し、かつ、特定の条件を含むオペレータをクエリグラフに設定する第１のステップと、
前記計算機が、前記タプルを含むストリームデータを受け付けて、前記オペレータへ前記タプルを入力する第２のステップと、
前記計算機が、前記受け付けたタプルに、前記オペレータに設定された特定の条件が含まれるか否かを判定する第３のステップと、
前記計算機が、前記受け付けたタプルに、前記オペレータに設定された特定の条件が含まれると判定したときに、前記グルーピングカラムの値に従って分類されるタプルグループを抽出し、当該タプルグループに属する全てのタプルを一括消去する第４のステップと、
を含むことを特徴とするストリームデータ処理方法。
【請求項２】
請求項１に記載のストリームデータ処理方法であって、
前記計算機は、前記タプルグループに属する全てのタプルを一括消去した後に、前記グルーピングカラムを、当該タプルのグループ別ウィンドウのクリアカラムとし、前記特定の条件を満足する前記タプルの前記クリアカラムの値をコピーして、前記クリアカラム以外のカラムの値を不定値とし、前記タプルとスキーマを同一とするクリアタプルを生成する第５のステップと、
前記計算機は、前記オペレータの次段に配置された第２のオペレータへ前記クリアタプルを送出する第６のステップと、
をさらに含むことを特徴とするストリームデータ処理方法。
【請求項３】
請求項２に記載のストリームデータ処理方法であって、
前記計算機が、前記クエリ定義に従って、前記第２のオペレータのグルーピングカラムを決定し、前記クリアカラムの値の組合せ毎にタプルグループを生成して、当該クリアカラムの値の組合せをキーとして当該タプルグループを管理するクリアインデクスを生成する第７のステップと、
前記計算機が、前記クエリ定義に従って、前記第２のオペレータのグルーピングカラムを決定し、前記グルーピングカラムの値の組合せ毎にタプルグループを生成して、当該グルーピングカラムの値の組合せをキーとして、当該タプルグループを管理するオペレータインデクスを生成する第８のステップと、
前記計算機が、前記クリアカラムと前記グルーピングカラムの包含関係に基づいて、前記第２のオペレータが、前記タプルを受け付けたときの処理を設定する第９のステップと、
をさらに含むことを特徴とするストリームデータ処理方法。
【請求項４】
請求項３に記載のストリームデータ処理方法であって、
前記第９のステップは、
前記包含関係は、前記クリアカラムと前記グルーピングカラムが等しい場合で、前記受け付けたタプルが前記クリアタプルの場合は、前記オペレータインデクスを参照して当該クリアタプルが属するタプルグループを削除し、前記クリアカラムの値をコピーして、前記クリアカラム以外のカラムの値を不定値とし、当該第２のオペレータが出力する結果タプルとスキーマを同一とするクリアタプルを生成することを特徴とするストリームデータ処理方法。
【請求項５】
請求項３に記載のストリームデータ処理方法であって、
前記第９のステップは、
前記包含関係は、前記クリアカラムに属する全てのカラムが前記グルーピングカラムに含まれる場合で、前記クリアインデクスのタプルグループの中に、当該クリアカラムの値の組合せが、当該タプルグループのキーと同一であるような前記オペレータインデクスで管理するタプルグループの全てを含ませ、前記入力されたタプルがクリアタプルの場合は、前記クリアインデクスより当該クリアタプルが所属するタプルグループを削除し、前記クリアカラムの値をコピーし、前記クリアカラム以外のカラムの値を不定値として、当該第２のオペレータが出力する結果タプルとスキーマを同一とするクリアタプルを生成することを特徴とするストリームデータ処理方法。
【請求項６】
請求項３に記載のストリームデータ処理方法であって、
前記第９のステップは、
前記包含関係は、前記グルーピングカラムに属する全てのカラムが前記クリアカラムに含まれる場合で、前記オペレータインデクスで管理する一つのタプルグループの中に、当該グルーピングカラムの値の組合せが、当該タプルグループのキーと同一である前記クリアインデクスのタプルグループの全てを含ませ、前記入力されたタプルがクリアタプルの場合は、前記クリアインデクスより当該クリアタプルが所属する第１のタプルグループを削除し、前記オペレータインデクスで管理されるタプルのうち、前記第１のタプルグループを含む第２のタプルグループを抽出し、当該第２のタプルグループについて、前記第１のタプルグループの削除による値の変化を更新し、当該更新に関する結果タプルを生成することを特徴とするストリームデータ処理方法。
【請求項７】
請求項３に記載のストリームデータ処理方法であって、
前記第９のステップは、
前記包含関係が、前記グルーピングカラムと前記クリアカラムが相互に包含しない場合には、前記グルーピングカラムと前記クリアカラムの和集合をクリアカラムとし、前記オペレータインデクスで管理する一つのタプルグループの中に、当該グルーピングカラムの値の組合せが、当該タプルグループのキーと同一である前記クリアインデクスで管理するタプルグループの全てを含ませ、前記入力されたタプルがクリアタプルの場合は、前記クリアインデクスより当該クリアタプルが属する第１のタプルグループの全てを削除し、前記オペレータインデクスで管理されるタプルのうち、前記第１のタプルグループを含む第２のタプルグループを抽出し、当該第２のタプルグループについて、前記第１のタプルグループの削除による値の変化を更新し、当該更新に関する結果タプルを生成することを特徴とするストリームデータ処理方法。
【請求項８】
プロセッサとメモリとを備えて、時系列のタプルを含むストリームデータを処理するストリームデータ処理装置であって、
クエリ定義を受け付けてオペレータを配置するクエリグラフを設定するクエリ構成部と、
前記時系列のタプルを含むストリームデータを受け付けて前記クエリグラフのオペレータで前記タプルを処理するクエリ実行部と、を備え、
前記クエリ構成部は、
前記クエリ定義を受け付けて、前記タプルを一ないし複数のカラムの組であるグルーピングカラムと、当該グルーピングカラムの値の組合せに従ってグループに分割し、当該分割したタプルの同時生存個数を制限し、かつ、特定の条件を含むオペレータを前記クエリグラフに設定し、
前記クエリ実行部は、
前記受け付けたタプルに、前記オペレータに設定された特定の条件が含まれるか否かを判定し、前記受け付けたタプルに前記オペレータに設定された特定の条件が含まれる場合には、前記グルーピングカラムの値に従って分類されるタプルグループを抽出し、当該タプルグループに属する全てのタプルを一括消去することを特徴とするストリームデータ処理装置。
【請求項９】
請求項８に記載のストリームデータ処理装置であって、
前記クエリ実行部は、
前記タプルグループに属する全てのタプルを一括消去した後に、前記グルーピングカラムを、当該タプルのグループ別ウィンドウのクリアカラムとし、前記特定の条件を満足する前記タプルの前記クリアカラムの値をコピーして、前記クリアカラム以外のカラムの値を不定値とし、前記タプルとスキーマを同一とするクリアタプルを生成し、前記オペレータの次段に配置された第２のオペレータへ前記クリアタプルを送出することを特徴とするストリームデータ処理装置。
【請求項１０】
請求項９に記載のストリームデータ処理装置であって、
前記クエリ構成部は、
前記クエリ定義に従って、前記第２のオペレータのグルーピングカラムを決定し、前記クリアカラムの値の組合せ毎にタプルグループを生成して、当該クリアカラムの値の組合せをキーとして当該タプルグループを管理するクリアインデクスを生成し、前記クエリ定義に従って、前記第２のオペレータのグルーピングカラムを決定し、前記グルーピングカラムの値の組合せ毎にタプルグループを生成して、当該グルーピングカラムの値の組合せをキーとして、当該タプルグループを管理するオペレータインデクスを生成し、
前記クエリ実行部は、
前記クリアカラムと前記グルーピングカラムの包含関係に基づいて、前記第２のオペレータが、前記タプルを受け付けたときの処理を設定することを特徴とするストリームデータ処理装置。
【請求項１１】
請求項１０に記載のストリームデータ処理装置であって、
前記クエリ実行部は、
前記包含関係が、前記クリアカラムと前記グルーピングカラムが等しい場合で、前記受け付けたタプルが前記クリアタプルの場合は、前記オペレータインデクスを参照して当該クリアタプルが属するタプルグループを削除し、前記クリアカラムの値をコピーして、前記クリアカラム以外のカラムの値を不定値とし、当該第２のオペレータが出力する結果タプルとスキーマを同一とするクリアタプルを生成することを特徴とするストリームデータ処理装置。
【請求項１２】
請求項１０に記載のストリームデータ処理装置であって、
前記クエリ実行部は、
前記包含関係は、前記クリアカラムに属する全てのカラムが前記グルーピングカラムに含まれる場合で、前記クリアインデクスのタプルグループの中に、当該クリアカラムの値の組合せが、当該タプルグループのキーと同一であるような前記オペレータインデクスで管理するタプルグループの全てを含ませ、前記入力されたタプルがクリアタプルの場合は、前記クリアインデクスより当該クリアタプルが所属するタプルグループを削除し、前記クリアカラムの値をコピーし、前記クリアカラム以外のカラムの値を不定値として、当該第２のオペレータが出力する結果タプルとスキーマを同一とするクリアタプルを生成することを特徴とするストリームデータ処理装置。
【請求項１３】
請求項１０に記載のストリームデータ処理装置であって、
前記クエリ実行部は、
前記包含関係は、前記グルーピングカラムに属する全てのカラムが前記クリアカラムに含まれる場合で、前記オペレータインデクスで管理する一つのタプルグループの中に、当該グルーピングカラムの値の組合せが、当該タプルグループのキーと同一である前記クリアインデクスのタプルグループの全てを含ませ、前記入力されたタプルがクリアタプルの場合は、前記クリアインデクスより当該クリアタプルが所属する第１のタプルグループを削除し、前記オペレータインデクスで管理されるタプルのうち、前記第１のタプルグループを含む第２のタプルグループを抽出し、当該第２のタプルグループについて、前記第１のタプルグループの削除による値の変化を更新し、当該更新に関する結果タプルを生成することを特徴とするストリームデータ処理装置。
【請求項１４】
請求項１０に記載のストリームデータ処理装置であって、
前記クエリ実行部は、
前記包含関係が、前記グルーピングカラムと前記クリアカラムが相互に包含しない場合には、前記グルーピングカラムと前記クリアカラムの和集合をクリアカラムとし、前記オペレータインデクスで管理する一つのタプルグループの中に、当該グルーピングカラムの値の組合せが、当該タプルグループのキーと同一である前記クリアインデクスで管理するタプルグループの全てを含ませ、前記入力されたタプルがクリアタプルの場合は、前記クリアインデクスより当該クリアタプルが属する第１のタプルグループの全てを削除し、前記オペレータインデクスで管理されるタプルのうち、前記第１のタプルグループを含む第２のタプルグループを抽出し、当該第２のタプルグループについて、前記第１のタプルグループの削除による値の変化を更新し、当該更新に関する結果タプルを生成することを特徴とするストリームデータ処理装置。
【請求項１５】
プロセッサとメモリを備えた計算機で、時系列のタプルを含むストリームデータを処理するプログラムであって、
クエリ定義を受け付けて、前記タプルを一ないし複数のカラムの組であるグルーピングカラムと、当該グルーピングカラムの値の組合せに従ってタプルグループに分割し、当該分割したタプルの同時生存個数を制限し、かつ、特定の条件を含むオペレータをクエリグラフに設定する第１の手順と、
前記タプルを含むストリームデータを受け付けて、前記オペレータへ前記タプルを入力する第２の手順と、
前記受け付けたタプルに、前記オペレータに設定された特定の条件が含まれるか否かを判定する第３の手順と、
前記受け付けたタプルに、前記オペレータに設定された特定の条件が含まれると判定したときに、前記グルーピングカラムの値に従って分類されるタプルグループを抽出し、当該タプルグループに属する全てのタプルを一括消去する第４の手順と、
を前記計算機に実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストリームデータ処理のクエリ定義インタフェース及びクエリの実行方法に関する。
【背景技術】
【０００２】
株式取引の自動化や、交通情報処理の高度化、クリックストリームの解析といった、高いレートで継続的に発生する情報をリアルタイムに解析し、重要なイベントの発生に対して瞬時にアクションを起こす要求の高まりを背景に、高レートデータのリアルタイム処理を実現するため、ストリームデータ処理が注目されている。ストリームデータ処理は、様々なデータ処理に適用可能な汎用ミドルウェア技術であるため、個別の案件ごとにシステムを構築するのでは間に合わないようなビジネス環境の急激な変化にも応えつつ、実世界のデータをリアルタイムにビジネスに反映することを可能とする。
【０００３】
ストリームデータ処理が対象とするストリームとは、タイムスタンプ付きのデータであるタプルが連続して到来する、時系列データである。ストリームデータ処理システムを利用するユーザが、ストリームに対する監視ルールをクエリとして定義すると、ストリームデータ処理システムはクエリ定義をクエリグラフに変換する。クエリグラフは、オペレータと呼ばれる処理単位をノードとし、同オペレータ間のタプルキューをエッジとする有向グラフである。ストリームデータ処理システムでは、入力ストリームを構成する個々のタプルについて、有向グラフを通過させることで、データフロー的に処理を進める。
【０００４】
各タプルは、クエリグラフの入口において、ウィンドウオペレータによって生存期間を付与される。ウィンドウオペレータとしては、大きく分けて個数ウィンドウ、時間ウィンドウ、グループ別ウィンドウの三種類が存在する。
【０００５】
個数ウィンドウ“［ＲＯＷＳ  Ｎ］”は、同時に生存するタプルの個数を、ユーザが指定した数Ｎに制限する。すなわち、各タプルは、自身から数えてＮ＋１番目のタプルの到来時刻に、生存期間を終了する。
【０００６】
時間ウィンドウ“［ＲＡＮＧＥ  Ｔ］”は、各タプルの生存期間を、ユーザが指定した時間Ｔに制限する。すなわち、各タプルは、自身の到来時刻から時間Ｔが経過した時刻に、生存期間を終了する。
【０００７】
グループ別ウィンドウは“［ＰＡＲＴＩＴＩＯＮ  ＢＹ  Ｃ１．．．Ｃｍ  ＲＯＷＳ  Ｎ］”のように、ユーザが指定したカラムＣ１．．．Ｃｍの値によってタプルをグループ分けし、グループ別に個数ウィンドウの定義に従って生存期間を制限する。以降では、これらのカラムをグルーピングカラムと呼ぶ。グルーピングカラムは、単独指定に限らず、複数の組合せでも構わない。
【０００８】
各タプルの生存期間は、期間の開始を意味するプラスタプルと、終了を意味するマイナスタプルによって表現される。各ウィンドウは、タプルの入力時にプラスタプルを出力し、タプルの生存期間終了時にマイナスタプルを出力する。例えば、ユーザが同時生存数を３と指定した個数ウィンドウに、４つのタプルＡ、Ｂ、Ｃ、Ｄが順番に到来した場合、同ウィンドウは、タプルＤの到来時にＡのマイナスタプルとＤのプラスタプルを同時に出力する。以上の処理を含む、ストリームデータ処理の実現方法に関する詳細は、非特許文献１に記載されている。
【０００９】
各ウィンドウのメモリ使用量は次のようになる。個数ウィンドウのメモリ使用量は、一定量で制限される。時間ウィンドウのメモリ使用量は、タプルを入力するレートによって増減する。但し、メモリ使用量の増加は一時的であり、単調に増え続けることはない。一方、両ウィンドウと異なり、グループ別ウィンドウでは、一旦作成されたグループについては、ユーザ指定数を最大としてタプルが残り続けるため、既存グループに属さないタプルが到来する都度、新規グループが生成され、メモリ使用量が単調増加する可能性がある。
【００１０】
例えば、株式取引の分析において、銘柄毎にグループを分けるケースでは、グループの生成数は最大でも銘柄の種類数と同じであるため、メモリ使用量が増え続けることは無い。一方、トレーダ毎にグループを分けるケースでは、新規トレーダが参加する度にグループが生成され、かつトレーダの集合には制限が無いため、メモリ使用量が増え続ける可能性がある。実際には、全てのトレーダが取引し続ける訳ではないので、取引を停止したトレーダに対応するグループのタプルを消去して、使用メモリを回収するべきであるが、グループ別ウィンドウではこのような回収処理が不可能である。そのため、グループ別ウィンドウを用いた場合では、一種のメモリリークに繋がる可能性がある。
【００１１】
グループ別ウィンドウは、複数の分析対象の最新状態を表現するために有用である一方で、上記の課題が存在するため、上述のような特性を考慮して利用する必要がある。
【００１２】
本技術分野の背景技術として、時限付きグループ別ウィンドウ（非特許文献２）がある。この文献には、“Ｓ[Ｐａｒｔｉｔｉｏｎ  Ｂｙ  Ａ１．．．Ａｋ  Ｒｏｗｓ  Ｎ  Ｒａｎｇｅ  Ｔ]”（但し、Ａ１．．．Ａｋはグルーピングカラム、Ｎは個数、Ｔは時間）という書式によって、グループ別個数制限による生存期間終了時刻と、時間制限による生存期間終了時刻を比較して、早い方の時刻にタプルを消滅させる（すなわち、当該タプルのマイナスタプルを送出する）ウィンドウの仕様が記載されている。
【００１３】
また、ウィンドウに対する消去タプル検索構文（非特許文献３）がある。この文献には、“ＯＮ  ＩｎＳｔｒｅａｍ  ＤＥＬＥＴＥ  ＦＲＯＭ  ＭｙＷｉｎｄｏｗ１  ＷＨＥＲＥ ＩｎＳｔｒｅａｍ．Ｓｙｍｂｏｌ＝ＭｙＷｉｎｄｏｗ１．Ｓｙｍｂｏｌ”（但し、ＩｎＳｔｒｅａｍ、ＭｙＷｉｎｄｏｗ１、およびＳｙｍｂｏｌは、それぞれストリーム名、ウィンドウ名、およびカラム名の例）という書式によって、ストリームへのタプル到来をトリガとして、ウィンドウ上に生存中のタプルから、検索条件を満足するタプル集合を抽出し、同タプル集合を削除する（すなわち、同タプル集合に属する各タプルのマイナスタプルを送出する）処理の定義仕様が記載されている。
【００１４】
また、特開２０１０−１０８０７３号公報（特許文献１）が知られている。この特許文献１には、「クエリが、ある時間間隔内にシステムに到来したストリームデータを処理対象とする時間ウィンドウを含む場合に、この時間ウィンドウをより小さい幅のサブウィンドウに区切り、受け付けたストリームタプルが新しいサブウィンドウに区分けされる場合に、このサブウィンドウ内に集約タプルを生成し、集約タプルの生存期間の終了時刻を、受け付けたストリームタプルのタイムスタンプにクエリで指定された前記時間ウィンドウの幅を加えた時刻に設定し、受け付けたストリームタプルが既存のサブウィンドウに区分けされる場合に、当該ストリームタプルを用いて集約タプルを更新し、更新した集約タプルの生存期間終了時刻を、受け付けたストリームタプルのタイムスタンプにクエリで指定された時間ウィンドウの幅を加えた時刻に設定し、設定した生存期間終了時刻に、集約タプルを消去するためのフラグをつけたストリームタプルを生成し、これら集約タプルを用いてクエリの処理結果を計算するストリームデータ処理方法、及びそのシステムを提供する。」と記載されている。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２０１０−１０８０７３号公報
【非特許文献】
【００１６】
【非特許文献１】Ａ． Ａｒａｓｕ， Ｓ． Ｂａｂｕ  ａｎｄ Ｊ． Ｗｉｄｏｍ  著、Ｔｈｅ ＣＱＬ Ｃｏｎｔｉｎｕｏｕｓ Ｑｕｅｒｙ Ｌａｎｇｕａｇｅ： Sｅｍａｎｔｉｃ Ｆｏｕｎｄａｔｉｏｎｓ  ａｎｄ Ｑｕｅｒｙ Ｅｘｅｃｕｔｉｏｎ”、１２１〜１４２頁、２００３年
【非特許文献２】“Ｏｒａｃｌｅ  Ｃｏｍｐｌｅｘ  Ｅｖｅｎｔ  Ｐｒｏｃｅｓｓｉｎｇ  ＣＱＬ  Ｌａｎｇｕａｇｅ  Ｒｅｆｅｒｅｎｃｅ  １１ｇ  Ｒｅｌｅａｓｅ  １（１１．１．１．４．０）”、４−１８頁
【非特許文献３】“Ｓｙｂａｓｅ  ＣＥＰ  Ｏｐｔｉｏｎ  Ｒ４  ＣＣＬ  Ｒｅｆｅｒｅｎｃｅ  Ｇｕｉｄｅ”、１２３頁
【発明の概要】
【発明が解決しようとする課題】
【００１７】
上記非特許文献２の方法は、グループ別ウィンドウにおけるメモリ使用量の単調増加を解消する。しかしながら、本来消去するべきではないグループについても、制限時間が経過すれば消滅してしまうため、グループ別ウィンドウで監視すべきグループが消失して不正な処理の発生に繋がる可能性がある。また、上記非特許文献２では、不要になったグループについても、制限時間が経過するまでは残留するため、一時的に無駄なメモリ領域が使用されることになる。
【００１８】
上記非特許文献３の方法は、不要なタプルを、丁度不要となったタイミングで削除することが可能であるため、上記のような不正処理、あるいは無駄なメモリ使用を発生させることなく、グループ別ウィンドウのメモリリークを解決可能である。一方で、タプルを削除した瞬間に大量の計算が発生する可能性がある。
【００１９】
例えば、図２Ａのクエリｓｔａｔ（２０１）は、特定のトレーダ群について、銘柄別に直近の１００個の取引の金額を、売り買い別に集計する処理である。ストリームｔｒａｄｅは取引イベントを、ストリームｍｏｎｉｔｏｒは監視対象となるトレーダの名前を表すストリームである。なお、“［ＵＮＢＯＵＮＤＥＤ］”は、生存期間を制限しないウィンドウである。カラムｕｓｅｒ、ｓｔｏｃｋ、ａｓｋ＿ｂｉｄ、ｐｒｉｃｅ、およびｖｏｌｕｍｅは、それぞれトレーダ名、取引銘柄、売りと買いを区別するフラグ、株価、および売買数量を表す。ａｍｏｕｎｔは、集計結果である取引金額合計を表す。本クエリでは、トレーダと銘柄の組合せを一つのグループとし、一グループ当り１００個のタプルを分析対象として生存させている。
【００２０】
非特許文献３では、タプル消去のトリガとなるストリームｄｅｌ＿ｓｔａｔｅ、および、消去タプル検索条件を定義する、以下のような記述をクエリ２０１に追加することで、グループ毎にタプルを消去することが可能である。
【００２１】
ＲＥＧＩＳＴＥＲ  ＳＴＲＥＡＭ  ｄｅｌ＿ｓｔａｔ(ｕｓｅｒ ＩＮＴ， ｓｔｏｃｋ ＩＮＴ)；
ＯＮ  ｄｅｌ＿ｓｔａｔ
ＤＥＬＥＴＥ  ＦＲＯＭ  ｔｒａｄｅ＿ｗｉｎ
ＷＨＥＲＥ  ｄｅｌ＿ｓｔａｔ．ｕｓｅｒ＝ｔｒａｄｅ＿ｗｉｎ．ｕｓｅｒ
ＡＮＤ  ｄｅｌ＿ｓｔａｔ．ｓｔｏｃｋ＝ｔｒａｄｅ＿ｗｉｎ．ｓｔｏｃｋ；
但し、ｔｒａｄｅ＿ｗｉｎは、以下のようにウィンドウ定義のみを切り出したクエリとし、クエリｓｔａｔのＦＲＯＭ句では、このクエリの結果をｔｒａｄｅ＿ｗｉｎ  ＡＳ  ｔｒａｄｅと置き換えて利用すると想定する。
【００２２】
ＲＥＧＩＳＴＥＲ  ＱＵＥＲＹ  ｔｒａｄｅ＿ｗｉｎ
ＳＥＬＥＣＴ  ＊
ＦＲＯＭ  ｔｒａｄｅ
［ＰＡＲＴＩＴＩＯＮ  ＢＹ  ｕｓｅｒ，  ｓｔｏｃｋ  ＲＯＷＳ１００］
以上のようにストリーム、クエリ、および消去タプル検索条件を定義したうえで、ストリームｄｅｌ＿ｓｔａｔに、（ｕｓｅｒ，ｓｔｏｃｋ）＝（ｕＡ，ｓＸ）のタプルを入力することで、グループ別ウィンドウｔｒａｄｅ＿ｗｉｎから、ＷＨＥＲＥ句の条件を満足する（すなわち、トレーダ名がｕＡで、銘柄名がｓＸである）全てのタプルを抽出し、削除することが可能である。
【００２３】
ここで、抽出した全タプルについて、個々にマイナスタプルがウィンドウから出力される。すなわち、１００個のマイナスタプルが同時に出力されることになる。同マイナスタプル群は、後続の関係演算オペレータでも個別に処理されるため、瞬間的に高い計算負荷が発生することになる。
【００２４】
特許文献１の方法は、一つのサブウィンドウに区分けされるタプル群を一グループとして、一つのグループについて、グループ内のタプルを集約した一つの集約タプルのみを保持する。グループの生存期間が終了した（すなわち、グループに属する最後尾のタプルが到来してから、時間ウィンドウで指定された制限時間が経過した）ことをトリガとして、集約タプルを消去する。グループ内のタプルを常に一つのタプルに集約しておくことで、グループ消去時の計算コストを最小化していると見做すことができる。
【００２５】
しかしながら、特許文献１の方法は、集約演算と時間ウィンドウを組み合わせたクエリのみを対象としており、グループ別ウィンドウに関する上記課題を解決することはできない。
【００２６】
そこで、本発明は上記問題点に鑑みてなされたもので、グループ別ウィンドウにおいて分割された各グループを、負荷の増大を回避しながら効率的に削除することを目的とする。
【課題を解決するための手段】
【００２７】
本発明は、プロセッサとメモリを備えた計算機が、クエリ定義を受け付けてオペレータを配置するクエリグラフを設定し、時系列のタプルを含むストリームデータを受け付けて、前記クエリグラフのオペレータで前記タプルを処理するストリームデータ処理方法であって、前記計算機が、前記クエリ定義を受け付けて、前記タプルを一ないし複数のカラムの組であるグルーピングカラムと、当該グルーピングカラムの値の組合せに従ってタプルグループに分割し、当該分割したタプルの同時生存個数を制限し、かつ、特定の条件を含むオペレータを前記クエリグラフに設定する第１のステップと、前記計算機が、前記タプルを含むストリームデータを受け付けて、前記オペレータへ前記タプルを入力する第２のステップと、前記計算機が、前記受け付けたタプルに、前記オペレータに設定された特定の条件が含まれるか否かを判定する第３のステップと、前記計算機が、前記受け付けたタプルに、前記オペレータに設定された特定の条件が含まれると判定したときに、前記グルーピングカラムの値に従って分類されるタプルグループを抽出し、当該タプルグループに属する全てのタプルを一括消去する第４のステップと、を含む。
【発明の効果】
【００２８】
したがって、本発明によれば、グループ別ウィンドウにおいて分割された各グループを、効率的に削除することが可能となる。
【図面の簡単な説明】
【００２９】
【図１】本発明の実施例を示し、ストリームデータ処理サーバが稼働する計算機システムの一例を示すブロック図である。
【図２Ａ】従来例を示し、クエリの一例を示す図である。
【図２Ｂ】本発明の実施例を示し、クエリの一例を示す図である。
【図２Ｃ】本発明の実施例を示し、グループ別ウィンドウオペレータの一例を示すブロック図である。
【図３】本発明の実施例を示し、ストリームデータ処理サーバのオペレータ実行部で構成されるクエリグラフの一例を示すブロック図である。
【図４】本発明の実施例を示し、ストリームデータ処理部の構成の一例を示すブロック図である。
【図５】本発明の実施例を示し、クリアカラム設定処理の一例を示すフローチャートである。
【図６】本発明の実施例を示し、クリアタイプ０の関係演算オペレータにおけるタプル処理の一例を示すフローチャートである。
【図７】本発明の実施例を示し、クリアタイプ１の関係演算オペレータにおけるタプル処理の一例を示すフローチャートである。
【図８】本発明の実施例を示し、クリアタイプ２の関係演算オペレータにおけるタプル処理の一例を示すフローチャートである。
【図９】本発明の実施例を示し、クリアタイプ３の関係演算オペレータにおけるタプル処理の一例を示すフローチャートである。
【図１０】本発明の実施例を示し、関係演算オペレータの構成を示すブロック図である。
【図１１】本発明の実施例を示し、結合オペレータの構成を示すブロック図である。
【図１２】本発明の実施例を示し、クリアタイプ１の集約オペレータの構成を示すブロック図である。
【図１３】本発明の実施例を示し、クリアタイプ２の集約オペレータの構成を示すブロック図である。
【図１４】本発明の実施例を示し、クリアタイプ３の集約オペレータの構成を示すブロック図である。
【図１５】本発明の実施例を示し、射影オペレータの構成を示すブロック図である。
【発明を実施するための形態】
【００３０】
以下、本発明の一実施例を添付図面に基づいて説明する。
【００３１】
図１を用いて、本発明のストリームデータ処理サーバが稼働する計算機システムの一例を説明する。ストリームデータ処理サーバ１００は、プロセッサ１０１、メモリ１０２、ネットワークＩ／Ｆ１０４、ストレージ１０５、およびそれらを接続するバス１０３によって構成される計算機である。メモリ１０２上には、ストリームデータ処理の論理動作を定義するストリームデータ処理部１１０が読み込まれる。ストリームデータ処理部１１０は、プロセッサ１０１によって実行可能な実行イメージである。
【００３２】
ストリームデータ処理サーバ１００は、ネットワークＩ／Ｆ１０４を介して外部ネットワーク１５０に接続される。外部ネットワーク１５０に接続されたホスト計算機１３０上で動作するクエリ登録コマンド実行インタフェース１３１を介して、ホスト計算機１３０のユーザによって定義されたストリームクエリ１３２を、ストリームデータ処理サーバ１００が受信すると、ストリームデータ処理部１１０は、該クエリ定義に従ってストリームデータ処理を実行可能なクエリグラフを生成する。
【００３３】
この後、外部ネットワーク１５０に接続されたデータ発生器（または計算機）１２０によって送信される入力タプル１２１を、ストリームデータ処理サーバ１００が受信する。ストリームデータ処理サーバ１００は、生成されたクエリグラフに従って受信した入力タプル１２１を処理し、結果タプル１４１を生成する。該結果タプル１４１は、外部ネットワーク１５０に接続されたデータ受信機（または計算機）１４０に送信される。なお、データ発生器１２０によって送信される入力タプル１２１は、データ発生器１２０でタイムスタンプを付与された時系列のストリームデータを構成する。
【００３４】
ストレージ１０５は、ストリームデータ処理部１１０の実行イメージの他、一度受取った前記ストリームクエリ１３２のテキストファイルを保存する。ストリームデータ処理部１１０は、起動時にストレージ１０５から該クエリファイルをロードし、クエリグラフを構築することも可能である。
【００３５】
ストリームデータ処理部１１０の各機能部はプログラムとしてメモリ１０２にロードされる。プロセッサ１０１は、各機能部のプログラムに従って動作することによって、所定の機能を実現する機能部として動作する。例えば、プロセッサ１０１は、ストリームデータ処理プログラムに従って動作することでストリームデータ処理部１１０として機能する。他のプログラムについても同様である。さらに、プロセッサ１０１は、各プログラムが実行する複数の処理のそれぞれを実現する機能部としても動作する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００３６】
ストリームデータ処理部１１０の各機能を実現するプログラム、テーブル等の情報は、ストレージ１０５や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【００３７】
図２Ｂは、本発明の実施例を示し、クエリの一例を示す図である。この図２Ｂを用いて、グループ別ウィンドウ（グループ別ウィンドウオペレータ）定義における、データクリア条件を指定する構文を説明する。
【００３８】
データクリア条件は、図２Ｂにおいて、“［”と“］”で囲まれたウィンドウ指定の末尾に、キーワード“ＣＬＥＡＲ  ＯＮ”、および、それに続けてタプル選択条件を記載することで指定する。タプル選択条件としては、グループ別ウィンドウの入力タプルに対して定義可能な、任意の論理式を指定可能である。ここで、グループ別ウィンドウは、前記従来例にも示したように、“［ＰＡＲＴＩＴＩＯＮ  ＢＹ  Ｃ１．．．Ｃｍ  ＲＯＷＳ  Ｎ］”のように、ユーザが指定したカラムＣ１．．．Ｃｍの値によってタプルをグループに分割し、グループ別に個数ウィンドウを定義して生存期間を制限する。なお、これらのカラムを以下ではグルーピングカラムとする。また、グルーピングカラムは、単独指定に限らず、複数の組合せでもよい。
【００３９】
クエリ２０２の例では、グループ別ウィンドウへの入力であるｔｒａｄｅストリームに、カラムａｓｋ＿ｂｉｄの値が文字列‘ｎｏｎ’であるタプルが到来した際に、入力タプルのカラムｕｓｅｒ、およびｓｔｏｃｋカラムの値の組合せと一致するグループのタプル最大１００個を、一括して消去する。
【００４０】
ここで、上記グループ別ウィンドウのグルーピングカラムは｛ｕｓｅｒ，ｓｔｏｃｋ｝である。このカラム群は、ウィンドウから削除されるグループも示すことになる。以降では、ウィンドウから削除されるグループを示すカラム群｛ｕｓｅｒ，ｓｔｏｃｋ｝を、クリアカラムとも呼ぶ。
【００４１】
上記の一括消去においては、消去する各タプルについてマイナスタプルを出力するのではなく、削除されるグループのクリアカラムの値のみをコピーし、それ以外のカラムを不定値（任意の値“＊”）とする、入力ストリームとスキーマが同一の、クリアタプルを一つだけ出力する。クリアタプルは、消滅したタプル群を示すタプルである。
【００４２】
図２Ｃは、グループ別ウィンドウ（オペレータ）３０３の一例を示すブロック図である。グループ別ウィンドウ３０３は、タプル２０３のカラムａｓｋ＿ｂｉｄの値が文字列‘ｎｏｎ’のデータクリア条件を満たす場合、タプル２０３が所属するグループ３２１（ｕＡ，ｓＸ）を一括して削除する。そして、グループ別ウィンドウ３０３は、削除したタプル２０３のグループ属性（クリアカラム＝ｕＡ，ｓＸ）を残し、それ以外のカラムを不定値（ａｎｙ（“＊”））に変更したクリアタプル２０４を一つだけ出力する。なお、タプル２０３は、図１の入力タプル１２１に含まれる。
【００４３】
図３を用いて、ストリームデータ処理方法において、図２Ｂのクエリの一例を変換した結果として、クエリ実行部に生成されるクエリグラフの一例を説明する。３０１、および３０２は、それぞれ入力ストリーム“ｔｒａｄｅ”、および“ｍｏｎｉｔｏｒ”を示し、３０３〜３０６はオペレータ実行部を示す。３０７〜３１０はオペレータ間でのタプルの送受に利用するタプルキューを表す。
【００４４】
図３は、オペレータ実行部として、グループ別ウィンドウ（オペレータ）３０３とＵＮＢＯＵＮＤＥＤウィンドウ（オペレータ）３０４の次段に、結合オペレータ３０５を並列的に結合し、結合オペレータ３０５の次段に、集約オペレータ３０６を結合した例を示す。各オペレータ実行部を構成するオペレータ３０３〜３０６は、処理対象となる生存中のタプル群をそれぞれ管理する。図中タプル３５１〜３６４は、それぞれのオペレータで管理されるタプルを表す。
【００４５】
各オペレータは、クエリ定義に従った処理を効率的に実行するために、処理対象のタプルを、カラム値の組合せに従ってグループ分けし、当該組合せをキーとするインデクスで管理する。このインデクスをオペレータインデクス３４１、３４２、３４３、３４４と呼ぶ。また、このカラムの組合せを、グループ別ウィンドウと同様にグルーピングカラムと呼ぶ。以降では、キーを名前として各グループを示す。例えば、グループ別ウィンドウ３０３において、グルーピングカラムの組合せが｛ｕＡ，ｓＸ｝であるタプル３５１〜３５３を保持するグループ３２１は、［ｕＡ，ｓＸ］グループと呼ぶ。
【００４６】
図２Ｂのクエリでは、カラムｕｓｅｒが結合条件として指定されているため、結合オペレータ３０５では、｛ｔｒａｄｅ．ｕｓｅｒ｝をグルーピングカラムとしている。また、集約オペレータ３０６では、ＧＲＯＵＰ  ＢＹ構文で指定されている｛ｔｒａｄｅ．ｕｓｅｒ，ｔｒａｄｅ．ｓｔｏｃｋ，ｔｒａｄｅ．ａｓｋ＿ｂｉｄ｝をグルーピングカラムとしている。
【００４７】
図４を用いて、本発明におけるストリームデータ処理部１１０の論理構成を説明する。ユーザが利用するホスト計算機１３０で、ストリームクエリ１３２の登録操作を実行すると、クエリパーサ４０１が、ストリームクエリ１３２を受け付けて、１以上のオペレータを配置したクエリグラフ構成情報４０２に変換する。
【００４８】
クエリ実行部構成処理４０３は、クエリグラフ構成情報４０２に基づいて、クエリ実行部４１０に、図３で示したようなクエリグラフを構築する。クエリ実行部４１０には、クエリグラフのノードであるオペレータ毎に、各オペレータの処理を実行するオペレータ実行部４１１〜４１６が配備される。オペレータ実行部４１１〜４１６の一例として、図３で示したグループ別ウィンドウのオペレータ３０３〜集約オペレータ３０６が含まれる。
【００４９】
ここで、本発明では、グループ別ウィンドウの特定グループがクリアされた際に、後続のオペレータにおけるクリア処理を効率化するように、各オペレータ実行部４１１〜４１６におけるタプルのグループ分け方法を決定する必要がある。このようなグループ別ウィンドウの特定グループがクリアされたときに、グループ分けの決定を担当するクリアカラム設定処理４０４を、クエリ実行部構成処理４０３の一部として含む。
【００５０】
図５を用いて、ストリームデータ処理部１１０で行われるクリアカラム設定処理４０４のフローチャートを示す。このフローチャートでは、各オペレータのグルーピングカラム、および各オペレータの入力となる前段オペレータのクリアカラムに基づいて、通常のオペレータ処理と、グループのクリア時の処理を効率化するように、各オペレータのタプル処理方法を、４つのタイプ（クリアタイプ０〜３）から選択する。図４に示したクエリグラフ構成情報４０２の個々のオペレータについて、このフローチャートを適用する。
【００５１】
ステップ５０１において、前段オペレータのクリアカラムを取得し、ステップ５０２、５０３、５０４の条件判定によって、クリアカラムとグルーピングカラムの包含関係に従って、４つのステップのいずれかひとつに分岐する。
【００５２】
ステップ５０２では、クリアカラムがグルーピングカラムの部分集合であるか否かを判定する。クリアカラムがグルーピングカラムの部分集合である場合には、ステップ５０３へ進み、そうで無い場合にはステップ５０４に進む。
【００５３】
ステップ５０３では、クリアカラムとグルーピングカラムが一致する場合は、ステップ５０５に進み、当該オペレータの処理方法はクリアタイプ０となる。クリアカラムを構成するカラムが全てグルーピングカラムに含まれる場合は、ステップ５０６に進み、当該オペレータの処理方法はクリアタイプ１となる。
【００５４】
一方、ステップ５０４の判定では、グルーピングカラムを構成するカラムが全てクリアカラムに含まれる場合は、ステップ５０７に進み、当該オペレータの処理方法はクリアタイプ２となる。クリアカラムとグルーピングカラムが互いに包含関係にない場合は、ステップ５０８に進み、クリアタイプ３となる。
【００５５】
クリアカラムと、グルーピングカラムは、それぞれ、入力タプル１２１をグループ分けして管理する目的で利用される。グルーピングカラムについては、前述のようにオペレータインデクスのキーとなる。一方の、クリアカラムも同様に、グループ分けしてインデクスで管理するためのキーとなる。クリアカラムをキーとするインデクスを、クリアインデクスと呼ぶ。
【００５６】
クリアカラムとグルーピングカラムの包含関係において、包含する側をキーとするインデクスは、包含されるインデクスに対して、より細かいタプルグループを形成することになる。
【００５７】
ここで、より細かい方のグループを内グループ、他方を外グループと呼ぶ。ステップ５１０〜５１２は、クリアカラムとグルーピングカラムの包含関係に基づいて、内グループと外グループのそれぞれを、クリアインデクスとオペレータインデクス３４１〜３４４のどちらで管理するかを定める。なお、ステップ５０８で設定するクリアタイプ３については、クリアカラムとグルーピングカラムの構成カラムの和集合をとって、改めてクリアカラムとすることで、クリアカラムがグルーピングカラムを包含する関係に変更したうえで、ステップ５１２を適用する。最後に、ステップ５１３では、各オペレータ実行部４１１〜４１６を、クリアタイプ０〜３毎に決められた処理で構成する。
【００５８】
図１０は、関係演算オペレータ１００１の構成を示すブロック図である。
【００５９】
関係演算オペレータ１００１は、タプルキュー１００２より取得したタプルについて、クリアタプルと通常タプルのどちらであるかを判定し、クリアタプルであればクリアタプル処理部１０１２で、通常タプルであれば通常タプル処理部１０１５で、それぞれ処理する。
【００６０】
クリアタプル処理部１０１２は、タプルグループ削除部として内グループ削除部１０１３と、外グループ削除部１０１４を備える。上述したクリアカラムとグルーピングカラムの包含関係に基づいて、内グループ削除部１０１３と、外グループ削除部１０１４を区別して利用する。
【００６１】
通常タプル処理部１０１５は、内グループをクリアインデクスかオペレータインデクスのいずれかより抽出し、内グループで管理されるデータを更新する。
【００６２】
クリアインデクス１０２１、オペレータインデクス１０２２、および両インデクスで管理するタプルグループ１０２３〜１０３０は、関係演算オペレータ１００１を実行するオペレータ実行部４１１〜４１６のワークエリアであるテンポラルストア１０２０上で管理される。テンポラルストア１０２０上のデータに対するアクセスは、グループ抽出／更新部１０１７を経由して実行する。
【００６３】
外グループ更新処理部１０１８は、内グループの削除／更新に伴う外グループへの影響を各オペレータの処理内容に従って判断し、テンポラルストア１０２０内のデータ、あるいは結果タプルに反映する。結果タプル出力処理１０１９は、各オペレータの処理内容に従って、結果タプルを生成し、タプルキュー１００３に出力する。
【００６４】
図６を用いて、クリアタイプ０の場合に関係演算オペレータ１００１で行われる処理の一例を示すフローチャートについて説明する。
【００６５】
関係演算オペレータ１００１は、ステップ６０１でタプルを入力し、ステップ６０２でタプルがクリアタプルか否かを判定する。クリアタプルの場合は、ステップ６０３でオペレータインデクス１０２２から内グループを抽出し、ステップ６０４では抽出された内グループに属するタプル群を一括削除する。さらにステップ６０５で、一括削除したタプルグループのクリアカラムの値のみをコピーし、それ以外のカラムを不定値とする、当該オペレータ実行部４１１の出力結果とスキーマが同一のクリアタプルを一つだけ出力する。
【００６６】
通常タプルの場合は、ステップ６０６でオペレータインデクス１０２２からタプルグループを抽出し、ステップ６０７で通常のオペレータの処理内容に従ってステップを実行し、結果タプルを出力する。
【００６７】
以上の処理によって、クリアタイプが０の場合には、オペレータインデクス１０２２から内グループを抽出して所定の処理を実行し、クリアタプルの場合は、抽出された内グループに属するタプル群を一括削除し、出力結果とスキーマが同一のクリアタプルを一つだけ出力する。
【００６８】
図７を用いて、クリアタイプ１の場合に関係演算オペレータ１００１で行われる処理の一例をフローチャートについて説明する。
【００６９】
関係演算オペレータ１００１は、ステップ７０１でタプルを入力し、ステップ７０２でタプルがクリアタプルか否かを判定する。クリアタプルの場合は、ステップ７０３でクリアインデクス１０２１から外グループ１０２３、１０２４を抽出し、ステップ７０４で抽出された外グループに属する内グループ群、および各内グループに属するタプル群を一括削除する。さらにステップ７０５では、抽出された外グループのクリアカラムの値のみをコピーし、それ以外のカラムを不定値とする、当該関係演算オペレータ１００１の出力結果とスキーマが同一のクリアタプルを一つだけ出力する。
【００７０】
通常タプルの場合は、ステップ７０６でオペレータインデクス１０２２からタプルグループを抽出し、ステップ７０７で通常のオペレータの処理内容に従ってステップを実行し、結果タプルを出力する。
【００７１】
以上の処理によって、クリアタイプが１でクリアタプルの場合には、クリアインデクス１０２１から外グループを抽出して、外グループに属する内グループとタプル群を一括削除し、当該関係演算オペレータ１００１の出力結果とスキーマが同一のクリアタプルを一つだけ出力する。
【００７２】
図８を用いて、クリアタイプ２の関係演算オペレータ１００１における、タプル処理の一例をフローチャートに従って説明する。
【００７３】
関係演算オペレータ１００１は、ステップ８０１でタプルを入力し、ステップ８０２でタプルがクリアタプルか否かを判定する。クリアタプルの場合は、ステップ８０３でクリアインデクス１０２１から内グループを抽出し、ステップ８０４では抽出した内グループを削除する。
【００７４】
通常タプルの場合は、ステップ８０５でクリアインデクス１０２１から内グループを抽出し、ステップ８０６で通常のオペレータの処理内容に従って内グループのデータを更新する。ステップ８０４、ステップ８０６の影響により、抽出された内グループを包含する外グループに関して、通常のオペレータの処理内容に従った結果タプルを出力する必要がある。外グループへの影響の反映をステップ８０７で実施し、結果タプルの出力をステップ８０８で実行する。
【００７５】
以上の処理によって、クリアタイプが２でクリアタプルの場合には、クリアインデクス１０２１から内グループを抽出して、抽出された内グループとタプル群を一括削除する。そして、内グループの影響を受ける外グループの更新を行う。
【００７６】
図９を用いて、クリアタイプ３の関係演算オペレータ１００１における、タプル処理の一例をフローチャートに従って説明する。
【００７７】
関係演算オペレータ１００１は、ステップ９０１でタプルを入力し、ステップ９０２でタプルがクリアタプルか否かを判定する。クリアタプルの場合は、ステップ９０３でクリアインデクス１０２１から内グループを抽出する。このとき、複数の内グループが、クリアタプルによる削除対象となる可能性がある。その全ての内グループを、ステップ９０４〜９０６のループ処理で削除する。
【００７８】
一方、通常タプルの場合は、ステップ９０７でクリアインデクス１０２１から内グループを抽出し、ステップ９０８で通常のオペレータの処理内容に従って内グループのデータを更新する。そして、関係演算オペレータ１００１は、ステップ９０５、ステップ９０８の影響により、削除した内グループ群を包含する外グループ群に関して、通常のオペレータの処理内容に従った結果タプルを出力する必要がある。関係演算オペレータ１００１は外グループへの影響の反映をステップ９０９で実施し、結果タプルの出力をステップ９１０で実行する。
【００７９】
以上の処理によって、クリアタイプが３でクリアタプルの場合には、クリアインデクス１０２１から内グループの集合を抽出して、抽出された内グループの集合とタプル群を一括削除する。そして、内グループの影響を受ける外グループの更新を行う。
【００８０】
図１１を用いて、結合オペレータでのクリアタプルの処理の一例について説明する。図１１のテンポラルストア１１０１は、図１０に示した関係演算オペレータ１００１のテンポラルストア１０２０を置き換えて、関係演算オペレータが結合オペレータとして機能する場合を示す。
【００８１】
図中１１５０、１１５１はそれぞれ、結合オペレータの入力スキーマ、および出力スキーマである。また、各スキーマ１１５０、１１５１内の下線部はクリアカラムである。例として、グループ別ウィンドウに（ｕＡ，ｓＸ，‘ｎｏｎ’，ｐｉ，ｖｉ）というカラム値の組合せを持ったタプルが入力され、グループ別ウィンドウがクリアタプル１１５２（ｕＡ，ｓＸ，＊，＊，＊）を出力し、クリアタプル１１５２が当該オペレータに入力されたケースを想定する。ただし、値「＊」は任意の値である。
【００８２】
結合オペレータのグルーピングカラムは、図２Ｂで示したクエリ２０２の結合条件に基づき｛ｔｒａｄｅ．ｕｓｅｒ｝となる。クリアカラムがグルーピングカラムを包含するため、図８に示したクリアタイプ２のフローチャートに従って処理が実行される。図８のステップ８０３、８０４に従って、クリアインデクス１１０２から内グループ１１０３（ｕＡ，ｓＸ）を削除する。
【００８３】
この結果、内グループ１１０３（ｕＡ，ｓＸ）を包含する外グループ３２５（ｕＡ）のタプルセットが減少する。但し、結合オペレータの処理では、外グループ３２５に対する影響はそれのみであるため、ステップ８０７として特別な処理は不要である。ステップ８０８において、結果タプルとしてクリアカラム｛ｔｒａｄｅ．ｕｓｅｒ，ｔｒａｄｅ．ｓｔｏｃｋ｝＝｛ｕＡ，ｓＸ｝のタプル群の消滅を表すクリアタプル１１５３を出力する。
【００８４】
以上のように、結合オペレータは、クリアタイプ２のクリアタプルが入力されるとテンポラルストア１１０１からクリアカラムが一致するタプルを除去する。そして、結合オペレータは、結合後のスキーマ１１５１において、クリアカラムを残し、クリアカラム以外のカラムを任意の値“＊”に変更したクリアタプル１１５３を出力する。
【００８５】
図１２を用いて、集約オペレータでのクリアタプルの処理を説明する。図１２のテンポラルストア１２０１は、図１０に示した関係演算オペレータ１００１のテンポラルストア１０２０を置き換えて、関係演算オペレータが集約オペレータとして機能する場合を示す。
【００８６】
図１２の例では図１１に示した結合オペレータの出力を入力とする例を示す。図中１１５１、１２５１はそれぞれ、集約オペレータの入力スキーマ、および出力スキーマである。また、下線部はクリアカラムである。例として、クリアタプル１１５３（ｕＡ，ｓＸ，＊，＊，＊，＊）が、当該集約オペレータへ入力されたケースを想定する。
【００８７】
当該集約オペレータのグルーピングカラムは、図２Ｂに示したクエリ２０２のＧＲＯＵＰ  ＢＹ句に基づき｛ｔｒａｄｅ．ｕｓｅｒ，ｔｒａｄｅ．ｓｔｏｃｋ，ｔｒａｄｅ．ａｓｋ＿ｂｉｄ｝となる。グルーピングカラムがクリアカラムを包含するため、図７に示したクリアタイプ１のフローチャートに従って処理を実行する。図７のステップ７０３、７０４に従って、クリアインデクス１２０２から外グループ１２０３を削除する。さらにステップ７０５に従って、結果タプルとしてクリアカラム｛ｔｒａｄｅ．ｕｓｅｒ，ｔｒａｄｅ．ｓｔｏｃｋ｝＝｛ｕＡ，ｓＸ｝のタプル群の消滅を表すクリアタプル１２５２を出力する。
【００８８】
以上のように、集約オペレータは、クリアタイプ１のクリアタプルが入力されると、クリアカラムがグルーピングカラムに含まれるため、テンポラルストア１２０１から外グループを削除する。そして、集約オペレータは、消滅したタプル群を示すクリアタプル１２５２（ｕＡ，ｓＸ，＊，＊）を出力する。
【００８９】
図１３を用いて、図２Ｂのクエリ２０２中でのＧＲＯＵＰ  ＢＹ句のカラム（およびＳＥＬＥＣＴ句で出力するカラム）の指定が｛ｔｒａｄｅ．ｕｓｅｒ｝に変更された場合の、集約オペレータにおけるクリアタプルの処理を説明する。図１３のテンポラルストア１３０１は、図１０に示した関係演算オペレータ１００１のテンポラルストア１０２０を置き換えて、関係演算オペレータが集約オペレータとして機能する場合を示す。
【００９０】
図中１１５１、１３５１はそれぞれ、集約オペレータの入力スキーマ、および出力スキーマである。また、下線部はクリアカラムである。例として、クリアタプル１１５３（ｕＡ，ｓＸ，＊，＊，＊，＊）が、当該集約オペレータに入ったケースを想定する。
【００９１】
当該集約オペレータのグルーピングカラムは、上述のＧＲＯＵＰ  ＢＹ句に基づき｛ｔｒａｄｅ．ｕｓｅｒ｝となる。クリアカラムがグルーピングカラムを包含するため、図８に示したクリアタイプ２のフローチャートに従って処理が実行される。図８に示したステップ８０３、８０４に従って、クリアインデクス１３０２から内グループ１３０６を削除する。その結果、内グループ１３０６を包含する外グループ１３０４（ｕＡ）の集計値が変化することになる。図８のステップ８０７として、この集計値の変化を外グループ１３０４に記憶する。さらに、ステップ８０８において、この集計値の変化を表すマイナスタプル１３５２およびプラスタプル１３５３を出力する。
【００９２】
以上のように、集約オペレータは、クリアタイプ２のクリアタプルが入力されると、グルーピングカラムがクリアカラムに含まれるため、クリアカラムに一致する内グループ１３０６を削除する。削除した内グループによって集計値が変化した外グループ１３０４の値を更新し、集計値の変化を表すマイナスタプル１３５２およびプラスタプル１３５３を出力する。
【００９３】
図１４を用いて、図２Ｂのクエリ２０２中でのＧＲＯＵＰ  ＢＹ句のカラム（およびＳＥＬＥＣＴ句で出力するカラム）の指定が｛ｔｒａｄｅ．ｓｔｏｃｋ，ｔｒａｄｅ．ａｓｋ＿ｂｉｄ｝に変更された場合の、集約オペレータにおけるクリアタプルの処理を説明する。図１４のテンポラルストア１４０１は、図１０に示した関係演算オペレータ１００１のテンポラルストア１０２０を置き換えて、関係演算オペレータが集約オペレータとして機能する場合を示す。
【００９４】
図中１１５１、１４５１はそれぞれ、集約オペレータの入力スキーマ、および出力スキーマである。また、下線部はクリアカラムである。例として、クリアタプル１１５３（ｕＡ，ｓＸ，＊，＊，＊，＊）が、当該オペレータに入ったケースを想定する。
【００９５】
当該集約オペレータのグルーピングカラムは、上述のＧＲＯＵＰ  ＢＹ句に基づき｛ｔｒａｄｅ．ｓｔｏｃｋ，ｔｒａｄｅ．ａｓｋ＿ｂｉｄ｝となる。グルーピングカラムとクリアカラムが互いに包含関係にないため、図９に示したクリアタイプ３のフローチャートに従って動作する。図９のステップ９０３〜９０６に従って、クリアインデクス１４０２から内グループ１４０８と１４１０を削除する。その結果、内グループ１４０８、１４１０を包含する外グループ１４０４、１４０５の集計値が変化することになる。ステップ９０９として、これら集計値の変化を外グループ１４０４、１４０５に記憶する。さらに、集約オペレータは、ステップ９１０において、この集計値の変化を表すマイナスタプル１４５２、１４５４、およびプラスタプル１４５３、１４５５を生成して出力する。
【００９６】
以上のように、集約オペレータは、クリアタイプ３のクリアタプルが入力されると、グルーピングカラムとクリアカラムが互いに包含関係にないため、クリアインデクス１４０２から内グループ１４０８と１４１０を削除する。そして、集約オペレータは、削除した内グループによって集計値が変化した外グループ１４０４、１４０５の値を更新し、集計値の変化を表すマイナスタプル１４５２、１４５４およびプラスタプル１４５３、１４５５を出力する。
【００９７】
図１５を用いて、クエリ２０２にクエリ１５００が追加された場合の、射影オペレータにおけるクリアタプルの処理を説明する。図１５のテンポラルストア１５０１は、図１０に示した関係演算オペレータ１００１のテンポラルストア１０２０を置き換えて、関係演算オペレータが射影オペレータとして機能する場合を示す。
【００９８】
図中１２５１、１５５１はそれぞれ、射影オペレータの入力スキーマ、および出力スキーマである。また、下線部はクリアカラムである。例として、クリアタプル１２５２（ｕＡ，ｓＸ，＊，＊）が、当該オペレータに入ったケースを想定する。
【００９９】
当該射影オペレータのグルーピングカラムは、入力ストリームの全カラム、すなわち｛ｔｒａｄｅ．ｕｓｅｒ，ｔｒａｄｅ．ｓｔｏｃｋ，ｔｒａｄｅ．ａｓｋ＿ｂｉｄ，ａｍｏｕｎｔ｝となる。グルーピングカラムがクリアカラムを包含するため、図７に示したクリアタイプ１のフローチャートに従って動作する。射影オペレータは常にクリアタイプ０または１となる。図７のステップ７０３、７０４に従って、クリアインデクス１５０２から外グループ１５０４を削除する。さらにステップ７０５に従って、射影オペレータが結果タプルとしてクリアカラム｛ｉｄ｝＝｛ｕＡ＊１０００＋ｓＸ｝のタプル群の消滅を表すクリアタプル１５５２を出力する。
【０１００】
なお、射影オペレータにおけるクリアカラムは、当該オペレータの前段オペレータにおける、クリアタプルのみから算出されるカラムとなる。そのため、ｖａｌｕｅカラムはクリアカラムに含まれない。
【０１０１】
以上、本発明の実施例について説明したが、これらは本発明を説明するための例示であり、本発明の適応範囲を例示した形態のみに限定するものではない。また、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【０１０２】
なお、本発明において説明した計算機等の構成、処理部及び処理手段等は、それらの一部又は全部を、専用のハードウェアによって実現してもよい。
【０１０３】
また、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体（例えば、非一時的な記憶媒体）に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
【符号の説明】
【０１０４】
１００  ストリームデータ処理サーバ
１０１  プロセッサ
１０２  メモリ
１０５  ストレージ
１１０  ストリームデータ処理部
１２０  データ発生器
１３０  ホスト計算機
１３１  クエリ登録インタフェース
１３２、２０１、２０２、１５００  ストリームクエリ
１４０  データ受信器
１５０  ネットワーク
２０３  タプル
２０４  クリアタプル
３０７〜３１０、１００２、１００３  タプルキュー
３０３〜３０６、４１１〜４１６、１００１  オペレータ実行部
３２１〜３３５、１０２３〜１０３０、１１０３〜１１０６、１２０３〜１２０５、１３０４〜１３０８、１４０４〜１４１３、１５０４〜１５０６  タプルグループ
１２１、１４１、３５１〜３６４、１２０６〜１２０９、１３０９〜１３１１、１４１４〜１４１９  タプル
３４１〜３４４、１０２２、１３０３、１４０３、１５０３  オペレータインデクス
１０２１、１１０２、１２０２、１３０２、１４０２、１５０２  クリアインデクス
１０２０、１１０１、１２０１、１３０１、１４０１、１５０１  テンポラルストア
１１５２、１１５３、１２５２、１５５２  クリアタプル
１３５２、１４５２、１４５４  マイナスタプル
１３５３、１４５３、１４５５  マイナスタプル
１１５０、１１５１、１２５１、１３５１、１４５１、１５５１  スキーマ定義
１０１１  クリアタプル／通常タプル判定部
１０１２  クリアタプル処理部
１０１５  通常タプル処理部
１０１３  内グループ削除部
１０１４  外グループ削除部
１０１６  内グループ更新処理部
１０１７  グループ抽出／更新部
１０１８  外グループ更新処理部
１０１９  結果タプル出力部
４０１  クエリパーサ
４０２  クエリグラフ構成情報
４０３  クエリ実行部構成処理
４０４  クリアカラム設定処理
４１０  クエリ実行部
４２１  タプル入力部
４２２  タプル出力部
【図１】
2014081759.tif 000003
【図２Ａ】
2014081759.tif 000004
【図２Ｂ】
2014081759.tif 000005
【図２Ｃ】
2014081759.tif 000006
【図３】
2014081759.tif 000007
【図４】
2014081759.tif 000008
【図５】
2014081759.tif 000009
【図６】
2014081759.tif 000010
【図７】
2014081759.tif 000011
【図８】
2014081759.tif 000012
【図９】
2014081759.tif 000013
【図１０】
2014081759.tif 000014
【図１１】
2014081759.tif 000015
【図１２】
2014081759.tif 000016
【図１３】
2014081759.tif 000017
【図１４】
2014081759.tif 000018
【図１５】
2014081759.tif 000019