2.2.2 操作系CQLによるストリームデータの演算処理の指定
(1) ウィンドウ演算(分析対象データの抽出)
ウィンドウ演算は,ストリームデータから分析対象のデータを抽出するために使用します。クエリ中では,FROM句でのストリームの名称に続けてウィンドウを指定します。ウィンドウ演算には,次の4種類があります。
- ROWSウィンドウ
- RANGEウィンドウ
- NOWウィンドウ
- PARTITION BYウィンドウ
それぞれのウィンドウ演算について,以降に説明します。
- ROWSウィンドウ
- タプルの個数でストリームデータから抽出するタプルを指定するウィンドウです。ROWSウィンドウで生成される入力リレーションは,最新のタプルから指定の個数までさかのぼったタプルの集合です。ROWSウィンドウでは,タプルを受信するごとに新たなタプルが入力リレーションに追加されます。また,不要になったタプルは,入力リレーションから削除されます。
- ROWSウィンドウでは,抽出するタプルの個数を指定します。例えば,「[ROWS 3]」と指定すると,最新のタプルから順番に3個のタプルが抽出され,入力リレーションとなります。ROWSウィンドウによる分析対象データの抽出を次の図に示します。
図2-7 ROWSウィンドウによる分析対象データの抽出
![[図データ]](figure/zd020700.gif)
- この図に示したウィンドウ演算では,抽出するタプルを3個に指定しているため,入力リレーションには3個のタプルが保持されます。タプルの保持数の上限を超えないよう,入力タプルが入力リレーションに追加されたタイミングで,入力リレーション内の最も古いタプルが削除されます。
- RANGEウィンドウ
- 時間でストリームデータから抽出するタプルを指定するウィンドウです。RANGEウィンドウで生成される入力リレーションは,最新のタプルから指定された時間までさかのぼったタプルの集合です。
- RANGEウィンドウでは,タプルを抽出する時間を指定します。例えば,「[RANGE 3 SECOND]」と指定すると,最新のタプルから3秒以内のタイムスタンプが設定されているすべてのタプルが抽出され,入力リレーションとなります。
- 時間の指定には,次の表に示す単位を指定できます。
表2-2 CQL文に指定できる時間の単位
CQL文の指定 | 単位 |
---|
MILLISECOND | ミリ秒 |
SECOND | 秒 |
MINUTE | 分 |
HOUR | 時 |
DAY | 日 |
- RANGEウィンドウによる分析対象データの抽出を次の図に示します。
図2-8 RANGEウィンドウによる分析対象データの抽出
![[図データ]](figure/zd020800.gif)
- この図に示したウィンドウ演算では,最新のタプルから3秒以内(10:00:01~09:59:58)のタイムスタンプが設定されているすべてのタプルを抽出するよう指定しています。そのため,この条件に該当しないタプルは,入力タプルが入力リレーションに追加されたタイミングで,入力リレーションから削除されます。
- なお,RANGEウィンドウを使用する場合,入力データによっては,Stream Data Platform - AF上で扱うタプルの数が膨大になり,メモリ使用量を増大させることがあります。このとき,時刻解像度機能を使用すると,メモリ使用量の増加を防止できます。時刻解像度機能については,マニュアル「uCosminexus Stream Data Platform - Application Framework アプリケーション開発ガイド」を参照してください。
- NOWウィンドウ
- その時点で到着したタプルだけを処理する場合に指定するウィンドウです。タイムスタンプが同一の複数のタプルが同時に到着した場合は,それらのすべてのタプルが処理の対象となります。NOWウィンドウで演算処理されたタプルは削除されるため,NOWウィンドウで生成される入力リレーションには,最新のタプルだけが存在します。
- NOWウィンドウは,「[NOW]」と指定します。NOWウィンドウによる分析対象データの抽出を次の図に示します。
図2-9 NOWウィンドウによる分析対象データの抽出
![[図データ]](figure/zd020650.gif)
- この図に示したウィンドウ演算では,その時点で到着したタプルだけを処理の対象とします。入力リレーション内のタプルは,演算処理後に削除されるため,タプルが追加されるタイミングでは,入力リレーション内にタプルはありません。
- PARTITION BYウィンドウ
- データの値ごとにストリームデータから抽出するタプルを指定するウィンドウです。ROWSウィンドウと組み合わせて使用します。PARTITION BYウィンドウで生成される入力リレーションは,指定したデータの最新のタプルから,指定の個数までさかのぼったタプルの集合です。
- PARTITION BYウィンドウでは,グルーピングに使用するデータの名称を指定します。さらに,グループごとに抽出するタプルの個数を「ROWS」に続けて指定します。例えば,「[PARTITION BY id ROWS 2]」と指定すると,IDごとに,最新のタプルから順番に2個のタプルが抽出され,入力リレーションとなります。PARTITION BYウィンドウによる分析対象データの抽出を次の図に示します。
図2-10 PARTITION BYウィンドウによる分析対象データの抽出
![[図データ]](figure/zd020900.gif)
- この図に示したウィンドウ演算では,タプルの中段に指定されたIDごとに,2個のタプルを抽出するように指定しています。そのため,入力タプルが入力リレーションに追加されたタイミングで,入力タプルと同じIDで,かつ最も古いタプルが入力リレーションから削除されます。
(2) 関係演算(抽出したデータの処理)
関係演算は,ウィンドウ演算で抽出されたデータを処理するために使用します。次に示すような処理ができます。
- 条件を満たすデータの抽出
- データの計算
- データの集計
- データの分類後の集計
- ストリームデータの結合
- クエリの連結
これらの処理は,SELECT句やWHERE句に,四則演算子,比較演算子,論理演算子,および集合関数を使用して指定します。
指定できる比較演算子および集合関数を次の表に示します。
表2-3 CQL文に指定できる比較演算子
比較演算子 | 比較演算子の使用例 | 使用例の意味 |
---|
<= | A <= B | AはB以下 |
>= | A >= B | AはB以上 |
< | A < B | AはBより小さい |
> | A > B | AはBより大きい |
= | A = B | AはBと等しい |
!= | A != B | AはBと等しくない |
表2-4 CQL文に指定できる集合関数
関数名※ | 説明 |
---|
AVG | 平均値の計算 |
COUNT | 個数の計算 |
MAX | 最大値の計算 |
MIN | 最小値の計算 |
SUM | 合計値の計算 |
- 注※
- 集合関数には,この表に示す関数のほかに,統計関数を提供する組み込み集合関数もあります。
なお,CQL文で指定できる論理演算子は,句ごとに異なります。
CQL文で指定できる演算子や関数の詳細については,マニュアル「uCosminexus Stream Data Platform - Application Framework アプリケーション開発ガイド」を参照してください。
関係演算の実行例については,「2.3 CQLを使用したストリームデータ処理の実行例」を参照してください。
(3) ストリーム化演算(データの処理結果の出力)
ストリーム化演算は,関係演算での処理結果をストリームデータに変換して出力するために使用します。REGISTER QUERY句の直後に指定するストリーム句で指定します。ストリーム化演算には,次の3種類があります。
それぞれのストリーム化演算について,ウィンドウ演算で[ROWS 3]を指定した場合を例に,以降に説明します。
- ISTREAM句
- 新たに出力リレーションに追加されたタプルを出力するストリーム化演算です。ISTREAM句は,出力リレーションが変化するごとに,変化前・変化後の出力リレーションを比較して新たに追加されたタプルを出力します。ISTREAM句による処理結果の出力を次の図に示します。
図2-11 ISTREAM句による処理結果の出力
![[図データ]](figure/zd021000.gif)
- 出力リレーションに,関係演算で処理されたタプルが追加されたため,出力リレーション内の最も古いタプルが削除されます。このとき,ストリーム化演算では「ISTREAM」を指定しているため,出力リレーションに追加されたタプルが出力タプルとなります。
- DSTREAM句
- 出力リレーションから削除されたタプルを出力するストリーム化演算です。DSTREAM句は,出力リレーションが変化するごとに変化前・変化後の出力リレーションを比較し,削除されたタプルを出力します。DSTREAM句による処理結果の出力を次の図に示します。
図2-12 DSTREAM句による処理結果の出力
![[図データ]](figure/zd021100.gif)
- 出力リレーションに,関係演算で処理されたタプルが追加されたため,出力リレーション内の最も古いタプルが削除されます。このとき,ストリーム化演算では「DSTREAM」を指定しているため,出力リレーションから削除されたタプルが出力タプルとなります。
- RSTREAM句
- 一定時間ごとに,出力リレーション内のすべてのタプルを出力するストリーム化演算です。RSTREAM句を指定する場合は,ストリームデータを出力する時間間隔を半角角括弧([ ])で囲みます。例えば,「[RSTREAM 1 MINUTE]」や「[RSTREAM 3 SECOND]」と指定します。時間間隔には,「表2-2 CQL文に指定できる時間の単位」に示す単位を使用できます。RSTREAM句による処理結果の出力を次の図に示します。
図2-13 RSTREAM句による処理結果の出力
![[図データ]](figure/zd021200.gif)
- ストリーム化演算で「RSTREAM 3 SECOND」を指定しているため,システム時刻を基準に,3秒ごとの出力リレーション内のすべてタプルが出力タプルとなります。