ストリームデータ処理基盤 uCosminexus Stream Data Platform - Application Framework アプリケーション開発ガイド

[目次][索引][前へ][次へ]

2.2.1 ウィンドウ演算の種類

ウィンドウ演算では,4種類のウィンドウによって,処理対象を特定します。

それぞれのウィンドウによって生成される入力リレーションについて説明します。

<この項の構成>
(1) データの数による指定(ROWSウィンドウ)
(2) 時間による指定(RANGEウィンドウ)
(3) 到着したタプルのタイムスタンプ時刻による指定(NOWウィンドウ)
(4) データのグループによる指定(PARTITION BYウィンドウ)

(1) データの数による指定(ROWSウィンドウ

ROWSウィンドウは,タプルの数によって入力リレーションの範囲を特定するウィンドウです。

例えば,ストリームs1の入力ストリームデータの直前3個分を入力リレーションとして保持する場合,CQLは次のように定義します。

SELECT … FROM s1 [ROWS 3]…

この場合の入力リレーションの内容を次の図に示します。

図2-3 ROWSウィンドウの例

[図データ]

すでにリレーションにA,B,Cの三つのタプルがある場合に新たなタプルDが到着した場合,到着タプルを含む三つのタプルが入力リレーションの内容になります。このとき,いちばん古いタプルAは,入力リレーションの対象から外れます。

(2) 時間による指定(RANGEウィンドウ

RANGEウィンドウは,時間によって入力リレーションの範囲を特定するウィンドウです。

例えば,ストリームs2の入力ストリームデータの直前3秒分を入力リレーションとして保持する場合,CQLは次のように定義します。

SELECT … FROM s2 [RANGE 3 SECOND]…

この場合の入力リレーションの内容を次の図に示します。

図2-4 RANGEウィンドウの例

[図データ]

タプルCの到着時,現在から直前3秒間分のタプルだけが入力リレーションに残ります。タプルC到着後,タプルBが3秒前のタプルとなり,それよりも前に到着していたタプルAは入力リレーションの対象から外れます。

(3) 到着したタプルのタイムスタンプ時刻による指定(NOWウィンドウ

NOWウィンドウは,その時点で到着したタプルのタイムスタンプ時刻だけを演算の対象にするためのウィンドウです。

ほかのウィンドウで特定する入力リレーションが個数や時間の範囲を持つ「線」のリレーションであるのに対して,NOWウィンドウは到着したタプルと同時刻という「点」のリレーションになります。

例えば,ストリームs3の入力ストリームデータについて,到着したタプルと同時刻のタプルを演算の対象とする場合,CQLは次のように定義します。

SELECT … FROM s3 [NOW]

(4) データのグループによる指定(PARTITION BYウィンドウ

PARTITION BYウィンドウは,タプルの種類ごとに,タプルの個数によって入力リレーションの範囲を特定するウィンドウです。

例えば,ストリームs4の入力ストリームデータについて,列指定リストa1の各値について直前3個分を入力リレーションとして保持する場合,CQLは次のように定義します。

SELECT … FROM s4 [PARTITION BY a1 ROWS 3]

この場合の入力リレーションの内容を次の図に示します。

図2-5 PARTITION BYウィンドウの例

[図データ]

a1列の値として,xとyがあり,それぞれ直前3個分を入力リレーションとして保持しています。a1がyのタプルが到着すると,a1の値がyのタプル(タプルD)が一つ,入力リレーションの対象から外れます。