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

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

2.3.4 結合処理とROWSウィンドウを併用する場合の注意事項

ここでは,結合処理とROWSウィンドウを併用する場合の注意事項について説明します。

結合処理の結果として出力されるタプルの数がROWSウィンドウで指定したタプル数よりも多い場合,処理結果はROWSウィンドウで指定した数分だけ出力され,すべての処理結果が出力されません。

この問題は,次の二つの条件を満たすクエリを指定した場合に発生します。

  1. あるクエリで,結合演算によって同一時刻を持つ複数のデータを生成する。
  2. 別のクエリで,1.のクエリの結果を入力して処理を実行するが,このクエリのROWSウィンドウで指定した生存タプル数が1.で生成されるデータ数よりも少ない。

この条件に該当するクエリの例を示します。

 
REGISTER STREAM s1 (c1 INT);
REGISTER STREAM s2 (c2 INT);
REGISTER QUERY q1 ISTREAM(        条件1.のクエリ
  SELECT * FROM s1[ROWS 3], s2[ROWS 3]);
REGISTER QUERY q2 ISTREAM(        条件2.のクエリ
  SELECT * FROM q1[ROWS 1]);
 

このクエリに対して,時刻tに,ストリームs1またはs2へのタプルが到着した場合を想定します。クエリq1では,二つのストリームデータを入力して,結合演算を実施します。入力ストリームデータとして[ROWS 3]を指定しているため,時刻tでの結合演算の結果としては,同一時刻を持つ三つのタプルが生成されます。

クエリq2でROWSウィンドウに指定した同時生存タプル数(1)は,クエリq1で生成されるデータ数(3)よりも少ないため,時刻tでの生存タプルは,ウィンドウに到着したタプルのうち最後の一つのタプルだけになります。クエリq1の処理結果のうち,残り二つに対するq2の処理結果は出力されません。

この例の場合,クエリq2のROWSウィンドウで3以上の数を指定するなど,CQLを見直す必要があります。