ストリームデータ処理基盤 uCosminexus Stream Data Platform - Application Framework アプリケーション開発ガイド
REGISTER QUERY_ATTRIBUTE::=REGISTER▲QUERY_ATTRIBUTE▲<クエリ名> ▲STREAM_NAME=<データ識別子> ▲PERIOD=<メッシュ間隔> ▲TARGETS=<集合関数1>'('<列名1>')', …,<集合関数N>'('<列名N>')'
クエリに時刻解像度を指定します。
この句のあとに定義する時刻解像度指定の対象となるクエリ名を,ストリームデータ処理システム内で一意になるように指定します。名称の指定については,「3.2.4 名前の指定」を参照してください。
クエリ名は,ほかのREGISTER QUERY_ATTRIBUTE句で指定する名称と重複してはいけません。また,時刻解像度指定の対象となるクエリを定義するREGISTER QUERY句では,必ずRANGEウィンドウを指定してください。
時刻解像度を指定する列名が定義されている,ストリーム名またはクエリ名を指定します。指定するストリーム名またはクエリ名は,REGISTER QUERY_ATTRIBUTE句よりも前に定義されている必要があります。
メッシュ間隔をミリ秒単位で任意に指定します。必ず,単位としてmsを記述してください。
100ミリ秒未満の値は設定できません。また,時刻解像度を指定するクエリ名の句に指定されるRANGEウィンドウの間隔がメッシュ間隔を超える場合は,メッシュ間隔はRANGEウィンドウの間隔に設定されます。
例えば,メッシュ間隔が1,000ミリ秒で,RANGEウィンドウの間隔が500ミリ秒の場合,メッシュ間隔は500ミリ秒に設定されます。また,メッシュ間隔がRANGEウィンドウより小さく,かつ86,400,000ミリ秒より大きい場合は,86,400,000ミリ秒に設定されます。
なお,100ミリ秒未満の値を指定した場合は,100ミリ秒に設定されます。
集合関数を指定します。ここで指定できる集合関数を次の表に示します。
表4-3 指定できる集合関数
項番 | 集合関数 | 意味 |
---|---|---|
1 | SUM | 合計値の計算に使用します。 |
2 | MAX | 最大値の計算に使用します。 |
3 | MIN | 最小値の計算に使用します。 |
指定できる集合関数の個数は,1〜256個です。
STREAM_NAMEで指定したデータ識別子が持つ列名を指定します。
列名は,重複してはいけません。
指定できる列名の個数は,1〜256個です。
ありません。
(正しい指定例) REGISTER STREAM stock(price INTEGER, name VARCHAR(10)); REGISTER QUERY q0 ISTREAM( SELECT name, price AS price0, price AS price1 FROM stock[NOW] ); REGISTER QUERY_ATTRIBUTE q1 STREAM_NAME=q0 PERIOD=300ms TARGETS=SUM(price0),MAX(price1); REGISTER QUERY q1 ISTREAM( SELECT q0.name, SUM(q0.price0) AS sum_price, MAX(q0.price1) AS max_price FROM q0[RANGE 1 MINUTE] GROUP BY q0.name );
(誤った指定例) REGISTER STREAM stock(price INTEGER, name VARCHAR(10)); REGISTER QUERY q0 ISTREAM( SELECT name, price AS price0, price AS price1, price AS price2, price AS price3 FROM stock[NOW] ); REGISTER QUERY_ATTRIBUTE q1 STREAM_NAME=q0 PERIOD=300ms TARGETS=SUM(price0),MAX(price1),MIN(price2); REGISTER QUERY q1 ISTREAM( SELECT q0.name, SUM(q0.price0) AS sum_price, MAX(q0.price1) AS max_price FROM q0[RANGE 1 MINUTE] GROUP BY q0.name );
下線は,この例のポイントとなる個所です。
RANGEウィンドウ内にあるタプルで,あらかじめ定義されているストリーム名stockの,列名priceの合計値を求めます。
REGISTER STREAM stock(price INTEGER, name VARCHAR(10)); REGISTER QUERY_ATTRIBUTE q1 STREAM_NAME=stock PERIOD=300ms TARGETS=SUM(price); REGISTER QUERY q1 ISTREAM( SELECT name, SUM (price) AS s1 FROM stock[RANGE 1 MINUTE] GROUP BY name );
REGISTER QUERY_ATTRIBUTE句で指定するクエリには,時刻解像度を指定するクエリq1を指定します。また,REGISTER STREAM句で定義したストリーム名stockの列名priceの合計を求めるため,データ識別子にstockを指定し,TARGETSにSUM(price)を指定します。なお,priceの合計値ではなく,最大値や最小値を求める場合には,MAX,MINを指定します。
RANGEウィンドウ内にあるタプルで,あらかじめ定義されているストリーム名stockの,列名priceの合計値,最大値,最小値を求めます。
REGISTER STREAM stock(price INTEGER, name VARCHAR(10)); REGISTER QUERY q0 ISTREAM( SELECT name, price AS price0, price AS price1, price AS price2 FROM stock[NOW] ); REGISTER QUERY_ATTRIBUTE q1 STREAM_NAME=q0 PERIOD=300ms TARGETS=SUM(price0),MAX(price1),MIN(price2); REGISTER QUERY q1 ISTREAM( SELECT q0.name, SUM(q0.price0) AS sum_price, MAX(q0.price1) AS max_price, MIN(q0.price2) AS min_price FROM q0[RANGE 1 MINUTE] GROUP BY q0.name );
データ識別子stock,列名priceのクエリについて,複数の集合演算を実行する場合に,TARGETSに同一の列名priceは指定できません。例えば,「TARGETS=SUM(price), MAX(price), MIN(price)」のようには指定できません。
この場合,列名priceを合計値用,最大値用,最小値用にそれぞれ定義する必要があります。この例では,CQL文によって列名priceを置き換えた列名price0,price1,price2を持つデータ識別子(ここではq0)を定義しています。q0で定義した列名を使用してq1でそれぞれ演算を実行することで,複数の文の集合関数を実行できます。
All Rights Reserved. Copyright (C) 2010, 2014, Hitachi, Ltd.