2.3.6 ストリームデータの結合

複数のストリームデータからタプルを選択して,一つのタプルにまとめる演算処理をストリームデータの結合といいます。

ストリームデータを結合するクエリについて,気温と湿度の2種類のストリームデータを結合し,さらに観測所ごとにタプルを結合する場合を例に説明します。このクエリを実行した場合の,入力データと出力データを次の図に示します。

図2-20 ストリームデータを結合するクエリを実行した場合の入力データと出力データ

[図データ]

クエリの内容
複数のストリームデータを入力とする場合,FROM句にコンマ(,)で区切ってストリームデータを指定します。この場合,ストリームデータごとにウィンドウ演算を指定する必要があります。また,データを結合するには,WHERE句に結合条件を指定します。
湿度のストリームの名称は「humidity_stream」,データの名称は「humidity」とします。

REGISTER STREAM temperature_stream
(observation_time TIME, id INTEGER, temperature INTEGER);
REGISTER STREAM humidity_stream
(observation_time TIME, id INTEGER, humidity INTEGER);
REGISTER QUERY join_operation
ISTREAM (
SELECT temperature_stream.observation_time AS temperature_stream_time,
temperature_stream.id AS temperature_stream_id,
temperature_stream.temperature,
humidity_stream.observation_time AS humidity_stream_time,
humidity_stream.id AS humidity_stream_id,
humidity_stream.humidity
FROM temperature_stream[PARTITION BY id ROWS 1],
humidity_stream[PARTITION BY id ROWS 1]
WHERE temperature_stream.id = humidity_stream.id);

クエリの解説
このクエリの処理対象は,観測所ごとの最新の一つのタプルです。CQL文では観測所ごとに最新の一つのタプルを抽出するPARTITION BYウィンドウを指定しています。
出力データは,気温と湿度の2種類のストリームデータを結合し,さらに観測所ごとにタプルを結合したデータです。WHERE句には「temperature_stream.id = humidity_stream.id」と指定し,IDが同じタプルを結合する条件を指定しています。
また,SELECT句には,出力するデータの名称として,結合したタプルのすべてのデータを指定しています。複数のストリームデータを入力とする場合,異なるストリームデータでデータの名称が重複していることがあります。そのときは,ストリームの名称とデータの名称をピリオド(.)で区切って,どのストリームデータのデータであるのかを明示します。また,データの重複を避けるため,「AS」でデータの名称を指定しています。