疑似列はストリーム要素と同じように動作しますが、実際にはタプルの一部ではありません。
疑似列からの選択はできますが、値の変更はできません。疑似列は引数のない関数にも似ています(1.1.11項「関数」を参照)。
Oracle CQLでは、次の疑似列がサポートされています。
ELEMENT_TIME疑似列は、特定のストリーム要素に関連付けられたタイムスタンプ値をjava.lang.Math.Bigint(Long)として返します。
構文については、pseudo_column::=を参照してください。
この項では、様々な問合せでELEMENT_TIMEを使用する方法を説明します。
例3-1は、select文でELEMENT_TIME疑似列を使用する方法を示しています。ストリームS1にはスキーマ(c1 integer)があります。例3-2に示す入力ストリームがある場合、この問合せは例3-3に示す結果を返します。関数to_timestampを使用して、Long値をタイムスタンプ値に変換しています。
例3-1 Select文でのELEMENT_TIME疑似列
<query id="q4"><![CDATA[
select
c1,
to_timestamp(element_time)
from
S1[range 10000000 nanoseconds slide 10000000 nanoseconds]
]]></query>
例3-3 出力リレーション
Timestamp Tuple Kind Tuple 8000 + 80,12/31/1969 17:00:08 8010 - 80,12/31/1969 17:00:08 9000 + 90,12/31/1969 17:00:09 9010 - 90,12/31/1969 17:00:09 13000 + 130,12/31/1969 17:00:13 13010 - 130,12/31/1969 17:00:13 15000 + 150,12/31/1969 17:00:15 15010 - 150,12/31/1969 17:00:15 23000 + 230,12/31/1969 17:00:23 23010 - 230,12/31/1969 17:00:23 25000 + 250,12/31/1969 17:00:25 25010 - 250,12/31/1969 17:00:25
問合せにGROUP BY句が含まれる場合、SELECT文で直接ELEMENT_TIME疑似列を使用することはできません。かわりに、3.2.2項「GROUP BYでのELEMENT_TIMEの使用」に説明されているように、ビューを使用します。
例3-4の問合せQ1があるとします。GROUP BY句があるため、問合せのSELECT文でELEMENT_TIMEを使用することはできません。
例3-4 GROUP BYを含む問合せ
<query id="Q1"><![CDATA[
SELECT
R.queryText AS queryText,
COUNT(*) AS queryCount
FROM
queryEventChannel [range 30 seconds] AS R
GROUP BY
queryText
]]></query>
かわりに、例3-5に示すようなビューを作成します。V1に相当する派生したストリームには、特定のqueryTextグループに対して(queryText、queryCount、maxTime)が変わるたびに、ストリーム要素が含められます。
例3-5 ビュー
<view id="V1"><![CDATA[
ISTREAM (
SELECT
R.queryText AS queryText,
COUNT(*) AS queryCount,
MAX(R.ELEMENT_TIME) as maxTime
FROM
queryEventChannel [range 30 seconds] AS R
GROUP BY
queryText
)
]]></view>
これらの問合せ要素を選択するには、例3-6に示すように問合せを作成します。
例3-7は、pattern問合せでELEMENT_TIME疑似列を使用する方法を示します。Nth.statusの値が>= F.statusで、そのタプルのNth.ELEMENT_TIME値と最後にFに一致したタプルとの差がjava.lang.Math.Bigint(Long)として指定された間隔に満たない場合、タプルまたはイベントは相関変数Nthに一致します。