Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス

11gリリース1 (11.1.1.6.2)

B61613-04(原本部品番号:E12048-08)

目次

例一覧

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

- 構文の図

第I部 Oracle CQLについて

1 Oracle CQLの概要

- 1.1 Oracle CQLの基本

- 1.1.1 ストリームとリレーション

- 1.1.1.1 ストリーム

- 1.1.1.2 リレーション

- 1.1.1.3 リレーションとOracle CEPタプル種類インジケータ

- 1.1.2 リレーションからリレーションへの演算子

- 1.1.3 ストリームからリレーションへの演算子(ウィンドウ)

- 1.1.3.1 Range、RowおよびSlide

- 1.1.3.2 分割

- 1.1.3.3 デフォルトのストリームからリレーションへの演算子

- 1.1.4 リレーションからストリームへの演算子

- 1.1.4.1 デフォルトのリレーションからストリームへの演算子

- 1.1.5 ストリームからストリームへの演算子

- 1.1.6 問合せ、ビューおよび結合

- 1.1.7 パターン認識

- 1.1.8 イベント・ソースとイベント・シンク

- 1.1.8.1 イベント・ソース

- 1.1.8.2 イベント・シンク

- 1.1.8.3 イベント・ソースとイベント・シンクの接続

- 1.1.9 表イベント・ソース

- 1.1.9.1 リレーショナル・データベース表イベント・ソース

- 1.1.9.2 XML表イベント・ソース

- 1.1.9.3 関数表イベント・ソース

- 1.1.10 キャッシュ・イベント・ソース

- 1.1.11 関数

- 1.1.12 データ・カートリッジ

- 1.1.13 時間

- 1.2 Oracle CQL文

- 1.2.1 表記規則

- 1.2.2 構文のショートカットとデフォルト

- 1.2.3 ドキュメントの表記規則

- 1.3 Oracle CQLとSQL標準

- 1.4 Oracle CEPサーバーとツールのサポート

- 1.4.1 Oracle CEPサーバー

- 1.4.2 Oracle CEPツール

- 1.4.2.1 Oracle CEP IDE for Eclipse

- 1.4.2.2 Oracle CEP Visualizer

2 Oracle CQLの基本要素

- 2.1 データ型

- 2.1.1 Oracle CQL組込みデータ型

- 2.1.2 Oracle CQLデータ・カートリッジを使用した他のデータ型の処理

- 2.1.3 ユーザー定義関数を使用した他のデータ型の処理

- 2.2 データ型の比較規則

- 2.2.1 数値

- 2.2.2 日付値

- 2.2.3 文字値

- 2.2.4 データ型変換

- 2.2.4.1 暗黙的なデータ型変換

- 2.2.4.2 明示的なデータ型変換

- 2.2.4.3 SQLデータ型変換

- 2.2.4.4 Oracleデータ・カートリッジのデータ型変換

- 2.2.4.5 ユーザー定義関数のデータ型変換

- 2.3 リテラル

- 2.3.1 テキスト・リテラル

- 2.3.2 数値リテラル

- 2.3.2.1 整数リテラル

- 2.3.2.2 浮動小数点リテラル

- 2.3.3 日時リテラル

- 2.3.4 期間リテラル

- 2.3.4.1 INTERVAL DAY TO SECOND

- 2.4 書式モデル

- 2.4.1 数値書式モデル

- 2.4.2 日時書式モデル

- 2.5 Null

- 2.5.1 Oracle CQL関数でのnull

- 2.5.2 比較条件でのNull

- 2.5.3 条件でのNull

- 2.6 コメント

- 2.7 別名

- 2.7.1 AS演算子を使用した別名の定義

- 2.7.1.1 relation_variable句の別名

- 2.7.1.2 ウィンドウ演算子の別名

- 2.7.2 Aliases要素を使用した別名の定義

- 2.7.2.1 Aliases要素を使用してデータ型の別名を定義する方法

- 2.8 スキーマ・オブジェクト名と修飾子

- 2.8.1 スキーマ・オブジェクトのネーミング・ルール

- 2.8.2 スキーマ・オブジェクトのネーミング・ガイドライン

- 2.8.3 スキーマ・オブジェクトのネーミング例

3 疑似列

- 3.1 疑似列の概要

- 3.2 ELEMENT_TIME疑似列

- 3.2.1 ELEMENT_TIME疑似列の値について

- 3.2.1 システム・タイムスタンプ付きストリームの場合のELEMENT_TIME

- 3.2.1.2 アプリケーション・タイムスタンプ付きストリームの場合のELEMENT_TIME

- 3.2.2 Oracle CQL問合せ内での_TIME疑似列の使用

- 3.2.2.1 SELECTでのELEMENT_TIMEの使用

- 3.2.2.2 GROUP BYでのELEMENT_TIMEの使用

- 3.2.2.3 PATTERNでのELEMENT_TIMEの使用

4 演算子

- 4.1 演算子の概要

- 4.1.1 単項演算子と二項演算子について

- 4.1.2 演算子の優先順位について

- 算術演算子

- 連結演算子

- 二者択一演算子

- 範囲ベースのストリームからリレーションへのウィンドウ演算子

- S[now]

- S[range T]

- S[range T1 slide T2]

- S[range unbounded]

- S[range C on E]

- タプルベースのストリームからリレーションへのウィンドウ演算子

- S [rows N]

- S [rows N1 slide N2]

- 分割されたストリームからリレーションへのウィンドウ演算子

- S [partition by A1,..., Ak rows N]

- S [partition by A1,..., Ak rows N range T]

- S [partition by A1,..., Ak rows N range T1 slide T2]

- リレーションからストリームへのIStream演算子

- リレーションからストリームへのDStream演算子

- リレーションからストリームへのRStream演算子

5 式

- 5.1 式の概要

- aggr_distinct_expr

- aggr_expr

- arith_expr

- arith_expr_list

- case_expr

- decode

- func_expr

- object_expr

- order_expr

- xml_agg_expr

- xmlcolattval_expr

- xmlelement_expr

- xmlforest_expr

- xml_parse_expr

6 条件

- 6.1 条件の概要

- 6.1.1 条件の優先順位

- 6.2 比較条件

- 6.3 論理条件

- 6.4 LIKE条件

- 6.4.1 例

- 6.5 範囲条件

- 6.6 Null条件

- 6.7 複合条件

- 6.8 IN条件

- 6.8.1 集合演算としてのINとNOT INの使用

- 6.8.2 メンバーシップ条件としてのINとNOT INの使用

- 6.8.3 NOT INとNull値

7 共通のOracle CQL DDL句

- 7.1 共通のOracle CQL DDL句の概要

- array_type

- attr

- attrspec

- complex_type

- const_bigint

- const_int

- const_string

- const_value

- identifier

- l-value

- methodname

- non_mt_arg_list

- non_mt_attr_list

- non_mt_attrname_list

- non_mt_attrspec_list

- non_mt_cond_list

- param_list

- qualified_type_name

- query_ref

- time_spec

- xml_attribute_list

- xml_attr_list

- xqryargs_list

第II部 関数

8 組込みの単一行関数

- 8.1 Oracle CQLの組込みの単一行関数の概要

- concat

- hextoraw

- length

- lk

- nvl

- prev

- rawtohex

- systimestamp

- to_bigint

- to_boolean

- to_char

- to_double

- to_float

- to_timestamp

- xmlcomment

- xmlconcat

- xmlexists

- xmlquery

9 組込みの集計関数

- 9.1 Oracle CQLの組込みの集計関数の概要

- 9.1.1 組込み集計関数とWhere、Group ByおよびHaving句

- avg

- count

- first

- last

- max

- min

- sum

- xmlagg

10 Colt単一行関数

- 10.1 Oracle CQLの組込みの単一行Colt関数の概要

- beta

- beta1

- betaComplemented

- binomial

- binomial1

- binomial2

- binomialComplemented

- bitMaskWithBitsSetFromTo

- ceil

- chiSquare

- chiSquareComplemented

- errorFunction

- errorFunctionComplemented

- factorial

- floor

- gamma

- gamma1

- gammaComplemented

- getSeedAtRowColumn

- hash

- hash1

- hash2

- hash3

- i0

- i0e

- i1

- i1e

- incompleteBeta

- incompleteGamma

- incompleteGammaComplement

- j0

- j1

- jn

- k0

- k0e

- k1

- k1e

- kn

- leastSignificantBit

- log

- log10

- log2

- logFactorial

- logGamma

- longFactorial

- mostSignificantBit

- negativeBinomial

- negativeBinomialComplemented

- normal

- normal1

- normalInverse

- poisson

- poissonComplemented

- stirlingCorrection

- studentT

- studentTInverse

- y0

- y1

- yn

11 Colt集計関数

- 11.1 Oracle CQLの組込みの集計Colt関数の概要

- 11.1.1 Oracle CQL Colt集計関数のシグネチャとタプル引数

- 11.1.2 Colt集計関数とWhere、Group ByおよびHaving句

- autoCorrelation

- correlation

- covariance

- geometricMean

- geometricMean1

- harmonicMean

- kurtosis

- lag1

- mean

- meanDeviation

- median

- moment

- pooledMean

- pooledVariance

- product

- quantile

- quantileInverse

- rankInterpolated

- rms

- sampleKurtosis

- sampleKurtosisStandardError

- sampleSkew

- sampleSkewStandardError

- sampleVariance

- skew

- standardDeviation

- standardError

- sumOfInversions

- sumOfLogarithms

- sumOfPowerDeviations

- sumOfPowers

- sumOfSquaredDeviations

- sumOfSquares

- trimmedMean

- variance

- weightedMean

- winsorizedMean

12 Java.lang.Math関数

- 12.1 Oracle CQLの組込みのjava.lang.Math関数の概要

- abs

- abs1

- abs2

- abs3

- acos

- asin

- atan

- atan2

- cbrt

- ceil1

- cos

- cosh

- exp

- expm1

- floor1

- hypot

- IEEERemainder

- log1

- log101

- log1p

- pow

- rint

- round

- round1

- signum

- signum1

- sin

- sinh

- sqrt

- tan

- tanh

- todegrees

- toradians

- ulp

- ulp1

13 ユーザー定義関数

- 13.1 Oracle CQLのユーザー定義関数の概要

- 13.1.1 ユーザー定義関数の種類

- 13.1.1.1 ユーザー定義単一行関数

- 13.1.1.2 ユーザー定義集計関数

- 13.1.2 ユーザー定義関数のデータ型

- 13.1.3 ユーザー定義関数とOracle CEPサーバー・キャッシュ

- 13.2 ユーザー定義関数の実装

- 13.2.1 ユーザー定義の単一行関数の実装方法

- 13.2.2 ユーザー定義の集計関数の実装方法

第III部 データ・カートリッジ

14 データ・カートリッジの概要

- 14.1 データ・カートリッジについて

- 14.1.1 データ・カートリッジ名

- 14.1.2 データ・カートリッジのアプリケーション・コンテキスト

- 14.2 Oracle CQLデータ・カートリッジの型

15 Oracle Javaデータ・カートリッジ

- 15.1 Oracle Javaデータ・カートリッジについて

- 15.1.1 データ・カートリッジ名

- 15.1.2 クラスのロード

- 15.1.2.1 アプリケーション・クラス・スペース・ポリシー

- 15.1.2.2 自動インポートなしクラス・スペース・ポリシー

- 15.1.2.3 サーバー・クラス・スペース・ポリシー

- 15.1.2.4 クラスのロード例

- 15.1.3 メソッドの解決

- 15.1.4 データ型マッピング

- 15.1.4.1 Javaデータ型文字列とOracle CQLデータ型CHAR

- 15.1.4.2 リテラル

- 15.1.4.3 配列

- 15.1.4.4 コレクション

- 15.1.5 Oracle Javaデータ・カートリッジのOracle CQL問合せサポート

- 15.2 Oracle Javaデータ・カートリッジの使用

- 15.2.1 Java APIを使用する問合せ方法

- 15.2.2 エクスポートしたJavaクラスを使用する問合せ方法

16 Oracle Spatial

- 16.1 Oracle Spatialについて

- 16.1.1 データ・カートリッジ名

- 16.1.2 有効範囲

- 16.1.2.1 ジオメトリ・タイプ

- 16.1.2.2 要素情報配列

- 16.1.2.3 縦座標および座標系とSDO_SRID

- 16.1.2.4 ジオメトリック索引

- 16.1.2.5 ジオメトリ関係演算子

- 16.1.2.6 ジオメトリ・フィルタ演算子

- 16.1.2.7 ジオメトリAPI

- 16.1.3 データ型マッピング

- 16.1.4 Oracle Spatialのアプリケーション・コンテキスト

- 16.2 Oracle Spatialの使用

- 16.2.1 Oracle Spatial Java APIでサポートされているジオメトリ・タイプへのアクセス方法

- 16.2.2 ジオメトリの作成方法

- 16.2.3 ジオメトリ・タイプのpublicメソッドおよびフィールドへのアクセス方法

- 16.2.4 ジオメトリ関係演算子の使用方法

- 16.2.5 ジオメトリ・フィルタ演算子の使用方法

- 16.2.6 デフォルトの測地座標の使用方法

- 16.2.7 他の測地座標の使用方法

- ANYINTERACT

- bufferPolygon

- CONTAIN

- createElemInfo

- createGeometry

- createLinearPolygon

- createPoint

- createRectangle

- distance

- einfogenerator

- FILTER

- get2dMbr

- INSIDE

- NN

- ordsgenerator

- to_Geometry

- to_JGeometry

- WITHINDISTANCE

17 Oracle CEP JDBCデータ・カートリッジ

- 17.1 Oracle CEP JDBCデータ・カートリッジについて

- 17.1.1 データ・カートリッジ名

- 17.1.2 有効範囲

- 17.1.3 データ型マッピング

- 17.1.4 Oracle CEP JDBCデータ・カートリッジのアプリケーション・コンテキスト

- 17.1.4.1 EPNファイル内でのJDBCカートリッジ・コンテキストの宣言

- 17.1.4.2 アプリケーション構成ファイル内でのJDBCカートリッジ・コンテキストの構成

- 17.2 Oracle CEP JDBCデータ・カートリッジの使用

- 17.2.1 SQL文の定義: function要素

- 17.2.1.1 function要素の属性

- 17.2.1.2 function要素の子要素

- 17.2.1.3 function要素の使用法

- 17.2.2 Oracle CEP JDBCデータ・カートリッジを使用したOracle CQL問合せの定義

- 17.2.2.1 Selectリストの別名の使用

- 17.2.2.2 TABLE句の使用

- 17.2.2.3 return-component-typeとしてのネイティブCQLタイプの使用

第IV部 Oracle CQLの使用

18 Oracle CQLの問合せ、ビューおよび結合

- 18.1 Oracle CQLの問合せ、ビューおよび結合の概要

- 18.1.1 Oracle CQL問合せの作成方法

- 18.2 問合せ

- 18.2.1 問合せの構成要素

- 18.2.1.1 Select、From、Whereブロック

- 18.2.1.2 Select句

- 18.2.1.3 From句

- 18.2.1.4 Where句

- 18.2.1.5 Group By句

- 18.2.1.6 Order By句

- 18.2.1.7 Having句

- 18.2.1.8 Binary句

- 18.2.1.9 IDStream句

- 18.2.2 単純な問合せ

- 18.2.3 組込みウィンドウの問合せ

- 18.2.4 MATCH_RECOGNIZEの問合せ

- 18.2.5 リレーショナル・データベース表の問合せ

- 18.2.6 XMLTableの問合せ

- 18.2.7 関数TABLEの問合せ

- 18.2.8 キャッシュの問合せ

- 18.2.9 問合せ結果のソート

- 18.2.10 問合せ結果の差分の検出

- 18.2.11 パラメータ化された問合せ

- 18.2.11.1 Oracle CQL文内のパラメータ化された問合せ

- 18.2.11.2 bindings要素

- 18.2.11.3 実行時の問合せのネーミング

- 18.2.11.4 パラメータ値の表記規則

- 18.2.11.5 実行時にパラメータ化された問合せ

- 18.2.11.6 プログラム的なパラメータの置換

- 18.3 ビュー

- 18.3.1 ビューと結合

- 18.3.2 ビューとスキーマ

- 18.4 結合

- 18.4.1 内部結合

- 18.4.2 外部結合

- 18.4.2.1 左外部結合

- 18.4.2.2 右外部結合

- 18.4.2.3 外部結合の見直し

- 18.5 Oracle CQL問合せとOracle CEPサーバー・キャッシュ

- 18.5.1 キャッシュに対する結合の作成

- 18.5.1.1 最初のキャッシュ・キーおよび単純な同値

- 18.5.1.2 キャッシュ・キーで算術演算は使用できない

- 18.5.1.3 全体スキャンは使用できない

- 18.5.1.4 複数の条件と非等値

- 18.6 Oracle CQL問合せとリレーショナル・データベース表

- 18.7 Oracle CQL問合せとOracleデータ・カートリッジ

19 MATCH_RECOGNIZEを使用したパターン認識

- 19.1 MATCH_RECOGNIZEを使用したパターン認識について

- 19.1.1 MATCH_RECOGNIZE句とWHERE句

- 19.1.2 シングルトンおよびグループ一致の参照

- 19.1.3 集計の参照

- 19.1.3.1 実行中集計と最終集計

- 19.1.3.2 同一の相関変数での操作

- 19.1.3.3 まだ一致していない変数の参照

- 19.1.3.4 相関変数によって修飾されない参照属性

- 19.1.3.5 *、identifier.*およびidentifier.attrのあるcountの使用

- 19.1.3.6 firstとlastの使用

- 19.1.4 prevの使用

- 19.2 MEASURES句

- 19.2.1 MEASURES句内の相関変数用の関数

- 19.3 PATTERN句

- 19.3.1 パターン量指定子と正規表現

- 19.3.2 PATTERN句内でのグループ化および二者択一

- 19.4 DEFINE句

- 19.4.1 DEFINE句内の相関変数用の関数

- 19.4.2 DEFINE句内の属性の参照

- 19.4.3 相関変数間の参照

- 19.5 PARTITION BY句

- 19.6 ORDER BY句

- 19.7 ALL MATCHES句

- 19.8 WITHIN句

- 19.9 DURATION句

- 19.9.1 固定期間のイベント欠落の検出

- 19.9.2 反復的なイベント欠落の検出

- 19.10 INCLUDE TIMER EVENTS句

- 19.11 SUBSET句

- 19.12 MATCH_RECOGNIZEの例

- 19.12.1 パターン検出

- 19.12.2 PARTITION BYを使用したパターン検出

- 19.12.3 集計を使用したパターン検出

- 19.12.4 WITHIN句を使用したパターン検出

- 19.12.5 固定期間のイベント欠落の検出

20 Oracle CQL文

- 20.1 Oracle CQL文の概要

- Query

- View

索引

例一覧

- 1-1 通常のOracle CQL文

- 1-2 株価表示データ・ストリーム

- 1-3 チャネルのスキーマ定義

- 1-4 priceStreamを使用するfilterFanoutProcessor Oracle CQL問合せ

- 1-5 channel要素のselector子要素を使用した、チャネルに出力される問合せ結果の制御

- 1-6 リレーション出力のOracle CEPタプル種類インジケータ

- 1-7 リレーションからリレーションへの演算

- 1-8 ストリームからリレーションへの演算子なしの問合せ

- 1-9 同等の問合せ

- 1-10 リレーションからストリームへの演算

- 1-11 ストリームからストリームへの演算

- 1-12 問合せおよびビューID属性

- 1-13 通常のOracle CQLプロセッサ構成ソース・ファイル

- 1-14 Oracle CQL: ホワイトスペースなしの書式設定

- 1-15 Oracle CQL: ホワイトスペースを含む書式設定

- 2-1 列挙データ型ProcessStatus

- 2-2 列挙データ型ProcessStatusを使用するイベント

- 2-3 列挙データ型を評価するユーザー定義関数

- 2-4 アプリケーション・アセンブリ・ファイルへのユーザー定義関数の登録

- 2-5 ユーザー定義関数を使用したOracle CQL問合せでの列挙データ型の評価

- 2-6 無効なイベントXSD: xsd:dateTimeがサポートされていない

- 2-7 有効なイベントXSD: xsd:dateTimeのかわりにxsd:stringを使用する

- 2-8 XMLイベント・ペイロード

- 2-9 期間の比較

- 2-10 SELECT文でのAS演算子の使用

- 2-11 ウィンドウ演算子の後のAS演算子の使用

- 2-12 プロセッサのコンポーネント構成ファイルのaliases要素

- 2-13 プロセッサへのaliases要素の追加

- 2-14 プロセッサへのalias型要素の追加

- 2-15 ソースおよびターゲット要素の追加

- 2-16 別名を作成した型のメソッドおよびフィールドへのアクセス

- 3-1 Select文でのELEMENT_TIME疑似列

- 3-2 入力ストリーム

- 3-3 出力リレーション

- 3-4 GROUP BYを含む問合せ

- 3-5 ビュー

- 3-6 問合せ

- 3-7 PatternでのELEMENT_TIME疑似列

- 4-1 連結演算子(||)

- 4-2 二者択一演算子(|)

- 4-3 S [now]の問合せ

- 4-4 S [now]のストリーム入力

- 4-5 S [now]の時間5000000000 nsのリレーション出力

- 4-6 S [range T]の問合せ

- 4-7 S [range T]のストリーム入力

- 4-8 S [range T]のリレーション出力

- 4-9 S [range T1 slide T2]の問合せ

- 4-10 S [range T1 slide T2]のストリーム入力

- 4-11 S [range T1 slide T2]のリレーション出力

- 4-12 S [range unbounded]の問合せ

- 4-13 S [range unbounded]のストリーム入力

- 4-14 S [range unbounded]の時間5000msのリレーション出力

- 4-15 S [range unbounded]の時間205000msのリレーション出力

- 4-16 S [range C on E]定数値: 問合せ

- 4-17 S [range C on E]定数値: ストリーム入力

- 4-18 S [range C on E]定数値: リレーション出力

- 4-19 S [range C on E] INTERVAL値: 問合せ

- 4-20 S [range C on E] INTERVAL値: ストリーム入力

- 4-21 S [range C on E] INTERVAL値: リレーション出力

- 4-22 S [rows N]の問合せ

- 4-23 S [rows N]のストリーム入力

- 4-24 S [rows N]の時間1003msのリレーション出力

- 4-25 S [rows N]の時間1007msのリレーション出力

- 4-26 S [rows N]の時間2001msのリレーション出力

- 4-27 S [rows N1 slide N2]の問合せ

- 4-28 S [rows N1 slide N2]のストリーム入力

- 4-29 S [rows N1 slide N2]のリレーション出力

- 4-30 S[partition by A1, ..., Ak rows N]の問合せ

- 4-31 S[partition by A1, ..., Ak rows N]のストリーム入力

- 4-32 S[partition by A1, ..., Ak rows N]のリレーション出力

- 4-33 S[partition by A1, ..., Ak rows N range T]の問合せ

- 4-34 S[partition by A1, ..., Ak rows N range T]のストリーム入力

- 4-35 S[partition by A1, ..., Ak rows N range T]のリレーション出力

- 4-36 S[partition by A1, ..., Ak rows N range T1 slide T2]の問合せ

- 4-37 S[partition by A1, ..., Ak rows N range T1 slide T2]のストリーム入力

- 4-38 S[partition by A1, ..., Ak rows N range T1 slide T2]のリレーション出力

- 4-39 IStream

- 4-40 DStream

- 4-41 RStream

- 5-1 COUNTのaggr_distinct_expr

- 5-2 COUNTのaggr_expr

- 5-3 arith_expr

- 5-4 arith_expr_list

- 5-5 CASE式: SELECT *の問合せ

- 5-6 CASE式: SELECT *のストリーム入力

- 5-7 CASE式: SELECT *のリレーション出力

- 5-8 CASE式: SELECTの問合せ

- 5-9 CASE式: SELECTのストリームS0入力

- 5-10 CASE式: SELECTのストリームS1入力

- 5-11 CASE式: SELECTのリレーション出力

- 5-12 算術式とDECODEの問合せ

- 5-13 算術式とDECODEのリレーション入力

- 5-14 算術式とDECODEのリレーション出力

- 5-15 PREVのfunc_expr

- 5-16 XMLQUERYのfunc_expr

- 5-17 SUMのfunc_expr

- 5-18 データ・カートリッジTABLEの問合せ

- 5-19 Oracle CQLデータ・カートリッジ・リンクを使用した型宣言

- 5-20 Oracle CQLデータ・カートリッジ・リンクを使用したフィールド・アクセス

- 5-21 Oracle CQLデータ・カートリッジ・リンクを使用した型宣言

- 5-22 Oracle CQLデータ・カートリッジ・リンクを使用した型宣言

- 5-23 order_expr

- 5-24 xml_agg_exprの問合せ

- 5-25 xml_agg_exprのリレーション入力

- 5-26 xml_agg_exprのリレーション出力

- 5-27 xmlcolattval_exprの問合せ

- 5-28 xmlcolattval_exprのリレーション入力

- 5-29 xmlcolattval_exprのリレーション出力

- 5-30 xmlelement_exprの問合せ

- 5-31 xmlelement_exprのリレーション入力

- 5-32 xmlelement_exprのリレーション出力

- 5-33 xmlforest_exprの問合せ

- 5-34 xmlforest_exprのリレーション入力

- 5-35 xmlforest_exprのリレーション出力

- 5-36 xml_parse_exprコンテンツ: 問合せ

- 5-37 xml_parse_exprコンテンツ: リレーション入力

- 5-38 xml_parse_exprコンテンツ: リレーション出力

- 5-39 xml_parse_exprドキュメント: 問合せ

- 5-40 xml_parse_exprドキュメント: リレーション入力

- 5-41 xml_parse_exprドキュメント: リレーション出力

- 5-42 xml_parse_expr整形式: 問合せ

- 5-43 xml_parse_expr整形式: リレーション入力

- 5-44 xml_parse_expr整形式: リレーション出力

- 6-1 S [range C on E] INTERVAL値: 問合せ

- 6-2 S [range C on E] INTERVAL値: ストリーム入力

- 6-3 S [range C on E] INTERVAL値: リレーション出力

- 7-1 Oracle CQLデータ・カートリッジ配列をイベント・タイプで宣言

- 7-2 Oracle CQL問合せでのOracle CQLデータ・カートリッジ配列へのアクセス

- 7-3 attr句

- 7-4 データ・カートリッジのフィールド・アクセス

- 7-5 データ・カートリッジのメソッド・アクセス

- 7-6 データ・カートリッジのコンストラクタ呼出し

- 7-7 xml_attr_list

- 8-1 concat関数の問合せ

- 8-2 concat関数のストリーム入力

- 8-3 concat関数のリレーション出力

- 8-4 連結演算子(||)の問合せ

- 8-5 連結演算子(||)のストリーム入力

- 8-6 連結演算子(||)のリレーション出力

- 8-7 hextoraw関数の問合せ

- 8-8 hextoraw関数のストリーム入力

- 8-9 hextoraw関数のリレーション出力

- 8-10 length関数の問合せ

- 8-11 length関数のストリーム入力

- 8-12 length関数のリレーション出力

- 8-13 lk関数の問合せ

- 8-14 lk関数のストリーム入力

- 8-15 lk関数のリレーション出力

- 8-16 nvl関数の問合せ

- 8-17 nvl関数のストリーム入力

- 8-18 nvl関数のリレーション出力

- 8-19 prev(identifier1.identifier2)関数の問合せ

- 8-20 prev(identifier1.identifier2)関数のストリーム入力

- 8-21 prev(identifier1.identifier2)関数のリレーション出力

- 8-22 prev(identifier1.identifier2, const_int1)関数の問合せ

- 8-23 prev(identifier1.identifier2, const_int1)関数のストリーム入力

- 8-24 prev(identifier1.identifier2, const_int1)関数のリレーション出力

- 8-25 8000でのイベントを含むパーティション

- 8-26 prev(identifier1.identifier2, const_int1, const_int2)関数の問合せ

- 8-27 prev(identifier1.identifier2, const_int1, const_int2)関数のストリーム入力

- 8-28 prev(identifier1.identifier2, const_int1, const_int2)関数のリレーション出力

- 8-29 rawtohex関数の問合せ

- 8-30 rawtohex関数のストリーム入力

- 8-31 rawtohex関数のリレーション出力

- 8-32 systimestamp関数の問合せ

- 8-33 systimestamp関数のストリーム入力

- 8-34 systimestamp関数のリレーション出力

- 8-35 to_bigint関数の問合せ

- 8-36 to_bigint関数のストリーム入力

- 8-37 to_bigint関数のリレーション出力

- 8-38 to_boolean関数の問合せ

- 8-39 to_boolean関数のストリーム入力

- 8-40 to_boolean関数のリレーション出力

- 8-41 to_char関数の問合せ

- 8-42 to_char関数のストリーム入力

- 8-43 to_char関数のリレーション出力

- 8-44 to_double関数の問合せ

- 8-45 to_double関数のストリーム入力

- 8-46 to_double関数のリレーション出力

- 8-47 to_float関数の問合せ

- 8-48 to_float関数のストリーム入力

- 8-49 to_float関数のリレーション出力

- 8-50 to_timestamp関数の問合せ

- 8-51 to_timestamp関数のストリーム入力

- 8-52 to_timestamp関数のリレーション出力

- 8-53 xmlcomment関数の問合せ

- 8-54 xmlcomment関数のストリーム入力

- 8-55 xmlcomment関数のリレーション出力

- 8-56 xmlconcat関数の問合せ

- 8-57 xmlconcat関数のストリーム入力

- 8-58 xmlconcat関数のリレーション出力

- 8-59 xmlexists関数の問合せ

- 8-60 xmlexists関数のストリーム入力

- 8-61 xmlexists関数のリレーション出力

- 8-62 xmlquery関数の問合せ

- 8-63 xmlquery関数のストリーム入力

- 8-64 xmlquery関数のリレーション出力

- 9-1 countの無効な使用

- 9-2 countの有効な使用

- 9-3 avg関数の問合せ

- 9-4 avg関数のストリーム入力

- 9-5 avg関数のリレーション出力

- 9-6 count関数の問合せ

- 9-7 count関数のストリーム入力

- 9-8 count関数のリレーション出力

- 9-9 first関数の問合せ

- 9-10 first関数のストリーム入力

- 9-11 first関数のリレーション出力

- 9-12 last関数の問合せ

- 9-13 last関数のストリーム入力

- 9-14 last関数のリレーション出力

- 9-15 max関数の問合せ

- 9-16 max関数のストリーム入力

- 9-17 max関数のリレーション出力

- 9-18 min関数の問合せ

- 9-19 min関数のストリーム入力

- 9-20 min関数のリレーション出力

- 9-21 sumの問合せ

- 9-22 sumのストリーム入力

- 9-23 sumのリレーション出力

- 9-24 xmlaggの問合せ

- 9-25 xmlaggのリレーション入力

- 9-26 xmlaggのリレーション出力

- 9-27 xmlaggとORDER BYの問合せ

- 9-28 xmlaggとORDER BYのリレーション入力

- 9-29 xmlaggとORDER BYのリレーション出力

- 10-1 beta関数の問合せ

- 10-2 beta関数のストリーム入力

- 10-3 beta関数のリレーション出力

- 10-4 beta1関数の問合せ

- 10-5 beta1関数のストリーム入力

- 10-6 beta1関数のリレーション出力

- 10-7 betaComplemented関数の問合せ

- 10-8 betaComplemented関数のストリーム入力

- 10-9 betaComplemented関数のリレーション出力

- 10-10 binomial関数の問合せ

- 10-11 binomial関数のストリーム入力

- 10-12 binomial関数のリレーション出力

- 10-13 binomial1関数の問合せ

- 10-14 binomial1関数のストリーム入力

- 10-15 binomial1関数のリレーション出力

- 10-16 binomial2関数の問合せ

- 10-17 binomial2関数のストリーム入力

- 10-18 binomial2関数のリレーション出力

- 10-19 binomialComplemented関数の問合せ

- 10-20 binomialComplemented関数のストリーム入力

- 10-21 binomialComplemented関数のリレーション出力

- 10-22 bitMaskWithBitsSetFromTo関数の問合せ

- 10-23 bitMaskWithBitsSetFromTo関数のストリーム入力

- 10-24 bitMaskWithBitsSetFromTo関数のリレーション出力

- 10-25 ceil関数の問合せ

- 10-26 ceil関数のストリーム入力

- 10-27 ceil関数のリレーション出力

- 10-28 chiSquare関数の問合せ

- 10-29 chiSquare関数のストリーム入力

- 10-30 chiSquare関数のリレーション出力

- 10-31 chiSquareComplemented関数の問合せ

- 10-32 chiSquareComplemented関数のストリーム入力

- 10-33 chiSquareComplemented関数のリレーション出力

- 10-34 errorFunction関数の問合せ

- 10-35 errorFunction関数のストリーム入力

- 10-36 errorFunction関数のリレーション出力

- 10-37 errorFunctionComplemented関数の問合せ

- 10-38 errorFunctionComplemented関数のストリーム入力

- 10-39 errorFunctionComplemented関数のリレーション出力

- 10-40 factorial関数の問合せ

- 10-41 factorial関数のストリーム入力

- 10-42 factorial関数のリレーション出力

- 10-43 floor関数の問合せ

- 10-44 floor関数のストリーム入力

- 10-45 floor関数のリレーション出力

- 10-46 gamma関数の問合せ

- 10-47 gamma関数のストリーム入力

- 10-48 gamma関数のリレーション出力

- 10-49 gamma1関数の問合せ

- 10-50 gamma1関数のストリーム入力

- 10-51 gamma1関数のリレーション出力

- 10-52 gammaComplemented関数の問合せ

- 10-53 gammaComplemented関数のストリーム入力

- 10-54 gammaComplemented関数のリレーション出力

- 10-55 getSeedAtRowColumn関数の問合せ

- 10-56 getSeedAtRowColumn関数のストリーム入力

- 10-57 getSeedAtRowColumn関数のリレーション出力

- 10-58 hash関数の問合せ

- 10-59 hash関数のストリーム入力

- 10-60 hash関数のリレーション出力

- 10-61 hash1関数の問合せ

- 10-62 hash1関数のストリーム入力

- 10-63 hash1関数のリレーション出力

- 10-64 hash2関数の問合せ

- 10-65 hash2関数のストリーム入力

- 10-66 hash2関数のリレーション出力

- 10-67 hash3関数の問合せ

- 10-68 hash3関数のストリーム入力

- 10-69 hash3関数のリレーション出力

- 10-70 i0関数の問合せ

- 10-71 i0関数のストリーム入力

- 10-72 i0関数のリレーション出力

- 10-73 i0e関数の問合せ

- 10-74 i0e関数のストリーム入力

- 10-75 i0e関数のリレーション出力

- 10-76 i1関数の問合せ

- 10-77 i1関数のストリーム入力

- 10-78 i1関数のリレーション出力

- 10-79 i1e関数の問合せ

- 10-80 i1e関数のストリーム入力

- 10-81 i1e関数のリレーション出力

- 10-82 incompleteBeta関数の問合せ

- 10-83 incompleteBeta関数のストリーム入力

- 10-84 incompleteBeta関数のリレーション出力

- 10-85 incompleteGamma関数の問合せ

- 10-86 incompleteGamma関数のストリーム入力

- 10-87 incompleteGamma関数のリレーション出力

- 10-88 incompleteGammaComplement関数の問合せ

- 10-89 incompleteGammaComplement関数のストリーム入力

- 10-90 incompleteGammaComplement関数のリレーション出力

- 10-91 j0関数の問合せ

- 10-92 j0関数のストリーム入力

- 10-93 j0関数のリレーション出力

- 10-94 j1関数の問合せ

- 10-95 j1関数のストリーム入力

- 10-96 j1関数のリレーション出力

- 10-97 jn関数の問合せ

- 10-98 jn関数のストリーム入力

- 10-99 jn関数のリレーション出力

- 10-100 k0関数の問合せ

- 10-101 k0関数のストリーム入力

- 10-102 k0関数のリレーション出力

- 10-103 k0e関数の問合せ

- 10-104 k0e関数のストリーム入力

- 10-105 k0e関数のリレーション出力

- 10-106 k1関数の問合せ

- 10-107 k1関数のストリーム入力

- 10-108 k1関数のリレーション出力

- 10-109 k1e関数の問合せ

- 10-110 k1e関数のストリーム入力

- 10-111 k1e関数のリレーション出力

- 10-112 kn関数の問合せ

- 10-113 kn関数のストリーム入力

- 10-114 kn関数のリレーション出力

- 10-115 leastSignificantBit関数の問合せ

- 10-116 leastSignificantBit関数のストリーム入力

- 10-117 leastSignificantBit関数のリレーション出力

- 10-118 log関数の問合せ

- 10-119 log関数のストリーム入力

- 10-120 log関数のリレーション出力

- 10-121 log10関数の問合せ

- 10-122 log10関数のストリーム入力

- 10-123 log10関数のリレーション出力

- 10-124 log2関数の問合せ

- 10-125 log2関数のストリーム入力

- 10-126 log2関数のリレーション出力

- 10-127 logFactorial関数の問合せ

- 10-128 logFactorial関数のストリーム入力

- 10-129 logFactorial関数のリレーション出力

- 10-130 logGamma関数の問合せ

- 10-131 logGamma関数のストリーム入力

- 10-132 logGamma関数のリレーション出力

- 10-133 longFactorial関数の問合せ

- 10-134 longFactorial関数のストリーム入力

- 10-135 longFactorial関数のリレーション出力

- 10-136 mostSignificantBit関数の問合せ

- 10-137 mostSignificantBit関数のストリーム入力

- 10-138 mostSignificantBit関数のリレーション出力

- 10-139 negativeBinomial関数の問合せ

- 10-140 negativeBinomial関数のストリーム入力

- 10-141 negativeBinomial関数のリレーション出力

- 10-142 negativeBinomialComplemented関数の問合せ

- 10-143 negativeBinomialComplemented関数のストリーム入力

- 10-144 negativeBinomialComplemented関数のリレーション出力

- 10-145 normal関数の問合せ

- 10-146 normal関数のストリーム入力

- 10-147 normal関数のリレーション出力

- 10-148 normal1関数の問合せ

- 10-149 normal1関数のストリーム入力

- 10-150 normal1関数のリレーション出力

- 10-151 normalInverse関数の問合せ

- 10-152 normalInverse関数のストリーム入力

- 10-153 normalInverse関数のリレーション出力

- 10-154 poisson関数の問合せ

- 10-155 poisson関数のストリーム入力

- 10-156 poisson関数のリレーション出力

- 10-157 poissonComplemented関数の問合せ

- 10-158 poissonComplemented関数のストリーム入力

- 10-159 poissonComplemented関数のリレーション出力

- 10-160 stirlingCorrection関数の問合せ

- 10-161 stirlingCorrection関数のストリーム入力

- 10-162 stirlingCorrection関数のリレーション出力

- 10-163 studentT関数の問合せ

- 10-164 studentT関数のストリーム入力

- 10-165 studentT関数のリレーション出力

- 10-166 studentTInverse関数の問合せ

- 10-167 studentTInverse関数のストリーム入力

- 10-168 studentTInverse関数のリレーション出力

- 10-169 y0関数の問合せ

- 10-170 y0関数のストリーム入力

- 10-171 y0関数のリレーション出力

- 10-172 y1関数の問合せ

- 10-173 y1関数のストリーム入力

- 10-174 y1関数のリレーション出力

- 10-175 yn関数の問合せ

- 10-176 yn関数のストリーム入力

- 10-177 yn関数のリレーション出力

- 11-1 countの無効な使用

- 11-2 countの有効な使用

- 11-3 autoCorrelation関数の問合せ

- 11-4 autoCorrelation関数のストリーム入力

- 11-5 autoCorrelation関数のリレーション出力

- 11-6 correlation関数の問合せ

- 11-7 correlation関数のストリーム入力

- 11-8 correlation関数のリレーション出力

- 11-9 covariance関数の問合せ

- 11-10 covariance関数のストリーム入力

- 11-11 covariance関数のリレーション出力

- 11-12 geometricMean関数の問合せ

- 11-13 geometricMean関数のストリーム入力

- 11-14 geometricMean関数のリレーション出力

- 11-15 geometricMean1関数の問合せ

- 11-16 geometricMean1関数の問合せ

- 11-17 geometricMean1関数の問合せ

- 11-18 harmonicMean関数の問合せ

- 11-19 harmonicMean関数のストリーム入力

- 11-20 harmonicMean関数のリレーション出力

- 11-21 kurtosis関数の問合せ

- 11-22 kurtosis関数のストリーム入力

- 11-23 kurtosis関数のリレーション出力

- 11-24 lag1関数の問合せ

- 11-25 lag1関数のストリーム入力

- 11-26 lag1関数のリレーション出力

- 11-27 mean関数の問合せ

- 11-28 mean関数のストリーム入力

- 11-29 mean関数のリレーション出力

- 11-30 meanDeviation関数の問合せ

- 11-31 meanDeviation関数のストリーム入力

- 11-32 meanDeviation関数のリレーション出力

- 11-33 median関数の問合せ

- 11-34 median関数のストリーム入力

- 11-35 median関数のリレーション出力

- 11-36 moment関数の問合せ

- 11-37 moment関数のストリーム入力

- 11-38 moment関数のリレーション出力

- 11-39 pooledMean関数の問合せ

- 11-40 pooledMean関数のストリーム入力

- 11-41 pooledMean関数のリレーション出力

- 11-42 pooledVariance関数の問合せ

- 11-43 pooledVariance関数のストリーム入力

- 11-44 pooledVariance関数のリレーション出力

- 11-45 product関数の問合せ

- 11-46 product関数のストリーム入力

- 11-47 product関数のリレーション出力

- 11-48 quantile関数の問合せ

- 11-49 quantile関数のストリーム入力

- 11-50 quantile関数のリレーション出力

- 11-51 quantileInverse関数の問合せ

- 11-52 quantileInverse関数のストリーム入力

- 11-53 quantileInverse関数のリレーション出力

- 11-54 rankInterpolated関数の問合せ

- 11-55 rankInterpolated関数のストリーム入力

- 11-56 rankInterpolated関数のリレーション出力

- 11-57 rms関数の問合せ

- 11-58 rms関数のストリーム入力

- 11-59 rms関数のリレーション出力

- 11-60 sampleKurtosis関数の問合せ

- 11-61 sampleKurtosis関数のストリーム入力

- 11-62 sampleKurtosis関数のリレーション出力

- 11-63 sampleKurtosisStandardError関数の問合せ

- 11-64 sampleKurtosisStandardError関数のストリーム入力

- 11-65 sampleKurtosisStandardError関数のリレーション出力

- 11-66 sampleSkew関数の問合せ

- 11-67 sampleSkew関数のストリーム入力

- 11-68 sampleSkew関数のリレーション出力

- 11-69 sampleSkewStandardError関数の問合せ

- 11-70 sampleSkewStandardError関数のストリーム入力

- 11-71 sampleSkewStandardError関数のリレーション出力

- 11-72 sampleVariance関数の問合せ

- 11-73 sampleVariance関数のストリーム入力

- 11-74 sampleVariance関数のリレーション出力

- 11-75 skew関数の問合せ

- 11-76 skew関数のストリーム入力

- 11-77 skew関数のリレーション出力

- 11-78 standardDeviation関数の問合せ

- 11-79 standardDeviation関数のストリーム入力

- 11-80 standardDeviation関数のリレーション出力

- 11-81 standardError関数の問合せ

- 11-82 standardError関数のストリーム入力

- 11-83 standardError関数のリレーション出力

- 11-84 sumOfInversions関数の問合せ

- 11-85 sumOfInversions関数のストリーム入力

- 11-86 sumOfInversions関数のリレーション出力

- 11-87 sumOfLogarithms関数の問合せ

- 11-88 sumOfLogarithms関数のストリーム入力

- 11-89 sumOfLogarithms関数のリレーション出力

- 11-90 sumOfPowerDeviations関数の問合せ

- 11-91 sumOfPowerDeviations関数のストリーム入力

- 11-92 sumOfPowerDeviations関数のリレーション出力

- 11-93 sumOfPowers関数の問合せ

- 11-94 sumOfPowers関数のストリーム入力

- 11-95 sumOfPowers関数のリレーション出力

- 11-96 sumOfSquaredDeviations関数の問合せ

- 11-97 sumOfSquaredDeviations関数のストリーム入力

- 11-98 sumOfSquaredDeviations関数のリレーション出力

- 11-99 sumOfSquares関数の問合せ

- 11-100 sumOfSquares関数のストリーム入力

- 11-101 sumOfSquares関数のリレーション出力

- 11-102 trimmedMean関数の問合せ

- 11-103 trimmedMean関数のストリーム入力

- 11-104 trimmedMean関数のリレーション出力

- 11-105 variance関数の問合せ

- 11-106 variance関数のストリーム入力

- 11-107 variance関数のリレーション出力

- 11-108 weightedMean関数の問合せ

- 11-109 weightedMean関数のストリーム入力

- 11-110 weightedMean関数のリレーション出力

- 11-111 winsorizedMean関数の問合せ

- 11-112 winsorizedMean関数のストリーム入力

- 11-113 winsorizedMean関数のリレーション出力

- 12-1 abs関数の問合せ

- 12-2 abs関数のストリーム入力

- 12-3 abs関数のストリーム出力

- 12-4 abs1関数の問合せ

- 12-5 abs1関数のストリーム入力

- 12-6 abs1関数のストリーム出力

- 12-7 abs2関数の問合せ

- 12-8 abs2関数のストリーム入力

- 12-9 abs2関数のストリーム出力

- 12-10 abs3関数の問合せ

- 12-11 abs3関数のストリーム入力

- 12-12 abs3関数のストリーム出力

- 12-13 acos関数の問合せ

- 12-14 acos関数のストリーム入力

- 12-15 acos関数のストリーム出力

- 12-16 asin関数の問合せ

- 12-17 asin関数のストリーム入力

- 12-18 asin関数のストリーム出力

- 12-19 atan関数の問合せ

- 12-20 atan関数のストリーム入力

- 12-21 atan関数のストリーム入力

- 12-22 atan2関数の問合せ

- 12-23 atan2関数のストリーム入力

- 12-24 atan2関数のストリーム出力

- 12-25 cbrt関数の問合せ

- 12-26 cbrt関数のストリーム入力

- 12-27 cbrt関数のストリーム出力

- 12-28 ceil1関数の問合せ

- 12-29 ceil1関数のストリーム入力

- 12-30 ceil1関数のストリーム出力

- 12-31 cos関数の問合せ

- 12-32 cos関数のストリーム入力

- 12-33 cos関数のストリーム出力

- 12-34 cosh関数の問合せ

- 12-35 cosh関数のストリーム入力

- 12-36 cosh関数のストリーム出力

- 12-37 exp関数の問合せ

- 12-38 exp関数のストリーム入力

- 12-39 exp関数のストリーム出力

- 12-40 expm1関数の問合せ

- 12-41 expm1関数のストリーム入力

- 12-42 expm1関数のストリーム出力

- 12-43 floor1関数の問合せ

- 12-44 floor1関数のストリーム入力

- 12-45 floor1関数のストリーム出力

- 12-46 hypot関数の問合せ

- 12-47 hypot関数のストリーム入力

- 12-48 hypot関数のストリーム出力

- 12-49 IEEERemainder関数の問合せ

- 12-50 IEEERemainder関数のストリーム入力

- 12-51 IEEERemainder関数のストリーム出力

- 12-52 log1関数の問合せ

- 12-53 log1関数のストリーム入力

- 12-54 log1関数のストリーム出力

- 12-55 log101関数の問合せ

- 12-56 log101関数のストリーム入力

- 12-57 log101関数のストリーム出力

- 12-58 log1p関数の問合せ

- 12-59 log1p関数のストリーム入力

- 12-60 log1p関数のストリーム出力

- 12-61 pow関数の問合せ

- 12-62 pow関数のストリーム入力

- 12-63 pow関数のストリーム出力

- 12-64 rint関数の問合せ

- 12-65 rint関数のストリーム入力

- 12-66 rint関数のストリーム出力

- 12-67 round関数の問合せ

- 12-68 round関数のストリーム入力

- 12-69 round関数のストリーム出力

- 12-70 round1関数の問合せ

- 12-71 round1関数のストリーム入力

- 12-72 round1関数のストリーム出力

- 12-73 signum関数の問合せ

- 12-74 signum関数のストリーム入力

- 12-75 signum関数のストリーム出力

- 12-76 signum1関数の問合せ

- 12-77 signum1関数のストリーム入力

- 12-78 signum1関数のリレーション出力

- 12-79 sin関数の問合せ

- 12-80 sin関数のストリーム入力

- 12-81 sin関数のストリーム出力

- 12-82 sinh関数の問合せ

- 12-83 sinh関数のストリーム入力

- 12-84 sinh関数のストリーム出力

- 12-85 sqrt関数の問合せ

- 12-86 sqrt関数のストリーム入力

- 12-87 sqrt関数のストリーム出力

- 12-88 tan関数の問合せ

- 12-89 tan関数のストリーム入力

- 12-90 tan関数のストリーム出力

- 12-91 tanh関数の問合せ

- 12-92 tanh関数のストリーム入力

- 12-93 tanh関数のストリーム出力

- 12-94 todegrees関数の問合せ

- 12-95 todegrees関数のストリーム入力

- 12-96 todegrees関数のストリーム出力

- 12-97 toradians関数の問合せ

- 12-98 toradians関数のストリーム入力

- 12-99 toradians関数のストリーム出力

- 12-100 ulp関数の問合せ

- 12-101 ulp関数のストリーム入力

- 12-102 ulp関数のストリーム出力

- 12-103 ulp1関数の問合せ

- 12-104 ulp1関数のストリーム入力

- 12-105 ulp1関数のリレーション出力

- 13-1 MyMod.javaユーザー定義単一行関数

- 13-2 Oracle CQLプロセッサのための単一行ユーザー定義関数

- 13-3 Oracle CQLでのユーザー定義単一行関数へのアクセス

- 13-4 Variance.javaユーザー定義集計関数

- 13-5 Oracle CQLプロセッサのための集計ユーザー定義関数

- 13-6 Oracle CQLでのユーザー定義集計関数へのアクセス

- 15-1 Address.javaクラス

- 15-2 イベント・タイプ・リポジトリ

- 15-3 チャネル

- 15-4 Oracle CQL問合せ

- 15-5 Address.javaクラス

- 15-6 イベント・タイプ・リポジトリ

- 15-7 チャネル

- 15-8 Oracle CQL問合せ

- 16-1 EPNアセンブリ・ファイル: Oracle Spatialネームスペースおよびスキーマの場所

- 16-2 EPNアセンブリ・ファイル内のspatial:context要素

- 16-3 Oracle CQL問合せでspatial:contextの参照

- 16-4 Oracle Spatial型を使用したOracle CEPイベント

- 16-5 Oracle Spatialジオメトリ・タイプを使用したOracle CQL問合せ

- 16-6 ジオメトリ静的メソッドを使用した点ジオメトリの作成

- 16-7 ジオメトリ・タイプのpublicメソッドおよびフィールドへのアクセス

- 16-8 ジオメトリ関係演算子の使用

- 16-9 ジオメトリ・フィルタ演算子の使用

- 16-10 Oracle CQL問合せでのデフォルトの測地座標の使用

- 16-11 EPNアセンブリ・ファイル内のspatial:context要素

- 16-12 Oracle CQL問合せでのspatial:contextの参照

- 16-13 ジオメトリ関係演算子ANYINTERACTを使用したOracle CQL問合せ

- 16-14 Geometry.bufferPolygonを使用したOracle CQL問合せ

- 16-15 ジオメトリ関係演算子CONTAINを使用したOracle CQL問合せ

- 16-16 Geometry.createElemInfoを使用したOracle CQL問合せ

- 16-17 Geometry.createGeometryを使用したOracle CQL問合せ

- 16-18 Geometry.createLinearPolygonを使用したOracle CQL問合せ

- 16-19 Geometry.createPointを使用したOracle CQL問合せ

- 16-20 Geometry.createRectangleを使用したOracle CQL問合せ

- 16-21 Geometry.distanceを使用したOracle CQL問合せ

- 16-22 Oracle Spatialジオメトリ・タイプを使用したOracle CQL問合せ

- 16-23 ジオメトリ関係演算子FILTERを使用したOracle CQL問合せ

- 16-24 Geometry.get2dMbrを使用したOracle CQL問合せ

- 16-25 ジオメトリ関係演算子INSIDEを使用したOracle CQL問合せ

- 16-26 ジオメトリ関係演算子NNを使用したOracle CQL問合せ

- 16-27 Oracle Spatialジオメトリ・タイプを使用したOracle CQL問合せ

- 16-28 Geometry.to_Geometryを使用したOracle CQL問合せ

- 16-29 Geometry.to_JGeometryを使用したOracle CQL問合せ

- 16-30 ジオメトリ関係演算子WITHINDISTANCEを使用したOracle CQL問合せ

- 17-1 Oracle CEP JDBCデータ・カートリッジのSQL文

- 17-2 EPNアセンブリ・ファイル: Oracle CEP JDBCデータ・カートリッジのネームスペースおよびスキーマの場所

- 17-3 EPNアセンブリ・ファイルのjdbc:jdbc-context要素

- 17-4 コンポーネント構成ファイル内のjc:jdbc-ctx要素

- 17-5 return-component-typeクラスの例

- 17-6 Oracle CEP JDBCデータ・カートリッジのSQL文

- 17-7 複数のパラメータのあるOracle JDBCデータ・カートリッジ・コンテキスト関数

- 17-8 PL/SQL関数を呼び出すOracle JDBCデータ・カートリッジ・コンテキスト関数

- 17-9 Oracle CEP JDBCデータ・カートリッジの複雑なJDBCカートリッジ・コンテキスト関数

- 17-10 Oracle JDBCデータ・カートリッジ・コンテキスト関数のオーバーロード

- 17-11 Oracle CEP JDBCデータ・カートリッジ・コンテキスト関数

- 17-12 Oracle CEP JDBCデータ・カートリッジのSQL文

- 17-13 Oracle CEP JDBCデータ・カートリッジ・コンテキスト関数を呼び出すOracle CQL問合せ

- 17-14 return-component-typeクラスの例

- 17-15 return-component-typeとしてのCQLタイプbigint

- 17-16 CQL問合せ内のgetOrderAmt関数

- 18-1 一般的なOracle CQL問合せ

- 18-2 完全修飾されたストリーム要素名

- 18-3 単純な問合せ

- 18-4 組込みウィンドウの問合せ

- 18-5 MATCH_RECOGNIZEの問合せ

- 18-6 XMLTABLEの問合せ

- 18-7 データ・カートリッジTABLEの問合せ

- 18-8 無効なデータ・カートリッジTABLEの問合せ

- 18-9 DIFFERENCE USING句

- 18-10 DIFFERENCE USING句でのusinglistの指定

- 18-11 パラメータ化されたOracle CQL問合せ

- 18-12 実行時に同等な問合せ

- 18-13 副問合せのかわりとしてのビューの使用

- 18-14 ビュー名を使用した同名のストリーム要素の区別

- 18-15 イベント属性名のみを持つスキーマ

- 18-16 完全修飾されたストリーム要素名

- 18-17 内部結合

- 18-18 外部結合

- 18-19 左外部結合

- 18-20 右外部結合

- 18-21 外部結合の見直し

- 19-1 MATCH_RECOGNIZEとのパターン・マッチング

- 19-2 MATCH_RECOGNIZE句とWHERE句

- 19-3 暗黙的な実行中集計

- 19-4 集計関数の無効な使用

- 19-5 まだ一致していない変数の参照: 無効

- 19-6 まだ一致していない変数の参照: 有効

- 19-7 相関変数によって修飾されない参照属性

- 19-8 count(A.*)を使用したMATCH_RECOGNIZEの問合せ

- 19-9 prev関数の使用: 有効

- 19-10 prev関数の使用: 無効

- 19-11 相関変数での関数の使用

- 19-12 相関変数での関数の使用: to_timestamp

- 19-13 相関変数での関数の使用: count

- 19-14 未定義の相関名

- 19-15 相関変数間の参照

- 19-16 入力ストリームS1

- 19-17 入力ストリームS1を使用するMATCH_RECOGNIZEの問合せ

- 19-18 ALL MATCHES句の問合せ

- 19-19 ALL MATCHES句のストリーム入力

- 19-20 ALL MATCHES句のストリーム出力

- 19-21 固定期間DURATION句を使用したMATCH_RECOGNIZEの問合せ

- 19-22 固定期間DURATION句を使用したMATCH_RECOGNIZEのストリーム入力

- 19-23 固定期間DURATION句を使用したMATCH_RECOGNIZEのストリーム出力

- 19-24 可変期間DURATION MULTIPLES OF句を使用したMATCH_RECOGNIZEの問合せ

- 19-25 可変期間DURATION MULTIPLES OF句を使用したMATCH_RECOGNIZEのストリーム入力

- 19-26可変期間DURATION MULTIPLES OF句を使用したMATCH_RECOGNIZEのストリーム出力

- 19-27 SUBSET句を使用したMATCH_RECOGNIZEの問合せ

- 19-28 SUBSET句を使用したMATCH_RECOGNIZEのストリーム入力

- 19-29 SUBSET句を使用したMATCH_RECOGNIZEのストリーム出力

- 19-30 単純なパターン検出: 問合せ

- 19-31 PARTITION BYを使用したパターン検出: 問合せ

- 19-32 集計を使用したパターン検出: 問合せ

- 19-33 集計を使用したパターン検出: ストリーム入力

- 19-34 集計を使用したパターン検出: ストリーム出力

- 19-35 PATTERN句とWITHIN句

- 19-36 PATTERN句とWITHIN INCLUSIVE句

- 19-37 WITHIN句を使用したパターン検出: ストリーム入力

- 19-38 固定期間のイベント欠落の検出: 問合せ

- 20-1 <query></query>要素の問合せ

- 20-2 DIFFERENCE USING句でのusinglistの指定

- 20-3 問合せの登録

- 20-4 HAVINGの問合せ

- 20-5 HAVINGのストリーム入力

- 20-6 HAVINGのリレーション出力

- 20-7 集合演算子: UNIONの問合せ

- 20-8 集合演算子: UNIONのリレーション入力R1

- 20-9 集合演算子: UNIONのリレーション入力R2

- 20-10 集合演算子: UNIONのリレーション出力

- 20-11 集合演算子: UNION ALLのリレーション出力

- 20-12 集合演算子: INTERSECTの問合せ

- 20-13 集合演算子: INTERSECTのリレーション入力R1

- 20-14 集合演算子: INTERSECTのリレーション入力R2

- 20-15 集合演算子: INTERSECTのリレーション出力

- 20-16 集合演算子: MINUSの問合せ

- 20-17 集合演算子: MINUSのリレーション入力R1

- 20-18 集合演算子: MINUSのリレーション入力R2

- 20-19 集合演算子: MINUSのリレーション出力

- 20-20 集合演算としてのINとNOT IN: 問合せ

- 20-21 集合演算としてのINとNOT IN: ストリームS3入力

- 20-22 集合演算としてのINとNOT IN: ストリームS4入力

- 20-23 集合演算としてのINとNOT IN: リレーション出力

- 20-24 Select DISTINCTの問合せ

- 20-25 Select DISTINCTのストリーム入力

- 20-26 Select DISTINCTのストリーム出力

- 20-27 XMLTABLEの問合せ

- 20-28 XMLTABLEのストリーム入力

- 20-29 XMLTABLEのリレーション出力

- 20-30 XMLネームスペースを使用するXMLTABLEの問合せ

- 20-31 XMLネームスペースを使用するXMLTABLEのストリーム入力

- 20-32 XMLネームスペースを使用するXMLTABLEのリレーション出力

- 20-33 メソッドgetIteratorのMyCartridge

- 20-34 TABLEの問合せ: イテレータ

- 20-35 TABLEの問合せのストリーム入力: イテレータ

- 20-36 TABLEの問合せの出力: イテレータ

- 20-37 メソッドgetArrayのMyCartridge

- 20-38 TABLEの問合せ: 配列

- 20-39 TABLEの問合せのストリーム入力: 配列

- 20-40 TABLEの問合せの出力: 配列

- 20-41 メソッドgetCollectionのMyCartridge

- 20-42 TABLEの問合せ: コレクション

- 20-43 TABLEの問合せのストリーム入力: コレクション

- 20-44 TABLEの問合せの出力: コレクション

- 20-45 ORDER BY ROWSの問合せ

- 20-46 ORDER BY ROWSのストリーム入力

- 20-47 ORDER BY ROWSの出力

- 20-48 <view></view>要素のビュー

- 20-49 ビューの登録

図一覧

- 1-1 Oracle CEPアーキテクチャ

- 1-2 イベント処理ネットワーク内のストリーム

- 1-3 RangeおよびSlide: 等しい(定常状態条件)

- 1-4 RangeおよびSlide: 異なる(定常状態条件)

- 1-5 イベント処理ネットワークのイベント・ソースとイベント・シンク

- 1-6 Oracle CEP IDE for Eclipse

- 1-7 Oracle CEP Visualizer

- 10-1 cern.jet.stat.Gammaベータ

- 10-2 cern.jet.stat.Probability beta1

- 10-3 二項係数の定義

- 10-4 cern.jet.stat.Probability binomial2

- 10-5 cern.jet.stat.Probability binomialComplemented

- 10-6 cern.jet.stat.Probability chiSquare

- 10-7 cern.jet.stat.Probability errorFunction

- 10-8 cern.jet.stat.Probability errorfunctioncompelemented

- 10-9 cern.jet.stat.Probability gamma1

- 10-10 cern.jet.stat.Probability gammaComplemented

- 10-11 cern.jet.math.Arithmetic log

- 10-12 cern.jet.stat.Probability negativeBinomial

- 10-13 cern.jet.stat.Probability negativeBinomialComplemented

- 10-14 cern.jet.stat.Probability normal

- 10-15 cern.jet.stat.Probability normal1

- 10-16 cern.jet.stat.Probability poisson

- 10-17 cern.jet.stat.Probability poissonComplemented

- 10-18 cern.jet.math.Arithmetic stirlingCorrection

- 10-19 cern.jet.stat.Probability studentT

- 11-1 cern.jet.stat.Descriptive.covariance

- 11-2 cern.jet.stat.Descriptive.geometricMean(DoubleArrayList data)

- 11-3 cern.jet.stat.Descriptive.geometricMean1(int size, double sumOfLogarithms)

- 11-4 cern.jet.stat.Descriptive.kurtosis(DoubleArrayList data, double mean, double standardDeviation)

- 11-5 cern.jet.stat.Descriptive.mean(DoubleArrayList data)

- 11-6 cern.jet.stat.Descriptive.meanDeviation(DoubleArrayList data, double mean)

- 11-7 cern.jet.stat.Descriptive.moment(DoubleArrayList data, int k, double c)

- 11-8 cern.jet.stat.Descriptive.pooledMean(int size1, double mean1, int size2, double mean2)

- 11-9 cern.jet.stat.Descriptive.pooledVariance(int size1, double variance1, int size2, double variance2)

- 11-10 cern.jet.stat.Descriptive.product(DoubleArrayList data)

- 11-11 cern.jet.stat.Descriptive.rms(int size, double sumOfSquares)

- 11-12 cern.jet.stat.Descriptive.sampleVariance(DoubleArrayList data, double mean)

- 11-13 cern.jet.stat.Descriptive.skew(DoubleArrayList data, double mean, double standardDeviation)

- 11-14 cern.jet.stat.Descriptive.cern.jet.stat.Descriptive.standardError(int size, double variance)

- 11-15 cern.jet.stat.Descriptive.sumOfInversions(DoubleArrayList data, int from, int to)

- 11-16 cern.jet.stat.Descriptive.sumOfLogarithms(DoubleArrayList data, int from, int to)

- 11-17 cern.jet.stat.Descriptive.sumOfPowerDeviations(DoubleArrayList data, int k, double c)

- 11-18 cern.jet.stat.Descriptive.sumOfPowers(DoubleArrayList data, int k)

- 11-19 cern.jet.stat.Descriptive.sumOfSquaredDeviations(int size, double variance)

- 11-20 cern.jet.stat.Descriptive.sumOfSquares(DoubleArrayList data)

- 11-21 cern.jet.stat.Descriptive.variance(int size, double sum, double sumOfSquares)

- 11-22 cern.jet.stat.Descriptive.weightedMean(DoubleArrayList data, DoubleArrayList weights)

- 12-1 java.lang.Math Expm1

- 12-2 java.lang.Math hypot

- 15-1 Oracle CEPアプリケーションの例

- 18-1 EPNエディタからのプロセッサの構成ソースへの移動

- 18-2 プロセッサの構成ソースの編集

- 19-1 パターン検出: 二番底の価格変動

- 19-2 Partition Byを使用したパターン検出: 株価変動

- 19-3 固定期間のイベント欠落の検出

表一覧

- 1-1 デフォルトのRangeおよびタプルベースのストリームからリレーションへの演算子

- 1-2 問合せ開始時と空のリレーションの場合のRange、RowsおよびSlide

- 2-1 Oracle CQL組込みデータ型の概要

- 2-2 暗黙的な型変換のマトリックス

- 2-3 明示的な型変換のマトリックス

- 2-4 日時書式モデル

- 2-5 Nullを使用する条件

- 4-1 Oracle CQL演算子の優先順位

- 4-2 算術演算子

- 4-3 連結演算子

- 4-4 二者択一演算子

- 4-5 DStreamの出力例

- 5-1 COUNT集計関数の戻り値

- 6-1 Oracle CQL条件の優先順位

- 6-2 比較条件

- 6-3 論理条件

- 6-4 NOTの真偽表

- 6-5 ANDの真偽表

- 6-6 ORの真偽表

- 6-7 XORの真偽表

- 6-8 LIKE条件

- 6-9 範囲条件

- 6-10 Null条件

- 8-1 Oracle CQLの組込みの単一行関数

- 9-1 Oracle CQLの組込みの集計関数

- 9-2 COUNT集計関数の戻り値

- 10-1 Oracle CQLの組込みの単一行Coltベースの関数

- 10-2 cern.jet.math.Arithmetic binomialの戻り値

- 10-3 cern.jet.math.Arithmetic Binomial1の戻り値

- 11-1 Oracle CQLの組込みの集計Coltベースの関数

- 12-1 Oracle CQLの組込みのjava.lang.Math関数

- 13-1 ユーザー定義関数のデータ型

- 15-1 クラス・ローディング・ポリシー別のクラスのアクセシビリティ

- 15-2 Oracle Javaデータ・カートリッジ: Oracle CQLからJavaデータ型へのマッピング

- 15-3 Oracle Javaデータ・カートリッジ: Javaデータ型からOracle CQLへのマッピング

- 16-1 Oracle Spatialの有効範囲

- 16-2 Oracle Spatialのジオメトリ・タイプ

- 16-3 Oracle Spatialの座標系

- 16-4 Oracle Spatialジオメトリ・メソッド

- 16-5 SDO_ETYPEとSDO_INTERPRETATION

- 16-6 SDO_ETYPEとSDO_INTERPRETATION

- 17-1 function要素の属性

- 17-2 param要素の属性

- 17-3 SQL列タイプおよびOracle CEPタイプの対応するもの

- 18-1 DIFFERENCE USING句のIStreamへの作用

- 18-2 パラメータ化された問合せのパラメータ値の表記規則

- 19-1 count集計関数の戻り値

- 19-2 MATCH_RECOGNIZEのパターン量指定子

- 19-3 WITHINおよびWITHIN INCLUSIVEの問合せの出力

Oracle® Fusion Middleware

Oracle Complex Event Processing CQL言語リファレンス

11gリリース1 (11.1.1.6.2)

B61613-04(原本部品番号:E12048-08)

2012年4月

開発者向けのこのドキュメントは、Oracle Complex Event Processing (Oracle CEP)アプリケーションでストリーミング・データを問い合せるためのSQLに似た言語であるOracle Continuous Query Language (Oracle CQL)のリファレンスを提供します。

Oracle Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス, 11gリリース1 (11.1.1.6.2)

B61613-04

Copyright © 2006, 2012, Oracle and/or its affiliates.All rights reserved.

原本著者: Steve Traut、Peter Purich

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

はじめに

このリファレンスでは、データのストリーミングをサポートするコンストラクトが追加された、SQLに基づく問合せ言語であるOracle Continuous Query Language (Oracle CQL)について詳細に説明します。Oracle CQLを使用すると、Oracle CEPを使用して複合イベント処理(CEP)を実行する、データ・ストリームに対する問合せを表現できます。Oracle CQLは新しいテクノロジですが、SQL99のサブセットに基づいています。

Oracle CEP(以前の名称はWebLogic Event Server)は、高パフォーマンスのイベント駆動アプリケーションを開発するためのJavaサーバーです。それは、Equinox OSGiベースの軽量Javaアプリケーション・コンテナであり、データのストリーミングをサポートするコンストラクトが追加されたSQLベースの問合せ言語Oracle Continuous Query Language (Oracle CQL)に基づく機能豊富で宣言的な環境を提供するOracle CEPサービス・エンジンなどの共有サービスも備えており、、企業活動の管理の効率と効果を向上させる上で役に立ちます。Oracle CEPは、JRockit Real Timeを使用して極めて高いスループットとマイクロ秒の待機時間をサポートし、完全リアルタイムでエンドツーエンドのJava Event-Driven Architecture (EDA)開発プラットフォームに対してOracle CEP VisualizerおよびOracle CEP IDE for Eclipse開発ツールを提供します。

対象読者

このドキュメントは、Oracle CQLのすべてのユーザーを対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連ドキュメント

詳細は、次のドキュメントを参照してください。

- 『Oracle Fusion Middleware Oracle Complex Event Processingスタート・ガイド』

- 『Oracle Fusion Middleware Oracle Complex Event Processing管理者ガイド』

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』

- 『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』

- Oracle Complex Event Processing Java APIリファレンス

- 『Oracle Fusion Middleware Oracle Complex Event Processing EPL言語リファレンス』

- 『Oracle Database SQL言語リファレンス』(http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/toc.htm)

- SQL99仕様(ISO/IEC 9075-1:1999、ISO/IEC 9075-2:1999、ISO/IEC 9075-3:1999およびISO/IEC 9075-4:1999)

- Oracle CEPフォーラム: http://forums.oracle.com/forums/forum.jspa?forumID=820

- Oracle CEPサンプル: http://www.oracle.com/technologies/soa/complex-event-processing.html

- Oracle Event Driven Architecture Suiteのサンプル・コード: http://www.oracle.com/technology/sample_code/products/event-driven-architecture

表記規則

このドキュメントでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

斜体

イタリックは、ユーザーが特定の値を指定するプレースホルダー変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

構文の図

このドキュメントには、Oracle CQL、SQL、PL/SQLまたはその他のコマンドライン・コンストラクトのグラフィカル形式またはバッカス・ナウア記法(BNF)による構文説明が含まれています。これらの説明の解釈方法については、『Oracle Database SQL言語リファレンス』の構文の図の解釈方法に関する項を参照してください。

第I部

Oracle CQLについて

この部は、次の章で構成されています。

- 第1章「Oracle CQLの概要」

- 第2章「Oracle CQLの基本要素」

- 第3章「疑似列」

- 第4章「演算子」

- 第5章「式」

- 第6章「条件」

- 第7章「共通のOracle CQL DDL句」

1 Oracle CQLの概要

この章では、データのストリーミングをサポートするコンストラクトが追加された、SQLに基づく問合せ言語であるOracle Continuous Query Language (Oracle CQL)について説明します。Oracle CQLを使用すると、Oracle Complex Event Processing (Oracle CEP)を使用してデータ・ストリームに対する問合せを表現できます。

Oracle CEP(以前の名称はWebLogic Event Server)は、高パフォーマンスのイベント駆動アプリケーションを開発するためのJavaサーバーです。Oracle CEPは、Oracle CQLベースの豊富な宣言的環境を提供するOracle CEPサービス・エンジンを含む共有サービスがある、Equinox OSGiに基づく軽量Javaアプリケーション・コンテナであり、ビジネス・オペレーションを管理するための効率と効果を向上します。Oracle CEPは、JRockit Real Timeを使用して極めて高いスループットとマイクロ秒の待機時間をサポートし、完全リアルタイムでエンドツーエンドのJava Event-Driven Architecture (EDA)開発プラットフォームに対してOracle CEP VisualizerおよびOracle CEP IDE for Eclipse開発ツールを提供します。

- 1.1項「Oracle CQLの基本」

- 1.2項「Oracle CQL文」

- 1.3項「Oracle CQLとSQL標準」

- 1.4項「Oracle CEPサーバーとツールのサポート」

1.1 Oracle CQLの基本

データベースは、格納された有限のデータ・セットに対して問合せを実行するために最適化されています。ただし、最近の多くのアプリケーションは、連続的な無制限のデータ・セットに対して問合せを長時間実行する必要があります。設計上、格納されたデータ・セットは、データの大部分が繰り返し問い合され、更新頻度が比較的低い場合に向いています。これとは対照的に、データ・ストリームは、新規要素の挿入を通じて継続的に、通常は排他的に変化するデータを表します。データの大部分を複数回操作することは、不要であるか、実用的ではありません。

センサー・データ・アプリケーション、財務表示、ネットワーク性能測定ツール、ネットワーク監視およびトラフィック管理アプリケーション、クリックストリーム分析ツールなどの多くの種類のアプリケーションでは、データ・セットのかわりにデータ・ストリームが生成されます。これらの種類のアプリケーション・データを管理および処理する際は、厳密な時間によるフォーカスを使用して、データ管理および問合せ機能を作成します。

こうした要件に応えるために、構造化データ・レコードのストリームと格納されたリレーションの概念をサポートするデータ管理インフラストラクチャのOracle CEPが導入されました。

統一的な宣言フレームワークを提供するために、データのストリーミングをサポートするコンストラクトが追加されたSQLに基づく問合せ言語のOracle Continuous Query Language (Oracle CQL)が提供されています。

Oracle CQLは次の理念に基づいて設計されています。

- 連続するデータ・ストリームと従来の格納されたデータ・セットに対する大量の問合せをサポートするスケーラビリティ。

- 複雑なシナリオを扱う包括性。たとえば、構成を通じて、問合せの様々な中間ビューを作成できます。

図1-1は、Oracle CEPアーキテクチャの簡略化されたビューを示しています。Oracle CEPサーバーは、Oracle CEPアプリケーション用の軽量なSpringコンテナを提供します。この図のOracle CEPアプリケーションは、イベント・データを入力チャネルに提供するイベント・アダプタで構成されています。入力チャネルは、入力チャネルから提供されるイベントを操作する1つ以上のOracle CQL問合せに関連付けられたOracle CQLプロセッサに接続されています。Oracle CQLプロセッサは、問合せ結果の書込み先となる出力チャネルに接続されています。出力チャネルは、出力チャネルから受信したイベントに基づいてアクションを実行するユーザー定義のPlain Old Java Object (POJO)である、イベントBeanに接続されています。

図1-1 Oracle CEPアーキテクチャ

「図1-1 Oracle CEPアーキテクチャ」の説明

Oracle CEPを使用すると、JMS、リレーショナル・データベース表、ローカル・ファイルシステムのファイルなどの各種データ・ソースに対するイベント・アダプタを定義できます。複数の入力チャネルをOracle CQLプロセッサに接続したり、Oracle CQLプロセッサを複数の出力チャネルに接続できます。出力チャネルを別のOracle CQLプロセッサ、アダプタ、キャッシュまたはイベントBeanに接続できます。

Oracle CEP IDE for EclipseとOracle CEP Visualizerを使用して、次のことを行います。

- 図1-1のようなイベント処理ネットワーク(EPN)を作成します。

- 1つ以上のOracle CQL問合せをEPNのOracle CQLプロセッサに関連付けます。

- Oracle CEPアプリケーションをパッケージ化し、実行のためOracle CEPサーバーにデプロイします。

例1-1に示すような、通常のOracle CQL文があるとします。

例1-1 通常のOracle CQL文

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd"
xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<processor>
<name>cqlProcessor</name>
<rules>
<view id="lastEvents" schema="cusip bid ask"><![CDATA[
select cusip, bid, srcId, bidQty, ask, askQty, seq
from inputChannel[partition by srcId, cusip rows 1]
]]></view>
<view id="bidask" schema="cusip bid ask"><![CDATA[
select cusip, max(bid), min(ask)
from lastEvents
group by cusip
]]></view>
<view ...><![CDATA[
...
]]></view>
...
<view id="MAXBIDMINASK" schema="cusip bidseq bidSrcId bid askseq askSrcId ask bidQty askQty"><![CDATA[
select bid.cusip, bid.seq, bid.srcId as bidSrcId, bid.bid, ask.seq, ask.srcId as askSrcId, ask.ask, bid.bidQty, ask.askQty
from BIDMAX as bid, ASKMIN as ask
where bid.cusip = ask.cusip
]]></view>
<query id="BBAQuery"><![CDATA[
ISTREAM(select bba.cusip, bba.bidseq, bba.bidSrcId, bba.bid, bba.askseq, bba.askSrcId, bba.ask,
bba.bidQty, bba.askQty, "BBAStrategy" as intermediateStrategy, p.seq as correlationId, 1 as priority
from MAXBIDMINASK as bba, inputChannel[rows 1] as p where bba.cusip = p.cusip)
]]></query>
</rules>
</processor>

この例では、複数のリレーションを作成するために複数のビュー(Oracle CQLでの副問合せ)が定義され、各ビューは前のビューに基づいています。ビューは常にinputChannelなどの着信チャネルに対して機能します。lastEventsという最初のビューはinputChannelから直接選択します。後続のビューはinputChannelから直接選択するか、前に定義されたビューから選択します。ビューの選択文で返された結果はビューのリレーションに残ったまま維持され、出力チャネルには転送されません。これは問合せの動作です。この例では、inputChannelからの直接の選択と、前に定義されたビューからの選択の両方を行う問合せBBAQueryが定義されます。問合せのselect句から返された結果は、関連付けられている出力チャネルに転送されます(この例ではoutputChannel)。BBAQueryは、タプルベースのストリームからリレーションへの演算子(またはスライディング・ウィンドウ)を使用します。

これらの要素の詳細は、次の項を参照してください。

- 1.1.1項「ストリームとリレーション」

- 1.1.2項「リレーションからリレーションへの演算子」

- 1.1.3項「ストリームからリレーションへの演算子(ウィンドウ)」

- 1.1.4項「リレーションからストリームへの演算子」

- 1.1.5項「ストリームからストリームへの演算子」

- 1.1.6項「問合せ、ビューおよび結合」

- 1.1.7項「パターン認識」

- 1.1.8項「イベント・ソースとイベント・シンク」

- 1.1.11項「関数」

- 1.1.12項「データ・カートリッジ」

- 1.1.13項「時間」

- 1.2項「Oracle CQL文」

- 1.2.1項「表記規則」

- 1.2.3項「ドキュメント表記規則」

Oracle CEPサーバーと各ツールの詳細は、次の資料を参照してください。

- 1.4項「Oracle CEPサーバーとツールのサポート」

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』

- 『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』

- 『Oracle Fusion Middleware Oracle Complex Event Processing管理者ガイド』

1.1.1 ストリームとリレーション

この項では、Oracle CQLを使用して操作する2つの基本的なOracle CEPオブジェクトについて説明します。

- ストリーム

- リレーション

Oracle CQLを使用して、ストリームとリレーションの次の操作を実行できます。

- リレーションからリレーションへの演算子: 1つ以上の他のリレーションからのリレーションの生成

- ストリームからリレーションへの演算子(ウィンドウ): ストリームからのリレーションの生成

- リレーションからストリームへの演算子: リレーションからのストリームの生成

- ストリームからストリームへの演算子: 1つ以上の他のストリームからのストリームの生成

1.1.1.1 ストリーム

ストリームは、Oracle CQL問合せでの操作の対象となる主なデータ・ソースです。

ストリームSは要素のバッグ(またはマルチセット)(s,T)のバッグです。sはSのスキーマを持ち、Tは時間に属します。

ストリーム要素はタプルとタイムスタンプのペアであり、タイムスタンプを持つタプルの挿入シーケンスとして表すことができます。言い換えると、ストリームとはタイムスタンプを持つタプルのシーケンスです。同じタイムスタンプを持つ複数のタプルがある場合があります。入力ストリームのタプルは、タイムスタンプが増加する順にシステムに到着する必要があります。詳細は、1.1.13項「時間」を参照してください。

ストリームには名前付き属性のセットで構成される関連付けられたスキーマがあり、ストリームのすべてのタプルはスキーマに準拠しています。

「ストリームのタプル」という用語はストリーム要素のデータ部分(タイムスタンプ・データは除く)の順序付きリストを表します(<s,t>のs)。例1-2は、株価表示データ・ストリームがどのように表示されるかを示しています。各ストリーム要素は、<timestamp value>、<stock symbol>および<stock price>で構成されます。

例1-2 株価表示データ・ストリーム

...
<timestampN>    NVDA,4
<timestampN+1>  ORCL,62
<timestampN+2>  PCAR,38
<timestampN+3>  SPOT,53
<timestampN+4>  PDCO,44
<timestampN+5>  PTEN,50
...

ストリーム要素<timestampN+1>  ORCL,62のタプルはORCL,62です。

定義により、ストリームは無制限です。

この項の内容は、次のとおりです。

- 1.1.1.1.1項「ストリームおよびチャネル」

- 1.1.1.1.2項「チャネルのスキーマ」

- 1.1.1.1.3項「チャネルの問合せ」

- 1.1.1.1.4項「ダウンストリーム・チャネルに出力する問合せの制御」

詳細は、以下を参照してください。

- 1.1.8項「イベント・ソースとイベント・シンク」

- 18.1項「Oracle CQLの問合せ、ビューおよび結合の概要」

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のストリームとリレーションを表すチャネルに関する項

1.1.1.1.1 ストリームおよびチャネル

Oracle CEPではストリームはチャネルとして表されます(図1-2を参照)。Oracle CEP IDE for Eclipseを使用して、ストリーム・イベント・ソース(PriceAdapter)をチャネル(priceStream)に接続し、チャネルをOracle CQLプロセッサ(filterFanoutProcessor)に接続して、プロセッサにイベントを提供します。Oracle CQLプロセッサをチャネル(filteredStream)に接続し、Oracle CQL問合せ結果を下流コンポーネント(図1-2には表示されていません)に出力します。

図1-2 イベント処理ネットワーク内のストリーム

「図1-2 イベント処理ネットワーク内のストリーム」の説明

注意:

Oracle CEPでは、チャネルを使用してイベント・ソースをOracle CQLプロセッサに接続し、Oracle CQLプロセッサをイベント・シンクに接続する必要があります。他のOracle CEPプロセッサ・タイプでは、チャネルはオプションです。

1.1.1.1.2 チャネルのスキーマ

ストリームに接続するイベント・ソースにより、ストリームのスキーマが確定します。図1-2では、PriceAdapterアダプタにより、priceStreamストリームのスキーマが確定しています。例1-3は、PriceAdapterのイベント処理ネットワーク(EPN)アセンブリ・ファイルを示しています。eventTypeNameプロパティによって、イベント・タイプPriceEventを指定しています。event-type-repositoryで、このイベントのプロパティ名とタイプを定義しています。

例1-3 チャネルのスキーマ定義

...
<wlevs:event-type-repository>
<wlevs:event-type type-name="PriceEvent">
<wlevs:properties>
<wlevs:property name="cusip" type="char" />
<wlevs:property name="bid" type="double" />
<wlevs:property name="srcId" type="char" />
<wlevs:property name="bidQty" type="int" />
<wlevs:property name="ask" type="double" />
<wlevs:property name="askQty" type="int" />
<wlevs:property name="seq" type="bigint" />
<wlevs:property name="sector" type="char" />
</wlevs:properties>
</wlevs:event-type>
</wlevs:event-type-repository>

<wlevs:adapter id="PriceAdapter" provider="loadgen">
<wlevs:instance-property name="port" value="9011"/>
<wlevs:listener ref="priceStream"/>
</wlevs:adapter>

<wlevs:channel id="priceStream" event-type="PriceEvent">
<wlevs:listener ref="filterFanoutProcessor"/>
</wlevs:channel>

<wlevs:processor id="filterFanoutProcessor" provider="cql">
<wlevs:listener ref="filteredStream"/>
</wlevs:processor>

...

1.1.1.1.3 チャネルの問合せ

図1-2に示すようにイベント・ソース、チャネルおよびプロセッサが接続されると、ストリームを使用するOracle CQL文を作成できます。例1-4に、filterFanoutProcessrのOracle CQL文を定義するコンポーネント構成ファイルを示します。

例1-4 priceStreamを使用するfilterFanoutProcessor Oracle CQL問合せ

<processor>
<name>filterFanoutProcessor</name>
<rules>
<query id="Yr3Sector"><![CDATA[
select cusip, bid, srcId, bidQty, ask, askQty, seq
from priceStream where sector="3_YEAR"
]]></query>
<query id="Yr2Sector"><![CDATA[
select cusip, bid, srcId, bidQty, ask, askQty, seq
from priceStream where sector="2_YEAR"
]]></query>
<query id="Yr1Sector"><![CDATA[
select cusip, bid, srcId, bidQty, ask, askQty, seq
from priceStream where sector="1_YEAR"
]]></query>
</rules>
</processor>

1.1.1.1.4 ダウンストリーム・チャネルに出力する問合せの制御

例1-4に示すように、プロセッサに1つ以上の問合せを指定する場合、すべての問合せ結果がプロセッサのアウトバウンド・チャネルに出力されます(図1-2のfilteredStream)。

オプションで、コンポーネント構成ファイルでchannel要素のselector属性を使用して、出力される問合せ結果を制御できます(例1-5を参照)。この例では、問合せYr3SectorおよびYr2Sectorの問合せ結果はfilteredStreamに出力されますが、問合せYr1Sectorの問合せ結果は出力されません。詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のチャネル・コンポーネントの構成に関する項を参照してください。

例1-5 channel要素のselector子要素を使用した、チャネルに出力される問合せ結果の制御

<channel>
<name>filteredStream</name>
<selector>Yr3Sector Yr2Sector</selector>
</channel>

アップストリーム・プロセッサで問い合わせを作成する前にselectorが含まれているchannel要素を構成できます。この場合、selector内の名前と一致するように問合せ名を指定する必要があります。

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のダウンストリーム・チャネルに出力する問合せの制御に関する項を参照してください。

1.1.1.2 リレーション

時間的に変化するリレーションRは、時間ドメインからRのスキーマを持つ無制限のタプルのバッグへのマッピングです。

リレーションは、順序がなく、時間的に変化するタプルのバッグです: 言い換えると、瞬間的な関係です。各瞬間において、リレーションは制限されたセットです。また、リレーションの変化する状態を表すように、挿入、削除、または更新を含む、タイムスタンプを持つタプルのシーケンスとして表すこともできます。

ストリームと同様、リレーションにはすべてのタプルが準拠する固定スキーマがあります。

Oracle CEPでは基本および派生ストリームとリレーションがサポートされています。外部ソースは基本のストリームとリレーションにデータを提供します。

基本(明示的な)ストリームはOracle CEPアダプタに到着するソース・データ・ストリームであるため、時間は非減少です。つまり、各イベントが同一の時間の値を持つ場合があります。

派生した(暗黙的な)ストリーム/リレーションは、問合せ演算子で生成される中間のストリーム/リレーションです。これらの中間の演算子は(ビューを通じて)指定できるため、以降の問合せで指定できます。

基本リレーションは入力リレーションです。

派生したリレーションは、問合せ演算子で生成される中間のリレーションです。これらの中間の演算子は(ビューを通じて)指定できるため、以降の問合せで指定できます。

Oracle CEPでは、ユーザー自身は基本リレーションを作成しません。基本リレーションはOracle CEPサーバーで必要に応じて作成されます。

リレーションが時間で変化するタプルのバッグであると言う場合、時間は時間ドメインの瞬間を指します。入力リレーションは、時間の経過に沿ったリレーションの変化を表す、タイムスタンプを持つ更新のシーケンスとしてシステムに提示されます。更新はタプルの挿入または削除のいずれかです。更新はタイムスタンプが増加する順にシステムに到着する必要があります。

詳細は、以下を参照してください。

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のストリームとリレーションを表すチャネルに関する項

- 1.1.13項「時間」

1.1.1.3 リレーションとOracle CEPタプル種類インジケータ

デフォルトでは、Oracle CEPで生成されるリレーションにはタイムスタンプとOracle CEPタプル種類インジケータが含まれています(例1-6を参照)。

例1-6 リレーション出力のOracle CEPタプル種類インジケータ

Timestamp   Tuple Kind  Tuple
1000:      +           ,abc,abc
2000:      +           hihi,abchi,hiabc
6000:      -           ,abc,abc
7000:      -           hihi,abchi,hiabc
8000:      +           hi1hi1,abchi1,hi1abc
9000:      +           ,abc,abc
13000:      -           hi1hi1,abchi1,hi1abc
14000:      -           ,abc,abc
15000:      +           xyzxyz,abcxyz,xyzabc
20000:      -           xyzxyz,abcxyz,xyzabc

Oracle CEPタプル種類インジケータは次のとおりです。

- 挿入タプルの場合は+

- 削除タプルの場合は-

- onUpdateEventのcom.bea.wlevs.ede.api.RealtionSinkメソッドの呼出しで示される更新タプルの場合はU(詳細は、Oracle Complex Event Processing Java APIリファレンスを参照してください)。

1.1.2 リレーションからリレーションへの演算子

Oracle CQLのリレーションからリレーションへの演算子は、SQLで表される従来のリレーショナル問合せから派生しています。

SQL問合せで従来のリレーションが参照される任意の場所において、Oracle CQLでリレーションを参照できます。

次のような、スキーマcar_id integer、speed integer、exp_way integer、lane integer、dir integerおよびseg integerを持つストリームCarSegStrの例があるとします。

例1-7では、任意の時点で、この問合せの出力リレーションに直前の30秒間に位置-速度の測定を送信した自動車のセットが含まれます。

例1-7 リレーションからリレーションへの演算

<processor>
<name>cqlProcessor</name>
<rules>
<view id="CurCarSeg" schema="car_id exp_way lane dir seg"><![CDATA[
select distinct
car_id, exp_way, lane, dir, seg
from
CarSegStr [range 30 seconds]
]]></query>
</rules>
</processor>

distinct演算子はリレーションからリレーションへの演算子です。distinctを使用すると、Oracle CEPでは選択された重複するタプル・セットの1つのコピーのみが返されます。重複タプルとはselectリスト内の各式と一致する値を持つタプルです。distinctはselect_clauseと集計関数で使用できます。

distinctの詳細は、次の項を参照してください。

- 第9章「組込みの集計関数」

- select_clause::=

1.1.3 ストリームからリレーションへの演算子(ウィンドウ)

Oracle CQLでは、スライディング・ウィンドウに基づいた、ストリームからリレーションへの演算がサポートされています。通常、S[W]はリレーションです。時間Tのリレーションには、TまでにストリームSに適用されたウィンドウWのすべてのタプルが含まれます。

window_type::=

Oracle CQLでは、次の種類の組込みウィンドウがサポートされています。

- Range: 時間ベース
S[Range T]またはオプションで、

S[Range T1 Slide T2]

- Range: 時間ベース(無制限)
S[Range Unbounded]

- Range: 時間ベース(現在)
S[Now]

- Range: 定数値
S[Range C on ID]

- タプルベース:
S[Rows N]またはオプションで、

S[Rows N1 Slide N2]

- 分割:
S[Partition By A1 ... Ak Rows N]またはオプションで、

S[Partition By A1 ... Ak Rows N Range T]または

S[Partition By A1 ... Ak Rows N Range T1 Slide T2]

この項では、ストリームからリレーションへの演算子の次のプロパティについて説明します。

- 1.1.3.1項「Range、RowおよびSlide」

- 1.1.3.2項「分割」

- 1.1.3.3項「デフォルトのストリームからリレーションへの演算子」

詳細は、以下を参照してください。

- 「範囲ベースのストリームからリレーションへのウィンドウ演算子」

- 「タプルベースのストリームからリレーションへのウィンドウ演算子」

- 「分割されたストリームからリレーションへのウィンドウ演算子」

1.1.3.1 Range、RowおよびSlide

キーワードRangeおよびRowsは問合せで操作するデータの量を指定します。

- Rangeでは指定の期間内に到着するタプルの数が指定されます。

- Rowsではタプルの数が指定されます。

キーワードSlideは必要とする結果の間隔を表します。

図1-3で、Rangeの指定は「5秒間に相当するデータを参照する必要がある」ことを示し、Slideの指定は「5秒ごとの結果が必要である」ことを示します。この場合、各Rangeの指定の終わりに問合せで結果が返されます(「問合せ開始時と空のリレーションの場合のRange、RowsおよびSlide」の項で説明されているように特定の条件を除く)。

図1-3 RangeおよびSlide: 等しい(定常状態条件)

「図1-3 RangeおよびSlide: 等しい(定常状態条件)」の説明

図1-4で、Rangeの指定は「10秒間に相当するデータを参照する必要がある」ことを示し、Slideの指定は「5秒ごとの結果が必要である」ことを示します。この場合、各Rangeの指定中に2回、問合せで結果が返されます(1.1.3.1.1項「問合せ開始時と空のリレーションの場合のRange、RowsおよびSlide」で説明されているように特定の条件を除く)。

図1-4 RangeおよびSlide: 異なる(定常状態条件)

「図1-4 RangeおよびSlide: 異なる(定常状態条件)」の説明

表1-1は、範囲ベースとタプル・ベースのストリームからリレーションへのウィンドウ演算子に関するデフォルトのRange、Rangeの単位およびSlide(該当する場合)のリストです。

表1-1 デフォルトのRangeおよびタプルベースのストリームからリレーションへの演算子

ウィンドウ演算子

デフォルトのRange

デフォルトのRange単位

デフォルトのSlide

範囲ベースのストリームからリレーションへのウィンドウ演算子

Unbounded

seconds

1ナノ秒

タプルベースのストリームからリレーションへのウィンドウ演算子

なし

なし

1タプル

1.1.3.1.1問合せ開始時と空のリレーションの場合のRange、RowsおよびSlide

図1-3および図1-4の説明では、問合せが一定時間実行された後、定常状態条件であると想定されています。表1-2は、問合せ開始時の時間や空のリレーションなど、特定の場合のRange、RowsおよびSlideの動作のリストです。

表1-2 問合せ開始時と空のリレーションの場合のRange、RowsおよびSlide

演算子または関数

結果

COUNT(*)またはCOUNT(expression)

空のリレーションの場合、RangeまたはRowsに相当するデータの累積前、および最初のSlide前にすぐに0を返します(GROUP BYがない場合)。

SUM(attribute)および他の集計関数

空のリレーションの場合、RangeまたはRowsに相当するデータの累積前、および最初のSlide前にすぐにnullを返します。

詳細および例は、次を参照してください。

- 「範囲ベースのストリームからリレーションへのウィンドウ演算子」

- 「タプルベースのストリームからリレーションへのウィンドウ演算子」

- 「分割されたストリームからリレーションへのウィンドウ演算子」

- 1.1.11項「関数」

- 19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」

1.1.3.2 分割

キーワードPartition Byでは、Partition Byで指定された属性の同一性に基づいて、データ・ストリームSが異なるサブストリームに論理的に分割されます。たとえば、S[Partition By A,C Rows 2]のように分割を指定すると、AとCの値のペアの固有な組合わせごとにサブストリームが作成され、それらのサブストリームに対してRowsの指定が適用されます。Rowsの指定は、「2タプルに相当するデータを参照する必要がある」ことを示します。

詳細は、1.1.3.1項「Range、RowおよびSlide」を参照してください。

1.1.3.3 デフォルトのストリームからリレーションへの演算子

Oracle CQL問合せにおいて、リレーションが予想される場所でストリームを参照する際(一般に、from句で)、デフォルトでストリームにRange Unboundedウィンドウが適用されます。たとえば、例1-8と例1-9の問合せは同等です。

例1-8 ストリームからリレーションへの演算子なしの問合せ

<query id="q1"><![CDATA[
select * from InputChannel
]]></query>

例1-9 同等の問合せ

<query id="q1"><![CDATA[
IStream(select * from InputChannel[RANGE UNBOUNDED])
]]></query>

詳細は、1.1.4項「リレーションからストリームへの演算子」を参照してください。

1.1.4 リレーションからストリームへの演算子

ストリームからリレーションへの演算結果を、さらに処理を行うためストリームに戻すことができます。

例1-10では、selectによってフィルタ条件(viewq3.ACCT_INTRL_ID = ValidLoopCashForeignTxn.ACCT_INTRL_ID)を満たすタプルのストリームが出力されます。nowウィンドウによってviewq3がリレーションに変換され、これはフィルタ条件によってリレーションとして維持されます。リレーションからストリームへのIStream演算子によって、フィルタ出力がストリームに変換されます。

例1-10 リレーションからストリームへの演算子

<processor>
<name>cqlProcessor</name>
<rules>
<query id="q3Txns"><![CDATA[
IStream(
select
TxnId,
ValidLoopCashForeignTxn.ACCT_INTRL_ID,
TRXN_BASE_AM,
ADDR_CNTRY_CD,
TRXN_LOC_ADDR_SEQ_ID
from
viewq3[NOW], ValidLoopCashForeignTxn
where
viewq3.ACCT_INTRL_ID = ValidLoopCashForeignTxn.ACCT_INTRL_ID
)
]]></query>
</rules>
</processor>

Oracle CQLでは、リレーションからストリームへの次の演算子がサポートされています。

- IStream: 挿入ストリーム。
Tの時点でrがRにあり、T-1の時点でrがRにない場合、IStream(R)にはすべての(r,T)が含まれます。

詳細は、「リレーションからストリームへのIStream演算子」を参照してください。

- DSteam: 削除ストリーム。
T-1の時点でrがRにあり、Tの時点でrがRにない場合、DStream(R)にはすべての(r,T)が含まれます。

詳細は、「リレーションからストリームへのDStream演算子」を参照してください。

- RStream: リレーション・ストリーム。
Tの時点でrがRにある場合、RStream(R)にはすべての(r,T)が含まれます。

詳細は、「リレーションからストリームへのRStream演算子」を参照してください。

デフォルトでは、Oracle CEPで生成されるリレーションには操作インジケータが含まれるため、挿入、削除および更新(UPDATE SEMANTICSを使用している場合)を識別できます。詳細は、1.1.1.3項「リレーションとOracle CEPタプル種類インジケータ」を参照してください。

1.1.4.1 デフォルトのリレーションからストリームへの演算子

Oracle CQL問合せでモノトニックなリレーションが作成される際は常に、デフォルトでIStream演算子が追加されます。

リレーションRがモノトニックになるのは、t1 <= t2のときにR(t1)がR(t2)のサブセットである場合にかぎられます。

Oracle CQLでは、従来の静的なモノトニック・テストを使用します。たとえば、基本リレーションが追加専用として認識される場合、その基本リレーションはモノトニックです。どのストリームSに対してもS[Range Unbounded]はモノトニックであり、2つのモノトニック・リレーションの結合もモノトニックです。

リレーションがモノトニックでない場合(たとえば、S[range 10 seconds]のようなウィンドウがある場合)、問合せ作成者の意図(IStream、DStreamまたはRStream)を判断できないため、このような場合、Oracle CQLはデフォルトではリレーションからストリームへの演算子を追加しません。

1.1.5 ストリームからストリームへの演算子

一般に、ストリームからストリームへの演算は、次のように実行します。

- ストリームからリレーションへの演算子によって、ストリームをリレーションに変換します。詳細は、1.1.3項「ストリームからリレーションへの演算子(ウィンドウ)」を参照してください。

- リレーションからリレーションへの演算子によって、リレーショナル・フィルタを実行します。詳細は、1.1.2項「リレーションからリレーションの演算子」を参照してください。

- リレーションからストリームへの演算子によって、リレーションをストリームに戻します。詳細は、1.1.4項「リレーションからストリームへの演算子」を参照してください。

ただし、一部のリレーションからリレーションへの演算子(フィルタやプロジェクトなど)は、ストリームからストリームへの演算子として機能することもできます。例1-11のような問合せについて検討します。入力Sはストリームであり、問合せによって、ストリーム要素c1が50を超えるストリームが出力として生成されると想定します。

例1-11 ストリームからストリームへの演算

<processor>
<name>cqlProcessor</name>
<rules>
<query id="q0"><![CDATA[
select * from S where c1 > 50
]]></query>
</rules>
</processor>

これは、デフォルトのストリームからリレーションへの演算子およびリレーションからストリームへの演算子を適用した結果です。例1-11のストリームSにデフォルトの[Range Unbounded]ウィンドウが追加されます。その後、この問合せはモノトニック・リレーションと評価されるため、IStreamが追加されます。

詳細は、以下を参照してください。

- 1.1.3.3項「デフォルトのストリームからリレーションへの演算子」

- 1.1.4.1項「デフォルトのリレーションからストリームへの演算子」

また、Oracle CQLでは次の直接的なストリームからストリームへの演算子がサポートされています。

- MATCH_RECOGNIZE: この句を使用して、入力ストリームの各種のパターン認識問合せを作成します。詳細は、1.1.7項「パターン認識」を参照してください。

- XMLTABLE: この句を使用して、XPath式を使用してxmltypeストリーム要素のデータを解析します。詳細は、18.2.6項「XMLTableの問合せ」を参照してください。

1.1.6 問合せ、ビューおよび結合

Oracle CQL問合せは、Oracle CQL構文で表され、1つ以上のストリーム、リレーションまたはビューからのデータを取得するためにOracle CEP CQLプロセッサで実行される操作です。<query>要素で作成した最上位のSELECT文は問合せと呼ばれます。詳細は、18.2項「問合せ」を参照してください。

Oracle CQLビューは、ストリームまたはリレーションでの代替の選択項目を表します。Oracle CQLでは、副問合せのかわりにビューを使用します。<view>要素で作成した最上位のSELECT文はビューと呼ばれます。詳細は、18.3項「ビュー」を参照してください

各問合せおよびビューには、問合せおよびビューを含むプロセッサで一意の識別子が必要です。例1-12は、idがq0の問合せを示します。id値は、識別子::=で指定された仕様に準拠する必要があります。

例1-12 問合せおよびビューID属性

<processor>
<name>cqlProcessor</name>
<rules>
<query id="q0"><![CDATA[
select * from S where c1 > 50
]]></query>
</rules>
</processor>

結合は、複数のストリーム、ビューまたはリレーションから行を結合する問合せです。詳細は、18.4項「結合」を参照してください。

詳細は、第18章「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

1.1.7 パターン認識

Oracle CQL MATCH_RECOGNIZEコンストラクトは、パターン認識を実行するための主な手段です。

入力ストリームの連続するイベントまたはタプルのシーケンスが特定の条件を満たす場合は、パターンが構成されます。Oracle CQLのパターン認識機能では、着信イベントまたはタプルの属性に条件を定義し、相関変数と呼ばれるString名を使用してこれらの条件を識別できます。照合されるパターンは、これらの相関変数に対する正規表現として指定され、様々な着信タプルが有効な一致として見なされるために満たす必要のある条件のシーケンスまたは順序が決定されます。

詳細は、第19章「MATCH_RECOGNIZEを使用したパターン認識」を参照してください。

1.1.8 イベント・ソースとイベント・シンク

Oracle CEPイベント・ソースはOracle CQL問合せが操作するデータのプロデューサを識別します。Oracle CQLイベント・シンクは問合せ結果のコンシューマを識別します。

この項では、Oracle CQL問合せでアクセスできるイベント・ソースとイベント・シンクの種類、およびイベント・ソースとイベント・シンクへの接続方法について説明します。

1.1.8.1 イベント・ソース

Oracle CEPイベント・ソースはOracle CQL問合せが操作するデータのプロデューサを識別します。

Oracle CEPでは、イベント・ソースとして次の要素を使用できます。

- アダプタ(JMS、HTTPおよびファイル)

- チャネル

- プロセッサ

- 表

- キャッシュ

注意:

Oracle CEPでは、チャネルを使用してイベント・ソースをOracle CQLプロセッサに接続し、Oracle CQLプロセッサをイベント・シンクに接続する必要があります。他のOracle CEPプロセッサ・タイプでは、チャネルはオプションです。詳細は、1.1.1項「ストリームとリレーション」を参照してください。

Oracle CEPイベント・ソースは、通常はプッシュ・データ・ソースです。つまり、Oracle CEPではデータの準備ができたイベント・ソースからの通知を予期します。

Oracle CEPのリレーション・データベース表およびキャッシュ・イベント・ソースはプル・データ・ソースです。つまり、Oracle CEPは、データ・ストリーム上でのイベントの到着時にイベント・ソースをポーリングします。

詳細は、以下を参照してください。

- 1.1.9項「表イベント・ソース」

- 1.1.10項「キャッシュ・イベント・ソース」

1.1.8.2 イベント・シンク

CQLプロセッサに接続されているOracle CQLイベント・シンクは問合せ結果のコンシューマです。

Oracle CEPでは、イベント・シンクとして次の要素を使用できます。

- アダプタ(JMS、HTTPおよびファイル)

- チャネル

- プロセッサ

- キャッシュ

同一の問合せを複数のイベント・シンクや、異なる種類のイベント・シンクに関連付けることができます。

1.1.8.3 イベント・ソースとイベント・シンクの接続

Oracle CEPでは、Oracle CEP IDE for Eclipseを使用してイベント処理ネットワーク(EPN)を作成し、イベント・ソースとイベント・シンクを定義します(図1-5を参照)。このEPNで、アダプタPriceAdapterはチャネルpriceStreamのイベント・ソースであり、チャネルpriceStreamはOracle CQLプロセッサfilterFanoutProcessorのイベント・ソースです。同様に、Oracle CQLプロセッサfilterFanoutProcessorはチャネルpriceStreamのイベント・シンクです。

図1-5 イベント処理ネットワークのイベント・ソースとイベント・シンク

「図1-5 イベント処理ネットワークのイベント・ソースとイベント・シンク」の説明

詳細は、以下を参照してください。

- 1.1.1項「ストリームとリレーション」

- 18.1項「Oracle CQLの問合せ、ビューおよび結合の概要」

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』

1.1.9 表イベント・ソース

Oracle CQLを使用して、次の表データにアクセスできます。

- 1.1.9.1項「リレーショナル・データベース表イベント・ソース」

- 1.1.9.2項「XML表イベント・ソース」

- 1.1.9.3項「関数表イベント・ソース」

詳細は、1.1.8項「イベント・ソースとイベント・シンク」を参照してください。

1.1.9.1 リレーショナル・データベース表イベント・ソース

Oracle CQLプロセッサを使用すると、リレーショナル・データベース表をイベント・ソースとして指定できます。このイベント・ソースで問合せを実行したり、他のイベント・ソースと結合したりできます。

詳細は、18.6項「Oracle CQL問合せとリレーショナル・データベース表」を参照してください。

1.1.9.2 XML表イベント・ソース

Oracle CQLのXMLTABLE句を使用すると、XPath式を使用してxmltypeストリームのデータを列に解析し、列名でデータに容易にアクセスできます。

詳細は、18.2.6項「XML表問合せ」を参照してください。

1.1.9.3 関数表イベント・ソース

TABLE句を使用して、リレーションとして、Oracle CQL問合せのFROM句内の組込みまたはユーザー定義関数から配列またはCollection型として返された複数の行にアクセスします。

詳細は、以下を参照してください。

- 18.2.7項「関数TABLEの問合せ」

- 1.1.11項「関数」

1.1.10 キャッシュ・イベント・ソース

Oracle CQLプロセッサを使用すると、Oracle CEPキャッシュをイベント・ソースとして指定できます。nowウィンドウを使用する場合にのみ、このイベント・ソースで問合せを実行したり、他のイベント・ソースと結合できます。

詳細は、以下を参照してください。

- 1.1.8項「イベント・ソースとイベント・シンク」

- 18.2.8項「キャッシュの問合せ」

- 「S[now]」

1.1.11 関数

関数は、データ項目を操作して結果を返す点で演算子と同様です。関数が演算子と異なる点は、引数の形式です。この形式により、0、1、2個、またはより多数の引数を操作できます。

function(argument, argument, ...)

引数を持たない関数は疑似列と同じです(第3章「疑似列」を参照)。ただし、疑似列ではリレーションの各タプルで異なる値が返されますが、引数を持たない関数では各タプルに対して通常は同じ値が返されます。

Oracle CQLには、ストリーム・データの操作を実行する、次のような広範な組込み関数が用意されています。

- 問合せのストリームまたはビューの各行ごとに単一の結果行を返す単一行関数

- 単一のタプルのかわりにタプルのグループに基づいて単一の集計結果を返す集計関数

- Coltオープン・ソース・ライブラリに基づいた、高性能な科学技術計算のための単一行の統計的かつ高度な算術演算

- Coltオープン・ソース・ライブラリに基づいた、高性能な科学技術計算のための集計の統計的かつ高度な算術演算

- java.lang.Mathクラスに基づいた統計的かつ高度な算術演算

アプリケーションで必要な機能がOracle CQL組込み関数に用意されていない場合は、oracle.cep.extensibility.functionsパッケージのクラスを使用して、ユーザー定義関数をJavaで簡単に作成できます。ユーザー定義の集計関数および単一行関数を作成できます。オーバーロード関数の作成、および組込み関数のオーバーライドができます。

Oracle CQL関数で予期される型以外のデータ型の引数を使用してOracle CQL関数を呼び出した場合、Oracle CEPではOracle CQL関数を実行する前に、予期されるデータ型に引数を変換しようと試みます。

注意:

関数名では、大/小文字が区別されます。

- 組込み関数: 小文字のみを使用できます。

- ユーザー定義関数: welvs:function要素のfunction-name属性で、大/小文字の区別が決定されます。

詳細は、以下を参照してください。

- 第8章「組込みの単一行関数」

- 第9章「組込みの集計関数」

- 第10章「Colt単一行関数」

- 第11章「Colt集計関数」

- 第12章「java.lang.Math関数」

- 第13章「ユーザー定義関数」

- 2.2.4項「データ型変換」

1.1.12 データ・カートリッジ

Oracle CQLデータ・カートリッジ・フレームワークにより、任意のドメイン・オブジェクトとOracle CQL言語を密接に統合し、ドメイン・オブジェクト・フィールド、メソッドおよびコンストラクタを、Oracle CQL問合せ内でOracle CQLネイティブ型と同じように使用できます。

現在、Oracle CEPには次のデータ・カートリッジが用意されています。

- Oracle Javaデータ・カートリッジ: このデータ・カートリッジは、Oracle CQLの問合せおよびビューでOracle CQLネイティブ型と同じように使用できる、Javaの型、メソッド、フィールドおよびコンストラクタを公開します。
第15章「Oracle Javaデータ・カートリッジ」を参照してください。

- Oracle Spatial: このデータ・カートリッジは、Oracle CQLの問合せおよびビューでOracle CQLネイティブ型と同じように使用できる、Oracle Spatialの型、メソッド、フィールドおよびコンストラクタを公開します。
第16章「Oracle Spatial」を参照してください。

- Oracle JDBCデータ・カートリッジ: このデータ・カートリッジにより、Oracle CQLのネイティブ型と同様に、複数の表やデータ・ソースに対する任意のSQL関数をOracle CQL問合せおよびビュー内に組み込めます。
第17章「Oracle CEP JDBCデータ・カートリッジ」を参照してください。

詳細は、以下を参照してください。

- 14.1項「データ・カートリッジについて」

- 14.2項「Oracle CQLデータ・カートリッジの型」

1.1.13 時間

タイムスタンプはOracle CEPストリームの重要な部分です。ただし、タイプスタンプは必ずしもクロック・タイムと同じである必要はありません。たとえば、アプリケーション・ドメインで時間を定義し、シーケンス番号で表すことができます。タイムスタンプは、タイムスタンプの値が増加する順に更新がシステムに到着することだけを保証するよう要求されます。

タイムスタンプの順序の要件は、1つのストリームまたはリレーションに固有のものです。たとえば、異なるストリームのタプルは任意の順序で相互配置できます。

Oracle CEPではアプリケーション時間またはシステム時間を監視できます。

アプリケーション・タイムスタンプまたはシステム・タイムスタンプの操作を構成するには、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のwlevs:channel内の子要素application-timestampedに関する項を参照してください。

システム・タイムスタンプを持つリレーションまたはストリームの場合、時間はリレーションまたはストリームのデータ・ソースでのデータの到着に依存します。指定された時間(たとえば1分など)が経過してもアクティビティが発生しない(ストリームまたはリレーションのソースにデータが到着しない)場合、Oracle CEPではシステム・タイムスタンプを持つリレーションまたはストリームでハートビートが生成されます。リレーションまたはストリームが指定のソースによって設定されるか、またはハートビートが毎分生成されます。これにより、リレーションまたはストリームの遅れが1分を超えることはなくなります。

ハートビートを構成するには、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のハートビートに関する項を参照してください。

システム・タイムスタンプを持つストリームとリレーションの場合、2つのイベントが同じ時間値を持つことがないようにシステムによって時間が割り当てられます。ただし、アプリケーション・タイムスタンプを持つストリームとリレーションの場合は、イベントが同じ時間値を持つ場合があります。

アプリケーションのタイムスタンプが(非減少ではなく)厳密に増加することが分かっている場合は、wlevs:channel属性is-total-orderをtrueに設定できます。これにより、Oracle CEPエンジンでは特定の最適化を行えるようになり、通常は処理の待機時間の減少につながります。

is-total-orderを構成するには、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のwlevs:application-timestampedに関する項を参照してください。

Oracle CEPスケジューラは、スケジュールのアルゴリズムと頻度に従って、各Oracle CQL問合せを連続的に実行します。

スケジューラの詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のスケジューラに関する項を参照してください。

1.2 Oracle CQL文

Oracle CQLには、問合せやビューを作成する文が用意されています。

この項の内容は、次のとおりです。

- 1.2.1項「表記規則」

- 1.2.2項「構文のショートカットとデフォルト」

- 1.2.3項「ドキュメント表記規則」

詳細は、以下を参照してください。

- 第18章「Oracle CQLの問合せ、ビューおよび結合」

- 第20章「Oracle CQL文」

1.2.1 表記規則

Oracle CEP IDE for EclipseまたはOracle CEP Visualizerを使用して、Oracle CEP CQLプロセッサに関連付けられたXML構成ファイルにOracle CQL文を作成します。このXMLファイルは構成ソースと呼ばれます。

構成ソースはwlevs_application_config.xsdスキーマに準拠している必要があり、rule、viewまたはquery要素のみを含むことができます(例1-13を参照)。

例1-13 通常のOracle CQLプロセッサ構成ソース・ファイル

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd"
xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<processor>
<name>cqlProcessor</name>
<rules>
<view id="lastEvents" schema="cusip bid srcId bidQty ask askQty seq"><![CDATA[
select cusip, bid, srcId, bidQty, ask, askQty, seq
from inputChannel[partition by srcId, cusip rows 1]
]]></view>
<view id="bidask" schema="cusip bid ask"><![CDATA[
select cusip, max(bid), min(ask)
from lastEvents
group by cusip
]]></view>
<view ...><![CDATA[
...
]]></view>
...
<view id="MAXBIDMINASK" schema="cusip bidseq bidSrcId bid askseq askSrcId ask bidQty askQty"><![CDATA[
select bid.cusip, bid.seq, bid.srcId as bidSrcId, bid.bid, ask.seq, ask.srcId as askSrcId, ask.ask, bid.bidQty, ask.askQty
from BIDMAX as bid, ASKMIN as ask
where bid.cusip = ask.cusip
]]></view>
<query id="BBAQuery"><![CDATA[
ISTREAM(select bba.cusip, bba.bidseq, bba.bidSrcId, bba.bid, bba.askseq,
bba.askSrcId, bba.ask, bba.bidQty, bba.askQty, "BBAStrategy" as intermediateStrategy,
p.seq as correlationId, 1 as priority
from MAXBIDMINASK as bba, inputChannel[rows 1] as p where bba.cusip = p.cusip)
]]></query>
</rules>
</processor>

Oracle CQLプロセッサのコンポーネント構成ファイルでOracle CQL問合せを作成する場合は、次のルールに従います。

- viewまたはquery要素ごとに1つのOracle CQL文を指定できます。

- Oracle CQL文はセミコロン(;)で終わることはできません。

- Oracle CQL文は<![CDATA[ and ]]>で囲む必要があります(例1-13を参照)。

- Oracle CQLを発行する場合は、文の定義内でスペースを使用する任意の場所に、1つ以上のタブ、キャリッジ・リターン、またはスペースを含めることができます。このため、Oracle CEPでは例1-14と例1-15のOracle CQL文が同じように評価されます。

例1-14 Oracle CQL: ホワイトスペースなしの書式設定

<processor>
<name>cqlProcessor</name>
<rules>
<query id="QTollStr"><![CDATA[
RSTREAM(select cars.car_id, SegToll.toll from CarSegEntryStr[now] as cars, SegToll
where (cars.exp_way = SegToll.exp_way and cars.lane = SegToll.lane
and cars.dir = SegToll.dir and cars.seg = SegToll.seg))
]]></query>
</rules>
</processor>

例1-15 Oracle CQL: ホワイトスペースを含む書式設定

<processor>
<name>cqlProcessor</name>
<rules>
<query id="QTollStr"><![CDATA[
RSTREAM(
select
cars.car_id,
SegToll.toll
from
CarSegEntryStr[now]
as
cars, SegToll
where (
cars.exp_way = SegToll.exp_way and
cars.lane = SegToll.lane and
cars.dir = SegToll.dir and
cars.seg = SegToll.seg
)
)
]]></query>
</rules>
</processor>

- 予約語、キーワード、識別子およびパラメータでは大文字と小文字は区別されません。ただし、テキスト・リテラルと引用名では大文字と小文字が区別されます。
詳細は、以下を参照してください。

- 1.1.11項「関数」

- 2.3項「リテラル」

- 2.8項「スキーマ・オブジェクト名と修飾子」

- Oracle CQL文ではコメントは許可されていません。詳細は、2.6項「コメント」を参照してください。

注意:

『Oracle Fusion Middleware Oracle Complex Event Processing CQL言語リファレンス』では、わかりやすくするためにOracle CQL文でviewまたはquery要素のみを使用しています。

1.2.2 構文のショートカットとデフォルト

Oracle CQLの問合せ、ビューおよび結合を作成する際、問合せを簡易化するためにOracle CQLで用意されている構文のショートカットとデフォルトを使用できます。

詳細は、以下を参照してください。

- 1.1.3.3項「デフォルトのストリームからリレーションへの演算子」

- 1.1.4.1項「デフォルトのリレーションからストリームへの演算子」

- 『Oracle Fusion Middleware Oracle Complex Event Processingスタート・ガイド』のHelloWorldの例に関する項

1.2.3 ドキュメントの表記規則

このリファレンスのすべてのOracle CQL文は(第20章「Oracle CQL文」を参照)、次の項に編成されています。

構文 構文図では、文を構成するキーワードとパラメータを示します。

注意:

すべてのキーワードとパラメータがすべての状況で有効な訳ではありません。各文および句の「セマンティクス」を参照し、構文上の制限を理解するようにしてください。

目的 「目的」では文の基本的な使用について示します。

要件 「要件」では必要な権限、および文を使用する前に実行する必要のある手順を示します。

セマンティクス 「セマンティクス」では構文を構成するキーワード、パラメータおよび句の目的と、それらに適用されることのある制限などの使用上の注意点を示します。(この章で使用されているキーワードやパラメータの表記規則の説明は、このリファレンスの「はじめに」を参照してください。)

例 「例」では文の様々な句とパラメータの使用例を示します。

1.3 Oracle CQLとSQL標準

Oracle CQLは新しいテクノロジですが、SQL99のサブセットに基づいています。

Oracleでは業界に受け入れられた標準への準拠に努め、SQL標準調査会に積極的に参加しています。OracleではOracle CQLの標準化を積極的に推進しています。

1.4 Oracle CEPサーバーとツールのサポート

Oracle CEPサーバーおよびツールを使用すると、Oracle CQLを使用するOracle CEPアプリケーションの作成、パッケージ化、デプロイ、デバッグおよび管理を効率的に行うことができます。

1.4.1 Oracle CEPサーバー

Oracle CEPサーバーは、Oracle CEPアプリケーション用の軽量なSpringコンテナを提供し、サーバーとアプリケーションのライフサイクルを管理します。確定的ガベージ・コレクションを行うJRockit real-time JVMのほか、Jetty、JMX、JDBC、HTTPパブリッシュ-サブスクライブ、ロギングとデバッグなどの各種の重要なサービスを提供します。

Oracle CEPサーバーの詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing管理者ガイド』を参照してください。

1.4.2 Oracle CEPツール

Oracle CEPでは、Oracle CQL開発プロセスを簡素化する次のツールが用意されています。

- 1.4.2.1項「Oracle CEP IDE for Eclipse」

- 1.4.2.2項「Oracle CEP Visualizer」

1.4.2.1 Oracle CEP IDE for Eclipse

Oracle CEP IDE for Eclipseは、Oracle CEPアプリケーションを開発するプログラマ向けのツールです(図1-6を参照)。

図1-6 Oracle CEP IDE for Eclipse

「図1-6 Oracle CEP IDE for Eclipse」の説明

Oracle CEP IDE for Eclipseは、Oracle CEPアプリケーションの開発、デプロイおよびデバッグを支援するために設計されたEclipse IDEのプラグインです。

Oracle CEP IDE for Eclipseの主な機能は、次のとおりです。

- イベント駆動型アプリケーションの作成を直ちに開始するためのプロジェクト作成ウィザードおよびテンプレート。

- JavaやXMLファイルなどのOracle CEPアプリケーションに共通のソース・ファイル用の高度なエディタ。

- IDEからOracle CEPサーバー・インスタンスをシームレスに開始、停止およびデプロイするための統合化されたサーバー管理。

- 統合化されたデバッグ。

- イベント処理アプリケーション内を参照および移動できる、イベント処理ネットワーク(EPN)のビジュアルなデザイン・ビュー。

- Oracle CEP Visualizerの統合サポート。これにより、IDEからOracle CEP Visualizerを使用できます(1.4.2.2項「Oracle CEP Visualizer」を参照)。

詳細は、次の資料を参照してください。

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』

- http://www.oracle.com/technology/products/event-driven-architecture/cep-ide/11/index.html

1.4.2.2 Oracle CEP Visualizer

Oracle CEP Visualizerという高度な実行時管理コンソールが用意されています(図1-7を参照)。

図1-7 Oracle CEP Visualizer

「図1-7 Oracle CEP Visualizer」の説明

Oracle CEP Visualizerを使用すると、Oracle CEPサーバー・ドメインおよびこれらにデプロイするOracle CEPアプリケーションをブラウザから管理、チューニングおよび監視できます。Oracle CEP Visualizerには、Oracle CQLおよびEPLルールの管理および作成のサポートなどを含む、様々な高機能の実行時管理ツールが用意されています。

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』を参照してください。

2 Oracle CQLの基本要素

この章では、Oracle Continuous Query Language (Oracle CQL)の基本部分(データ型、リテラル、nullなど)のリファレンスを提供します。Oracle CQLは、Oracle Complex Event Processing (Oracle CEP)アプリケーションで使用される問合せ言語です。

Oracle CQLには、次の基本要素があります。

- 2.1項「データ型」

- 2.2項「データ型の比較規則」

- 2.3項「リテラル」

- 2.4項「書式モデル」

- 2.5項「Null」

- 2.6項「コメント」

- 2.7項「別名」

- 2.8項「スキーマ・オブジェクト名と修飾子」

第IV部「Oracle CQLの使用」に説明されている文を使用する前に、この章で説明する概念を理解しておく必要があります。

2.1 データ型

Oracle CEPによって操作される各値には、データ型があります。値のデータ型により、プロパティの固定セットがその値に関連付けられます。これらのプロパティにより、Oracle CEPでは、あるデータ型の値が別のデータ型の値とは異なって扱われます。たとえば、INTEGERデータ型の値は追加できますが、CHARデータ型の値は追加できません。ストリームを作成する場合、その要素ごとにデータ型を指定する必要があります。ユーザー定義関数を作成する場合、その引数ごとにデータ型を指定する必要があります。これらのデータ型によって、各要素または各引数が含むことのできる値の範囲を定義します。たとえば、データ型としてTIMESTAMPを持つ属性は、値「2月29日」(うるう年を除く)や、値「2」または「SHOE」を保持できません。Oracle CQLでは、多くの組込みデータ型を使用できます。Oracle CQLデータ型の構文は、後続の図に記載されています。

Oracle CQLでサポートされていないデータ型をイベントが使用している場合は、Oracle CQLデータ・カートリッジまたはユーザー定義関数を作成してOracle CQL問合せでそのデータ型を評価できます。

詳細は、以下を参照してください。

- 2.1.1項「Oracle CQL組込みデータ型」

- 2.1.2項「Oracle CQLデータ・カートリッジを使用した他のデータ型の処理」

- 2.1.3項「ユーザー定義関数を使用した他のデータ型の処理」

- 2.2項「データ型の比較規則」

- 2.3項「リテラル」

- 2.4項「書式モデル」

- 2.7.2.1項「Aliases要素を使用してデータ型の別名を定義する方法」

datatype::=

variable_length_datatype::=

fixed_length_datatype::=

2.1.1 Oracle CQL組込みデータ型

表2-1は、Oracle CQL組込みデータ型の概要を示しています。構文の要素については、前の項の構文を参照してください。

イベント・タイプを定義する場合は、これらのデータ型およびデータ型リテラルの制限を検討します。詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPイベント・タイプの作成に関する項を参照してください。

表2-1 Oracle CQL組込みデータ型の概要

Oracle CQLデータ型

説明

BIGINT

Java Long型と同等の固定長数値。

詳細は、2.3.2項「数値リテラル」を参照してください。

BOOLEAN

Java Boolean型と同等の固定長ブール値。有効な値はtrueまたはfalseです。

BYTE[(size)]脚注 1

長さがsizeバイトの可変長文字データ。sizeの最大値は4096バイトです。デフォルトはsizeの最小値の1バイトです。

詳細は、2.3.2項「数値リテラル」を参照してください。

CHAR[(size)]脚注 1

長さがsize文字の可変長文字データ。sizeの最大値は4096文字です。デフォルトはsizeの最小値の1文字です。

詳細は、2.3.1項「テキスト・リテラル」を参照してください。

DOUBLE

Java double型と同等の固定長数値。

詳細は、2.3.2項「数値リテラル」を参照してください。

FLOAT

Java float型と同等の固定長数値。

詳細は、2.3.2項「数値リテラル」を参照してください。

INTEGER

Java int型と同等の固定長数値。

詳細は、2.3.2項「数値リテラル」を参照してください。

INTERVAL

固定長のINTERVALデータ型は期間を指定します。Oracle CEPではDAY TO SECONDがサポートされます。最大長は64バイトです。

詳細は、2.3.4項「期間リテラル」を参照してください。

TIMESTAMP

固定長のTIMESTAMPデータ型は、Oracle CQLでサポートされるjava.text.SimpleDateFormat書式モデルのいずれかに準拠する日時リテラルを格納します。最大長は64バイトです。

詳細は、2.3.3項「日時リテラル」を参照してください。

XMLTYPE

このデータ型は、XMLデータを含むストリーム要素に使用します。最大長は4096文字です。

XMLTYPEはシステム定義型であるため、関数の引数またはストリーム属性のデータ型として使用できます。

詳細は、「SQL/XML (SQLX)」を参照してください。

OBJECT

任意のJavaオブジェクト(つまり、java.lang.Objectの任意のサブクラス)を指します。

Oracle CEPエンジンではOBJECTフィールドのコンテンツが認識されないため、これはOracle CEPの不透明な型のサポートと呼ばれます。

通常、この型はアダプタから宛先に値をそのまま渡す場合に使用します。Oracle CEPエンジンではこれらの値を解釈する必要はありませんが(Collection型または他の任意のユーザー固有のJava型)、関連付けられているイベントのその他のフィールドが問合せで参照されます。

脚注1Oracle CQLでは1次元配列のみがサポートされます。

2.1.2 Oracle CQLデータ・カートリッジを使用した他のデータ型の処理

Oracle CQLでサポートされていないデータ型をイベントが使用している場合は、Oracle CQLデータ・カートリッジを作成してOracle CQL問合せでそのデータ型を評価できます。

Oracle CQLには、次のデータ・カートリッジが含まれます。

- 第15章「Oracle Javaデータ・カートリッジ」

- 第16章「Oracle Spatial」

- 第17章「Oracle CEP JDBCデータ・カートリッジ」

詳細は、第14章「データ・カートリッジの概要」を参照してください。

2.1.3 ユーザー定義関数を使用した他のデータ型の処理

Oracle CQLでサポートされていないデータ型をイベントが使用している場合は、ユーザー定義関数を作成してOracle CQL問合せでそのデータ型を評価できます。

例2-1のようなenumデータ型があるとします。例2-2に示すイベントでは、このenumデータ型を使用しています。Oracle CQLではenumデータ型がサポートされていません。

例2-1 列挙データ型ProcessStatus

package com.oracle.app;

public enum ProcessStatus {
OPEN(1),
CLOSED(0)}
}

例2-2 列挙データ型ProcessStatusを使用するイベント

package com.oracle.app;

import com.oracle.capp.ProcessStatus;

public class ServiceOrder {
private String serviceOrderId;
private String electronicSerialNumber;
private ProcessStatus status;
...
}

ユーザー定義関数を作成し(例2-3を参照)、アプリケーション・アセンブリ・ファイルに関数を登録することで(例2-4を参照)、このenumデータ型をOracle CQL問合せで評価できます(例2-5を参照)。

例2-3 列挙データ型を評価するユーザー定義関数

package com.oracle.app;

import com.oracle.capp.ProcessStatus;
public class CheckIfStatusClosed {
public boolean execute(Object[] args) {
ProcessStatus arg0 = (ProcessStatus)args[0];
if (arg0 == ProcessStatus.OPEN)
return Boolean.FALSE;
else
return Boolean.TRUE;
}
}

例2-4 アプリケーション・アセンブリ・ファイルへのユーザー定義関数の登録

<wlevs:processor id="testProcessor">
<wlevs:listener ref="providerCache"/>
<wlevs:listener ref="outputCache"/>
<wlevs:cache-source ref="testCache"/>
<wlevs:function function-name="statusClosed" exec-method=”execute” />
<bean class="com.oracle.app.CheckIfStatusClosed"/>
</wlevs:function>
</wlevs:processor>

例2-5 ユーザー定義関数を使用したOracle CQL問合せでの列挙データ型の評価

<query id="rule-04"><![CDATA[
SELECT
meter.electronicSerialNumber,
meter.exceptionKind
FROM
MeterLogEvent AS meter,
ServiceOrder AS svco
WHERE
meter.electronicSerialNumber = svco.electronicSerialNumber and
svco.serviceOrderId IS NULL OR statusClosed(svco.status)
]]></query>

詳細は、第13章「ユーザー定義関数」を参照してください。

2.2 データ型の比較規則

この項では、Oracle CEPでの各データ型の値の比較方法について説明します。

2.2.1 数値

多い値は少ない値よりも大きいと見なされます。すべての負の数は0および正の数よりも小さいと見なされます。このため、-1は100より小さく、-100は-1より小さい数です。

2.2.2 日付値

後の日付は前の日付よりも大きいと見なされます。たとえば、'29-MAR-2005'に等しい日付は'05-JAN-2006'に等しい日付より小さく、'05-JAN-2006 1:35pm'は'05-JAN-2005 10:09am'より大きくなります。

2.2.3 文字値

Oracle CQLでは辞書順に基づいた辞書的ソートがサポートされています。

内部的には、Oracle CQLではcharの数値が比較されます。使用するエンコーディングに応じて数値は異なりますが、通常は、比較する際に違いはありません。例:

'a' < 'b'
'aa' < 'ab'
'aaaa' < 'aaaab'

2.2.4 データ型変換

通常、式では異なるデータ型の値を使用できません。たとえば、算術式で5 × 10の乗算の後に'JAMES'を加算することはできません。ただし、Oracle CEPではあるデータ型から別のデータ型への暗黙的および明示的な値の変換がサポートされています。

暗黙的または自動的な変換に依存するかわりに、Oracleでは明示的な変換の指定をお薦めします。これは、次の理由によります。

- 明示的なデータ型変換関数を使用すると、Oracle CQL文が読みやすくなります。

- 暗黙的なデータ型変換はパフォーマンスに悪影響を及ぼす可能性があります。

- 暗黙的な変換は発生したコンテキストに依存し、すべてのケースで同じように動作しない可能性があります。

- 暗黙的な変換のアルゴリズムはソフトウェア・リリース間やOracle製品間で変更される場合があります。明示的な変更では、動作がより安定しています。

この項の内容は、次のとおりです。

- 2.2.4.1項「暗黙的なデータ型変換」

- 2.2.4.2項「明示的なデータ型変換」

- 2.2.4.3項「SQLデータ型変換」

- 2.2.4.4項「Oracleデータ・カートリッジのデータ型変換」

- 2.2.4.5項「ユーザー定義関数のデータ型変換」

2.2.4.1 暗黙的なデータ型変換

Oracle CEPでは、変換に意味がある場合に、あるデータ型から別のデータ型に値が自動的に変換されます。

表2-2は、Oracleの暗黙的な変換を示しています。この表は、使用可能なすべての変換を示しています(Xマークが付けられています)。サポートされていない変換には--マークが付けられています。

表2-2 暗黙的な型変換のマトリックス

CHAR

BYTE

BOOLEAN

INTEGER

DOUBLE

BIGINT

FLOAT

TIMESTAMP

INTERVAL

CHARから

--

--

--

--

--

--

--

X

--

BYTEから

X

--

--

--

--

--

--

--

--

BOOLEANから

--

--

X

--

--

--

--

--

--

INTEGERから

X

--

--

--

X

X

X

--

--

DOUBLEから

X

--

--

--

X

--

--

--

--

BIGINTから

X

--

--

--

X

--

X

--

--

FLOATから

X

--

--

--

X

--

--

--

--

TIMESTAMPから

X

--

--

--

--

--

--

--

--

INTERVALから

X

--

--

--

--

--

--

--

--

次の規則は、Oracle CEPで暗黙のデータ型変換が行われる方向を決定します。

- SELECT FROM操作で、Select句に算術式または条件の評価が含まれている場合、Oracle CEPではストリームのデータがターゲット変数の型に変換されます。
たとえば、c1+2.0などの式評価やc1 < 2.0などの条件評価のコンテキストでc1がINTEGER型である場合に、暗黙的な変換が発生します。

- FLOATからBIGINTへの変換は正確です。

- BIGINT値が使用する精度のビット数がFLOATでサポートされる数を超えている場合、BIGINTからFLOATへの変換は正確ではありません。

- 文字値とTIMESTAMP値を比較する場合、Oracle CEPでは文字データがTIMESTAMPに変換されます。

- Oracle CQL関数または演算子で許可されていないデータ型の引数を使用すると、Oracle CEPではサポートされている場合は必ず、引数が使用可能なデータ型に変換されます。

- 代入時、Oracle CEPでは等号(=)の右側の値が、左側の代入対象のデータ型に変換されます。

- 連結操作時、Oracle CEPでは文字以外のデータ型がCHARに変換されます。

- 文字データ型と文字以外のデータ型の間で算術演算または比較を行う場合、Oracle CEPでは数値型がCHARに変換されます(表2-2を参照)。

2.2.4.2 明示的なデータ型変換

Oracle CQL変換関数を使用して、明示的にデータ型の変換を指定できます。表2-3は、あるデータ型から別のデータ型に値を明示的に変換するOracle CQL関数を示しています。サポートされていない変換には--マークが付けられています。

表2-3 明示的な型変換のマトリックス

CHAR

BYTE

BOOLEAN

INTEGER

DOUBLE

BIGINT

FLOAT

TIMESTAMP

INTERVAL

CHARから

--

hextoraw

--

--

--

--

--

to_timestamp

--

BYTEから

--

rawtohex

--

--

--

--

--

--

--

BOOLEANから

INTEGERから

to_char

--

to_boolean

--

to_double

to_bigint

to_float

--

--

DOUBLEから

to_char

--

--

--

--

--

--

--

--

LONGから

--

--

--

--

--

--

--

to_timestamp

--

BIGINTから

to_char

--

to_boolean

--

to_double

--

to_float

--

--

FLOATから

to_char

--

--

--

to_double

--

--

--

--

TIMESTAMPから

to_char

--

--

--

--

--

--

--

--

INTERVALから

to_char

--

--

--

--

--

--

--

--

2.2.4.3 SQLデータ型変換

Oracle CQLプロセッサを使用すると、リレーショナル・データベース表をイベント・ソースとして指定できます。このイベント・ソースで問合せを実行したり、他のイベント・ソースと結合したりできます。その場合は、Oracle CEPでサポートされる同等のSQLおよびOracle CEPデータ型に注意を払う必要があります。

詳細は、以下を参照してください。

- 18.2.5項「リレーショナル・データベース表の問合せ」

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のSQL列タイプおよびOracle CEPタイプの対応するものに関する項

2.2.4.4 Oracleデータ・カートリッジのデータ型変換

実行時、Oracle CEPではデータ・カートリッジの実装に応じて、Oracle CQLとデータ・カートリッジのデータ型との間でマッピングが行われます。

詳細は、以下を参照してください。

- Oracle Javaデータ・カートリッジ: 15.1.4項「データ型マッピング」

- Oracle Spatial: 16.1.3項「データ型マッピング」

2.2.4.5 ユーザー定義関数のデータ型変換

実行時、Oracle CEPではユーザー定義関数の戻り値の型に指定したOracle CQLデータ型とJavaの同等のデータ型との間でマッピングが行われます。

詳細は、13.1.2項「ユーザー定義関数のデータ型」を参照してください。

2.3 リテラル

「リテラル」と「定数値」という用語は同義語であり、固定されたデータ値を表します。たとえば、'JACK'、'BLUE ISLAND'および'101'はすべてテキスト・リテラルであり、5001は数値リテラルです。

Oracle CEPでは、Oracle CQL文の次の種類のリテラルがサポートされています。

- テキスト・リテラル

- 数値リテラル

- 日時リテラル

- 期間リテラル

2.3.1 テキスト・リテラル

このリファレンスの他の部分で説明している式、条件、Oracle CQL関数およびOracle CQL文の構文でconst_string、quoted_string_double_quotesまたはquoted_string_single_quotesと示されている箇所では常にテキスト・リテラルの表記で値を指定します。このリファレンスでは、テキスト・リテラル、文字リテラルおよび文字列という用語を区別なく使用しています。

テキスト・リテラルは、Oracle CEPでスキーマ・オブジェクト名と区別されるように、一重引用符または二重引用符で囲みます。

一重引用符(')または二重引用符(")を使用できます。通常は、二重引用符を使用します。ただし、特定の式、条件、関数および文では、このリファレンスの他の部分で指定されている構文に従って、quoted_string_double_quotesまたはquoted_string_single_quotesのいずれかの引用符を使用する必要があります。

構文で単にconst_stringと示されている場合は、一重引用符または二重引用符のどちらでも使用できます。

構文でcharという用語が示されている場合は、テキスト・リテラルを指定するか、または文字データに解決される別の式を指定できます。構文でcharと示されている場所では、一重引用符は使用しません。

Oracle CEPではJavaローカリゼーションがサポートされています。Javaロケールで指定された文字セットのテキスト・リテラルを指定できます。

詳細は、以下を参照してください。

- 1.2.1項「表記規則」

- 2.8項「スキーマ・オブジェクト名と修飾子」

- const_string::=

2.3.2 数値リテラル

固定長の数値または浮動小数点数値を指定する場合は、数値リテラルの表記を使用します。

2.3.2.1 整数リテラル

このリファレンスの他の部分で説明している式、条件、Oracle CQL関数、およびOracle CQL文でintegerと示されている箇所では常に整数表記を使用して整数を指定する必要があります。

integerの構文は次のとおりです。

integer::=

digitは0、1、2、3、4、5、6、7、8、9のいずれかです。

整数は最大32桁の精度を格納できます。

次に、有効な整数を示します。

7
+255

2.3.2.2 浮動小数点リテラル

このリファレンスの他の部分で説明している式、条件、Oracle CQL関数およびOracle CQL文でnumberまたはnと示されている箇所では、常に数または浮動小数点数の表記を使用して値を指定する必要があります。

numberの構文は次のとおりです。

number::=

説明:

- +は正、-は負の値を示します。符号を省略すると、デフォルトで正の値になります。

- digitは0、1、2、3、4、5、6、7、8、9のいずれかです。

- fまたはFは数値がFLOAT型の64ビット・バイナリ浮動小数点数であることを示します。

- dまたはDは数値がDOUBLE型の64ビット・バイナリ浮動小数点数であることを示します。
fまたはFおよびdまたはDを省略すると、数値は型INTEGERになります。

接尾辞fまたはFおよびdまたはDは浮動小数点数リテラルでのみサポートされ、INTEGERに変換される文字列ではサポートされていません。たとえば、Oracle CEPでINTEGERが予期されている場合に文字列'9'が検出されると、文字列はJava Integer 9に変換されます。ただし、Oracle CEPで文字列'9f'が検出された場合は、変換が失敗しエラーが返されます。

INTEGER型の数は最大32桁の精度を格納できます。BIGINTまたはFLOATで提供される精度よりも高い精度をリテラルが必要とする場合、Oracle CEPでは値が切り詰められます。リテラルの範囲がBIGINTまたはFLOATでサポートされる範囲を超えた場合、Oracle CEPではエラーが発生します。

Javaロケールでピリオド(.)以外の小数点を使用している場合は、'text'表記を使用して数値リテラルを指定する必要があります。この場合、Oracle CEPではテキスト・リテラルが自動的に数値に変換されます。

注意:

この表記は、浮動小数点数リテラルでは使用できません。

たとえば、Javaロケールでカンマ(,)の小数点が指定されている場合は、次のように数値5.123を指定します。

'5,123'

次に、有効なNUMBERリテラルを示します。

25
+6.34
0.5
-1

次に、有効な浮動小数点数リテラルを示します。

25f
+6.34F
0.5d
-1D

2.3.3 日時リテラル

Oracle CEPでは、日時データ型TIMESTAMPがサポートされています。

日時リテラルは64バイトを超えることはできません。

すべての日時リテラルは、Oracle CQLでサポートされるjava.text.SimpleDateFormat書式モデルのいずれかに準拠している必要があります。詳細は、2.4.2項「日時書式モデル」を参照してください。

現在、SimpleDateFormatクラスではxsd:dateTimeがサポートされていません。このため、Oracle CQLではこの型を使用するXML要素または属性がサポートされていません。

たとえば、XMLイベントが例2-6のようなXSDを使用する場合、Oracle CQLではMyTimestamp要素を解析できません。

例2-6 無効なイベントXSD: xsd:dateTimeがサポートされていない

<xsd:element name="ComplexTypeBody">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MyTimestamp" type="xsd:dateTime"/>
<xsd:element name="ElementKind" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="node" type="SimpleType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

XSDを定義してxsd:dateTimeをxsd:stringで置き換えることをお薦めします(例2-7を参照)。

例2-7 有効なイベントXSD: xsd:dateTimeのかわりにxsd:stringを使用する

<xsd:element name="ComplexTypeBody">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MyTimestamp" type="xsd:string"/>
<xsd:element name="ElementKind" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="node" type="SimpleType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

例2-7のXSDを使用すると、Oracle CQLでは、Timestamp要素のString値がOracle CQLでサポートされるjava.text.SimpleDateFormat書式モデルに準拠しているかぎり、例2-8に示すようなイベントを処理できます。詳細は、2.4.2項「日時書式モデル」を参照してください。

例2-8 XMLイベント・ペイロード

<ComplexTypeBody xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>
<MyTimestamp>2000-01-15T00:00:00</MyTimestamp>
<ElementKind>plus</ElementKind>
<name>complexEvent</name>
<node>
<type>complexNode</type>
<number>1</number>
</node>
</ComplexTypeBody>

Oracle CQLでのXMLの使用の詳細は、「SQL/XML (SQLX)」を参照してください。

2.3.4 期間リテラル

期間リテラルは期間を指定します。Oracle CEPでは期間リテラルDAY TO SECONDがサポートされています。このリテラルには先頭フィールドが含まれ、末尾フィールドを含めることができます。先頭フィールドは、測定する日付または時間の基本単位を定義します。末尾フィールドは、該当する基本単位の最小の増分を定義します。部分範囲(SECONDやMINUTE to SECONDなど)はサポートされていません。

期間リテラルは64バイトを超えることはできません。

2.3.4.1 INTERVAL DAY TO SECOND

次の構文を使用して、DAY TO SECOND期間リテラルを指定します。

interval_value::=

const_stringは、適切な日時書式モデルに準拠するTIMESTAMP値です(2.4.2項「日時書式モデル」を参照)。

INTERVAL DAY TO SECONDリテラルの書式の例を示します。

期間リテラルの形式

解釈

INTERVAL '4 5:12:10.222' DAY TO SECOND(3)

4日、5時間、12分、10秒、222ミリ秒。

あるDAY TO SECOND期間リテラルを別のDAY TO SECONDリテラルと加算または減算したり、期間リテラルを比較したりできます(例2-9を参照)。この例で、ストリームtkdata2_SIn1のスキーマは(c1 integer, c2 interval)です。

例2-9 期間の比較

<query id="tkdata2_q295"><![CDATA
select * from tkdata2_SIn1 where (c2 + INTERVAL "2 1:03:45.10" DAY TO SECOND) > INTERVAL "6 12:23:45.10" DAY TO SECOND
]]></query>

2.4 書式モデル

書式モデルは、文字列に格納されている日時または数値データの形式を記述する文字リテラルです。文字列を日付または数値に変換する場合、Oracle CEPでの文字列の解釈のしかたは書式モデルによって決まります。Oracle CQL問合せに関連する次の書式モデルがあります。

- 数値書式モデル

- 日時書式モデル

2.4.1 数値書式モデル

次の関数で、数値書式モデルを使用できます。

- to_bigint関数でintデータ型の値をbigintデータ型に変換します。

- to_float関数でintまたはbigintデータ型の値をfloatデータ型に変換します。

2.4.2 日時書式モデル

Oracle CQLではjava.text.SimpleDateFormatが指定する書式モデルがサポートされています。

表2-4は、Oracle CQLがTIMESTAMPリテラルの解釈に使用するjava.text.SimpleDateFormatモデルを示しています。詳細は、2.3.3項「日時リテラル」を参照してください。

表2-4 日時書式モデル

書式モデル

例

MM/dd/yyyy HH:mm:ss Z

11/21/2005 11:14:23 -0800

MM/dd/yyyy HH:mm:ss z

11/21/2005 11:14:23 PST

MM/dd/yyyy HH:mm:ss

11/21/2005 11:14:23

MM-dd-yyyy HH:mm:ss

11-21-2005 11:14:23

dd-MMM-yy

15-DEC-01

yyyy-MM-dd'T'HH:mm:ss

2005-01-01T08:12:12

次の関数で、日時書式モデルを使用できます。

- to_timestamp: charデータ型の値をTIMESTAMPデータ型に変換します。

2.5 Null

列の行に値がない場合、その列はnullである、またはnullを含んでいると言います。主キー整合性制約によって制限されていない任意のデータ型のタプルでは、nullが含まれている場合があります。実際の値が不明な場合や、値が意味を持たない場合はnullを使用します。

Oracle CEPでは、長さ0の文字値がnullとして処理されます。ただし、数値0を表すのにnullを使用しないでください。この2つは等価ではありません。

注意:

現在、Oracle CEPでは長さ0の文字値がnullとして処理されます。ただし、将来のリリースではこの処理が変更される場合があるため、空の文字列をnullと同じように処理しないことをお薦めします。

nullを含む算術式は常にnullに評価されます。たとえば、10にnullを加算したものはnullです。実際、nullオペランドを指定すると、すべての演算子ではnullが返されます(連結を除く)。

詳細は、以下を参照してください。

- 「nvl」

- null_spec::=

2.5.1 Oracle CQL関数でのnull

null引数を指定すると、すべてのスカラ関数ではnullが返されます(nvlとconcatを除く)。nvl関数を使用すると、nullが発生した場合に値を返すことができます。たとえば、式NVL(commission_pct,0)は、commission_pctがnullの場合に0を返し、nullでない場合にcommission_pctの値を返します。

ほとんどの集計関数ではnullが無視されます。たとえば、1000、null、null、nullおよび2000の5つの値を平均する問合せがあるとします。このような問合せではnullが無視され、平均は(1000+2000)/2 = 1500のように計算されます。

2.5.2 比較条件でのNull

nullをテストするには、null比較条件のみを使用します(null_conditions::=を参照)。それ以外の条件をnullで使用すると、結果がnull値に依存し、結果がUNKNOWNになります。nullはデータがないことを表すため、任意の値または別のnullと等しいか等しくないかを比較できません。ただし、Oracle CEPではdecode式の評価時に2つのnullが等価であると見なされます。構文と追加情報については、decode::=を参照してください。

2.5.3 条件でのNull

UNKNOWNに評価される条件はFALSEとほぼ同様に動作します。たとえば、条件のWHERE句がUNKNOWNに評価されるSELECT文ではタプルが返されません。ただし、UNKNOWNに評価される条件は、UNKNOWN条件の評価でさらに操作を行う場合はUNKNOWNに評価されるのでFALSEとは異なります。このため、NOT FALSEはTRUEに評価されますが、NOT UNKNOWNはUNKNOWNに評価されます。

表2-5は、条件でnullを使用する場合の様々な評価の例を示しています。SELECT文のWHERE句でUNKNOWNに評価される条件を使用する場合、問合せで返される行はありません。

表2-5 Nullを使用する条件

条件

Aの値

評価

a IS NULL

10

FALSE

a IS NOT NULL

10

TRUE

a IS NULL

NULL

TRUE

a IS NOT NULL

NULL

FALSE

a = NULL

10

FALSE

a != NULL

10

FALSE

a = NULL

NULL

FALSE

a != NULL

NULL

FALSE

a = 10

NULL

FALSE

a != 10

NULL

FALSE

詳細は、6.6項「Null条件」を参照してください。

2.6 コメント

Oracle CQLではコメントはサポートされていません。

2.7 別名

Oracle CQLでは、問合せを簡易化して分かりやすくするために、別名(またはシノニム)を定義できます。

この項の内容は、次のとおりです。

- 2.7.1項「AS演算子を使用した別名の定義」

- 2.7.2項「Aliases要素を使用した別名の定義」

2.7.1 AS演算子を使用した別名の定義

AS演算子を使用すると、Oracle CQLで問合せ、リレーション、ストリームおよび問合せのSELECTリスト項目の別名を指定できます。

この項の内容は、次のとおりです。

- 2.7.1.1項「relation_variable句の別名」

- 2.7.1.2項「ウィンドウ演算子の別名」

詳細は、第18章「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

2.7.1.1 relation_variable句の別名

relation_variable句のAS演算子で別名を定義してselectリストの直前の式にラベルを付け、その名前で結果を参照できます。別名によって、問合せの期間中にselectリストの項目名が効率的に変更されます。別名は、ORDER BY句(18.2.9項「問合せ結果のソート」を参照)で使用できますが、問合せの他の句では使用できません。

例2-10は、SELECTリストのストリーム要素its.itemIdの別名badItemと、MATCH_RECOGNIZE句の別名itsを定義する方法を示しています。

例2-10 SELECT文でのAS演算子の使用

<query id="detectPerish"><![CDATA[
select its.itemId as badItem
from tkrfid_ItemTempStream MATCH_RECOGNIZE (
PARTITION BY itemId
MEASURES A.itemId as itemId
PATTERN (A B* C)
DEFINE
A  AS  (A.temp >= 25),
B  AS  ((B.temp >= 25) and (to_timestamp(B.element_time) - to_timestamp(A.element_time) < INTERVAL "0 00:00:05.00" DAY TO SECOND)),
C  AS  (to_timestamp(C.element_time) - to_timestamp(A.element_time) >= INTERVAL "0 00:00:05.00" DAY TO SECOND)
) as its
]]></query>

詳細は、18.2.1.3項「From句」を参照してください。

2.7.1.2 ウィンドウ演算子の別名

AS演算子で別名を定義して直前のウィンドウ演算子にラベルを付け、その名前で結果を参照できます。

ウィンドウ演算子の内部ではAS演算子を使用できませんが、ウィンドウ演算子の外部ではAS演算子を使用できます。

例2-11は、分割範囲のウィンドウ演算子の後で別名bidとaskを定義する方法を示しています。

例2-11 ウィンドウ演算子の後のAS演算子の使用

<query id="Rule1"><![CDATA[
SELECT
bid.id as correlationId
bid.cusip as cusip
max(bid.b0) as bid0
bid.srcid as bidSrcId,
bid.bq0 as bid0Qty,
min(ask.a0) as ask0,
ask.srcid as askSrcId,
ask.aq0 as ask0Qty
FROM
stream1[PARTITION by bid.cusip rows 100 range 4 hours] as bid,
stream2[PARTITION by ask.cusip rows 100 range 4 hours] as ask
GROUP BY
bid.id, bid.cusip, bid.srcid,bid.bq0, ask.srcid, ask.aq0
]]></query>

詳細は、1.1.3項「ストリームからリレーションへの演算子(ウィンドウ)」を参照してください。

2.7.2 Aliases要素を使用した別名の定義

別名はロケーションの透過性を提供するために必要です。aliases要素で別名を定義して、Oracle CQLの問合せやビューで使用できます。aliases要素は、プロセッサのコンポーネント構成ファイルで構成します(図2-0を参照)。

例2-12 プロセッサのコンポーネント構成ファイルのaliases要素

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application">
<processor>
<name>processor1</name>
<rules>
<query id="q1">
<![CDATA[
select str(msg) from cqlInStream [rows 2];
]]>
</query>
</rules>
<aliases>
<type-alias>
<source>str</source>
<target>java.lang.String </target>
</type-alias>
</aliases>
</processor>
</n1:config>

aliases要素の有効範囲は、aliases要素が属するプロセッサのrules要素で定義された問合せとビューです。

次の点に注意してください。

- 別名がすでに存在する場合、Oracle CEPで例外がスローされます。

- 問合せまたはビュー定義が別名を参照している場合、別名はすでに存在する必要があります。

この項の内容は、次のとおりです。

- 2.7.2.1項「Aliases要素を使用してデータ型の別名を定義する方法」

2.7.2.1 Aliases要素を使用してデータ型の別名を定義する方法

aliases要素の子要素type-aliasを使用して、データ型の別名を定義できます。任意の組込みまたはデータ・カートリッジ・データ型の別名を作成できます。

詳細は、2.1項「データ型」を参照してください。

aliases要素を使用してalias型を定義するには:

1. プロセッサのコンポーネント構成ファイルを編集します。

2. 例2-13に示すようにaliases要素を追加します。

例2-13 プロセッサへのaliases要素の追加

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application">
<processor>
<name>processor1</name>
<rules>
<query id="q1">
<![CDATA[
select str(msg) from cqlInStream [rows 2];
]]>
</query>
</rules>
<aliases>
</aliases>
</processor>
</n1:config>

3. 例2-14に示すように、aliases要素にtype-alias子要素を追加します。

例2-14 プロセッサへのalias型要素の追加

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application">
<processor>
<name>processor1</name>
<rules>
<query id="q1">
<![CDATA[
select str(msg) from cqlInStream [rows 2];
]]>
</query>
</rules>
<aliases>
<type-alias>
</type-alias>
</aliases>
</processor>
</n1:config>

4. 例2-15に示すように、type-alias要素にsourceおよびtarget子要素を追加します。

- sourceは別名を指定します。
任意の有効なスキーマ名を使用できます。詳細は、2.8項「スキーマ・オブジェクト名と修飾子」を参照してください。

- targetは、別名が参照するデータ型を指定します。
Oracle CQLデータ・カートリッジの型の場合は、完全修飾型名を使用します。詳細は、第14章「データ・カートリッジの概要」を参照してください。

例2-15 ソースおよびターゲット要素の追加

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application">
<processor>
<name>processor1</name>
<rules>
<query id="q1">
<![CDATA[
select str(msg) from cqlInStream [rows 2];
]]>
</query>
</rules>
<aliases>
<type-alias>
<source>str</source>
<target>java.lang.String</target>
</type-alias>
</aliases>
</processor>
</n1:config>

5. 問合せおよびビューで、このプロセッサに定義した別名を使用します。
別名は、参照するデータ型とまったく同じように使用できます。例2-16に示すように、別名を作成した型のメソッドおよびフィールドにアクセスできます。

例2-16 別名を作成した型のメソッドおよびフィールドへのアクセス

<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application">
<processor>
<name>processor1</name>
<rules>
<query id="q1">
<![CDATA[
select str(msg).length() from cqlInStream [rows 2];
]]>
</query>
</rules>
<aliases>
<type-alias>
<source>str</source>
<target>java.lang.String</target>
</type-alias>
</aliases>
</processor>
</n1:config>

2.8 スキーマ・オブジェクト名と修飾子

一部のスキーマ・オブジェクトは、ストリームまたはビューのストリーム要素、整合性制約、ストリーム、ビューおよびユーザー定義の関数などの、ユーザーが指定できる部分または指定する必要のある部分で構成されています。この項の内容は、次のとおりです。

- 2.8.1項「スキーマ・オブジェクトのネーミング・ルール」

- 2.8.2項「スキーマ・オブジェクトのネーミング・ガイドライン」

- 2.8.3項「スキーマ・オブジェクトのネーミング例」

詳細は、1.2.1項「表記規則」を参照してください。

2.8.1 スキーマ・オブジェクトのネーミング・ルール

Oracle CEPの各オブジェクトには名前があります。Oracle CQL文では、オブジェクト名は引用符なしの識別子で表します。つまり、なんらかの記号で囲まれていない識別子を使用します。

Oracle CEPオブジェクトの名前を指定する場合、引用符なしの識別子を使用する必要があります。

次に、識別子に適用されるルールのリストを示します。

- Oracle CEPの予約語は、識別子として使用できません。
Oracle CEPオブジェクトへのアクセスに使用するOracle製品によっては、製品固有の予約語により名前がさらに制限される可能性があります。

Oracle CQL言語には特殊な意味を持つ他の語が含まれています。これらの語は予約語ではありません。しかし、これらは内部的に特殊な方法で使用されます。このため、これらの語をオブジェクトやオブジェクトの各部分の名前として使用すると、Oracle CQL文が読みにくくなり、予期しない結果が生じることがあります。

詳細は、以下を参照してください。

- identifier::=

- 「unreserved_keyword」

- 「reserved_keyword」

- 異なるプラットフォームまたはオペレーティング・システム間で最適な互換性が提供されるため、スキーマ・オブジェクト名にASCII文字を使用することをお薦めします。

- 識別子は、データベース文字セットのアルファベット文字で開始する必要があります。

- 識別子にはJavaロケールの文字セットの英数字とアンダースコア(_)のみを使用できます。特に、スペース、ドット、スラッシュは使用できません。
詳細は、以下を参照してください。

- const_string::=

- identifier::=

- 通常、次のオブジェクトでは、アプリケーションで一意の名前を選択する必要があります。

- ストリーム

- 問合せ

- ビュー

- ユーザー定義関数

特に、問合せとビューに同じ名前を付けることはできません。

- 識別子名では大文字と小文字が区別されます。

- 同一のストリームまたはビューのストリーム要素には同じ名前を使用できません。ただし、異なるストリームまたはビューのストリーム要素には同じ名前を使用できます。

- 関数の引数の個数およびデータ型が異なる(つまり、シグネチャが固有である)場合は、関数に同じ名前を使用できます。引数の異なる同名の関数を複数作成することは、関数のオーバーロードと呼ばれます。
組込み関数と同じ名前とシグネチャを持つユーザー定義関数を登録または作成すると、ユーザー関数が組込み関数のシグネチャに取ってかわります。組込み関数と同じ名前とシグネチャを持つ関数を作成することは、関数のオーバーライドと呼ばれます。

組込み関数はパブリックですが、ユーザー定義関数は特定のスキーマに属しています。

詳細は、以下を参照してください。

- 第13章「ユーザー定義関数」

2.8.2 スキーマ・オブジェクトのネーミング・ガイドライン

次に、オブジェクトおよび各部分に名前を付ける場合のガイドラインを示します。

- 完全な、わかりやすい、発音可能な名前(またはよく知られた略語)を使用します。

- 一貫性のあるネーミング・ルールを使用します。

- ストリーム、ビュー、および問合せ間で同一のエンティティまたは属性を記述するには、同じ名前を使用します。

オブジェクトに名前を付ける場合、名前を短くして使いやすくするという目的と、名前をできるかぎり説明的にするという目的を両立させてください。Oracle CEPのオブジェクトは長期間にわたり多くのユーザーによって使用される可能性があるため、確信が持てない場合はより説明的な名前を選択してください。10年後のユーザーは、payment_due_dateではなくpmddという名前を持つストリーム要素の理解に苦しむ可能性があります。

一貫性のあるネーミング・ルールを使用すると、アプリケーションでの各ストリームの役割が理解しやすくなります。このようなルールとして、FINANCEアプリケーションに属するすべてのストリーム名をfin_で開始するなどがあります。

ストリーム間で同一の項目を記述するには、同じ名前を使用します。たとえば、employeesおよびdepartmentsストリームでは、どちらも部門番号のストリーム要素にdepartment_idという名前を付けます。

2.8.3 スキーマ・オブジェクトのネーミング例

次に、有効なスキーマ・オブジェクト名の例を示します。

last_name
horse
a_very_long_and_valid_name

これらの例はすべて2.8.1項「スキーマ・オブジェクトのネーミング・ルール」のルールに従っています。

3 疑似列

この章では、Oracle Continuous Query Language (Oracle CQL)の疑似列のリファレンスを提供します。疑似列は、問い合せることはできますが、イベントの作成元であるデータの一部ではありません。

- 3.1項「疑似列の概要」

- 3.2項「ELEMENT_TIME疑似列」

3.1 疑似列の概要

疑似列からの選択はできますが、値の変更はできません。疑似列は引数のない関数にも似ています(1.1.11項「関数」を参照)。

Oracle CQLでは、次の疑似列がサポートされています。

- 3.2項「ELEMENT_TIME疑似列」

3.2 ELEMENT_TIME疑似列

基本ストリームまたは派生したストリーム(ストリームに対して評価するビュー)の各ストリーム要素には、関連する要素時間があります。ELEMENT_TIME疑似列により、この時間がOracle CQLネイティブ・タイプbigintとして返されます。

注意:

ELEMENT_TIMEは、Oracle CQLリレーションのメンバーではサポートされません。詳細は、1.1.1項「ストリームとリレーション」を参照してください。

この項の内容は、次のとおりです。

- 3.2.1項「ELEMENT_TIME疑似列の値について」

- 3.2.2項「Oracle CQL問合せ内での_TIME疑似列の使用」

詳細は、以下を参照してください。

- pseudo_column::=

- "to_timestamp"

3.2.1 ELEMENT_TIME疑似列の値について

ELEMENT_TIME疑似列の値は、ストリーム要素のチャネルをシステム・スタンプ付きか、アプリケーション・スタンプ付きのいずれかとして構成するかにより異なります。

3.2.1.1 システム・タイムスタンプ付きストリームの場合のELEMENT_TIME

この場合、ストリーム要素の要素時間は、Oracle CEPシステムで、システム指定の時間の2つの値を除算し、経過した実時間とおおよそ一致する時間を計算することによって指定されます。

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のシステム・タイムスタンプ付きのチャネルに関する項を参照してください。

3.2.1.2 アプリケーション・タイムスタンプ付きストリームの場合のELEMENT_TIME

この場合は、関連する要素時間は、アプリケーションで、アプリケーション・アセンブリ・ファイルwlevs:expression要素を使用して、派生タイムスタンプ式を指定することにより指定されます。

Oracle CEPでは、この式の結果は次のように処理されます。

- 3.2.1.2.1項「intまたはbigintに対して評価を行う派生タイムスタンプ式」

- 3.2.1.2.2項「timestampに対して評価を行う派生タイムスタンプ式」

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のアプリケーション・タイムスタンプ付きのチャネルに関する項を参照してください。

3.2.1.2.1 intまたはbigintに対して評価を行う派生タイムスタンプ式

派生タイムスタンプ式が、Oracle CQLネイティブ・タイプintに対して評価を行う場合、対応するbigint値として結果が返されます。この式がOracle CQLネイティブ・タイプbigintに対して評価を行う場合は、その値がそのまま返されます。

3.2.1.2.2 timestampに対して評価を行う派生タイムスタンプ式

派生タイムスタンプ式がOracle CQLネイティブ・タイプtimestampに対して評価を行う場合は、この時間値をJanuary 1, 1970, 00:00:00 GMTなど、"Epoch"(エポック)と呼ばれる標準の基本時間以降のミリ秒として表すことにより、long値に変換されます。

3.2.2 Oracle CQL問合せ内での_TIME疑似列の使用

この項では、様々な問合せでELEMENT_TIMEを使用する方法を説明します。

- 3.2.2.1項「SELECTでのELEMENT_TIMEの使用」

- 3.2.2.2項「GROUP BYでのELEMENT_TIMEの使用」

- 3.2.2.3項「PATTERNでのELEMENT_TIMEの使用」

3.2.2.1 SELECTでの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-2 入力ストリーム

Timestamp   Tuple
8000       80
9000       90
13000       130
15000       150
23000       230
25000       250

例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.2項「GROUP BYでのELEMENT_TIMEの使用」に説明されているように、ビューを使用します。

3.2.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>

ビューV1の出力要素に関連付けられている要素時間は、出力イベントの属性maxTimeの値と同じである必要はありません。たとえば、ウィンドウがスライドし、queryEventChannel入力ストリームからの要素がそのウィンドウで期限切れとなった場合に、queryTextグループのqueryCountが変わり、出力となります。ただし、そのウィンドウに入る入力ストリームqueryEventChannelからの新しいイベントがないので、そのウィンドウ内のすべてのイベント間のmaxTimeは変わらず、この出力イベントのmaxTime属性の値は、以前の出力イベントのこの属性値と同じになります。

ただし、出力イベントのELEMENT_TIMEは、出力イベントのELEMENT_TIMEは出力イベントの"maxTime"属性の値とは異なるなど、入力ストリームからの最新イベントとは異なり、イベントがウィンドウで期限切れとなった瞬間と同じになります。

ビューV1の出力イベントのELEMENT_TIMEを選択するには、例3-6に示すように問合せを作成します。

例3-6 問合せ

<query id="Q1"><![CDATA[
SELECT
queryText,
queryCount,
ELEMENT_TIME as eventTime
FROM
V1
]]></query>

3.2.2.3 PATTERNでのELEMENT_TIMEの使用

例3-7は、pattern問合せでELEMENT_TIME疑似列を使用する方法を示します。Nth.statusの値が>= F.statusで、そのタプルのNth.ELEMENT_TIME値と最後にFに一致したタプルとの差がjava.lang.Math.Bigint(Long)として指定された間隔に満たない場合、タプルまたはイベントは相関変数Nthに一致します。

例3-7 PatternでのELEMENT_TIME疑似列

...
PATTERN (F Nth+? L)
DEFINE
Nth AS
Nth.status >= F.status
AND
Nth.ELEMENT_TIME - F.ELEMENT_TIME < 10000000000L,
L AS
L.status >= F.status
AND
count(Nth.*) = 3
AND L.ELEMENT_TIME - F.ELEMENT_TIME < 10000000000L
...

4 演算子

この章では、Oracle Continuous Query Language (Oracle CQL)の演算子のリファレンスを提供します。演算子は、データ項目を操作して結果を返します。構文上、演算子はオペランドの前後、または2つのオペランドの間に置かれます。

- 4.1項「演算子の概要」

4.1 演算子の概要

演算子は、オペランドまたは引数と呼ばれる個々のデータ項目を操作します。演算子は特殊文字またはキーワードで表します。たとえば、乗算演算子はアスタリスク(*)で表します。

Oracle CQLには次の演算子が用意されています。

- 「算術演算子」

- 「連結演算子」

- 「二者択一演算子」

- 「範囲ベースのストリームからリレーションへのウィンドウ演算子」

- 「タプルベースのストリームからリレーションへのウィンドウ演算子」

- 「分割されたストリームからリレーションへのウィンドウ演算子」

- 「リレーションからストリームへのIStream演算子」

- 「リレーションからストリームへのDStream演算子」

- 「リレーションからストリームへのRStream演算子」

4.1.1 単項演算子と二項演算子について

演算子は通常、次の2つに分類されます。

- 単項: 単項演算子は1つのオペランドのみを操作します。単項演算子は通常、オペランドとともに次の形式で使用します。

operator operand

- バイナリ: 二項演算子は2つのオペランドを操作します。二項演算子は通常、オペランドとともに次の形式で使用します。

operand1 operator operand2

特殊な形式を持つ他の演算子では3つ以上のオペランドを使用できます。オペランドにnullが指定された場合、結果は常にnullになります。この規則に従わない唯一の演算子は、連結(||)です。

4.1.2 演算子の優先順位について

優先順位とは、Oracle CEPによって同一の式の異なる演算子が評価される順序です。複数の演算子を含む式を評価する場合、Oracle CEPでは優先順位の高い演算子が優先順位の低い演算子よりも先に評価されます。優先順位の等しい演算子は式の左から右に評価されます。

表4-1は、Oracle CQL演算子の優先順位レベルを高い順に示しています。同じ行にある演算子の優先順位は同じです。

表4-1 Oracle CQL演算子の優先順位

演算子

演算

+, -(単項演算子)

同一、否定

*, /

乗算、除算

+, -(二項演算子), ||

加算、減算、連結

Oracle CQL条件はOracle CQL演算子の後に評価されます。

第6章「条件」を参照

優先順位の例 次の例では、乗算の優先順位が加算よりも高いため、先に2と3の乗算が行われ、その結果が1に加算されます。

1+2*3

式の中でカッコを使用すると、演算子の優先順位をオーバーライドできます。カッコ内の式がカッコ外の式よりも先に評価されます。

算術演算子

表4-2は、Oracle CEPでサポートされる算術演算子を示しています。算術演算子を1つまたは2つの引数とともに使用して、数値を否定、加算、減算、乗算および除算できます。これらの演算子の一部は日時と期間の算術演算でも使用されます。演算子の引数は、数値データ型または数値データ型に暗黙的に変換される任意のデータ型に解決される必要があります。

特定のケースでは、Oracle CEPによって、引数が演算に必要なデータ型に変換されます。たとえば、整数と浮動小数点数を加算する場合は、整数の引数が浮動小数点数に変換されます。結果の式のデータ型は浮動小数点数です。詳細は、「暗黙的なデータ型変換」を参照してください。

表4-2 算術演算子

演算子

目的

例

+ -

正または負の式を表す場合は単項演算子です。

<query id="q1"><![CDATA[
select * from orderitemsstream
where quantity = -1
]]></query>

+ -

加算または減算の場合は二項演算子です。

<query id="q1"><![CDATA[
select hire_date
from employees
where sysdate - hire_date
> 365
]]></query>

* /

乗算、除算。これらは二項演算子です。

<query id="q1"><![CDATA[
select hire_date
from employees
where bonus > salary * 1.1
]]></query>

二重否定または負の値の減算を表す場合に、連続する2つのマイナス記号(--)を算術式で使用しないでください。スペースまたはカッコを使用して、連続するマイナス記号を区切る必要があります。

Oracle CEPでは、数値リテラル、日時リテラル、期間リテラルを使用した算術演算がサポートされています。

詳細は、以下を参照してください。

- 「数値リテラル」

- 「日時リテラル」

- 「期間リテラル」

連結演算子

連結演算子は文字列を操作します。表4-3は連結演算子を示しています。

表4-3 連結演算子

演算子

目的

例

||

文字列を連結します。

<query id="q263"><![CDATA[
select length(c2 || c2) + 1 from S10 where length(c2) = 2
]]></query>

2つの文字列を連結した結果は、別の文字列になります。文字列のデータ型が両方ともCHARの場合、結果のデータ型はCHARであり、2000字に制限されます。文字列のデータ型にかかわらず、連結では文字列末尾の空白が維持されます。

Oracle CEPでは、長さ0の文字列はnullとして扱われますが、長さ0の文字列と別のオペランドとの連結の結果は常にその別のオペランドになるため、結果がnullになるのは2つのnull文字列が連結された場合にかぎられます。ただし、この結果はOracle CEPの将来のバージョンでも同じであるとはかぎりません。nullになる可能性のある式を連結する場合は、NVL関数を使用してその式を長さ0の文字列に明示的に変換してください。

関連項目:

- 2.1項「データ型」

- 「concat」

- 「xmlconcat」

- 「nvl」

例4-1に、連結演算子を使用して文字列「xyz」をselect文のc2の値に付加する方法を示します。

例4-1 連結演算子(||)

<query id="q264"><![CDATA[
select c2 || "xyz" from S10
]]></query>

二者択一演算子

二者択一演算子を使用して、PATTERN句の意味を調整できます。表4-4は、連結演算子を示しています。

表4-4 二者択一演算子

演算子

目的

例

|

他の相関変数の前にあるものではなく、1つか、もう1つのいずれかの相関変数を意味するように、PATTERN句の意味を変更します。

<query id="q263"><![CDATA[
select T.p1, T.p2, T.p3 from S MATCH_RECOGNIZE(
MEASURES
A.ELEMENT_TIME as p1,
B.ELEMENT_TIME as p2
B.c2 as p3
PATTERN (A+ | B+)
DEFINE
A as A.c1 = 10,
B as B.c1 = 20
) as T
]]></query>

二者択一演算子は、PATTERN句内のみに適用可能です。

例4-2に、二者択一演算子を使用して、PATTERN句が「1回以上のAの後にBが1回以上、またはCが1回以上、いずれか先に来る方が続く」という意味になるように定義する方法を示します。

例4-2 二者択一演算子(|)

<query id="q264"><![CDATA[
select T.p1, T.p2, T.p3 from S MATCH_RECOGNIZE(
MEASURES
A.ELEMENT_TIME as p1,
B.ELEMENT_TIME as p2
B.c2 as p3
PATTERN (A+ (B+ | C+))
DEFINE
A as A.c1 = 10,
B as B.c1 = 20
C as C.c1 = 30
) as T
]]></query>

詳細は、19.3.2項「PATTERN句内でのグループ化および二者択一」を参照してください。

範囲ベースのストリームからリレーションへのウィンドウ演算子

Oracle CQLでは、次の範囲ベースのストリームからリレーションへのウィンドウ演算子がサポートされています。

window_type_range::=

(time_spec::=)

- S[now]

- S[range T]

- S[range T1 slide T2]

- S[range unbounded]

- S[range C on E]

詳細は、以下を参照してください。

- 「Query」

- 「ストリームからリレーションへの演算子(ウィンドウ)」

- 2.7.1.2項「ウィンドウ演算子の別名」

S[now]

この時間ベースの範囲ウィンドウでは瞬間的なリレーションが出力されます。このため、時間tのnowウィンドウの出力は、その瞬間tに到着したすべてのタプルになります。Oracle CEPの時間の最小単位はナノ秒であるため、これらのすべてのタプルは1ナノ秒後に期限切れになります。

例については、「S [now]の例」を参照してください。

例

S[now]の例

例4-3の問合せq1と例4-4のデータ・ストリームSがあるとします。タイムスタンプはナノ秒(1 sec = 10^9 nanoseconds)で示されています。例4-5は、時間5000 msに問合せで返されるリレーションを示します。時間5002 msには空のリレーションが返されます。

例4-3 S [now]の問合せ

<query id="q1"><![CDATA[
SELECT * FROM S [now]
]]></query>

例4-4 S [now]のストリーム入力

Timestamp         Tuple
1000000000      10,0.1
1002000000      15,0.14
5000000000      33,4.4
5000000000      23,56.33
10000000000      34,4.4
200000000000      20,0.2
209000000000      45,23.44
400000000000      30,0.3
h 800000000000

例4-5 S [now]の時間5000000000 nsのリレーション出力

Timestamp   Tuple Kind  Tuple
5000000000  +           33,4.4
5000000000  +           23,56.33
5000000001  -           33,4.4
5000000001  -           23,56.33

S[range T]

この時間ベースの範囲ウィンドウでは、サイズTの時間単位の間隔をスライドさせ、並べられたストリームの最新部分を取得することで、時間の経過に沿った出力リレーションが定義されます。

例については、「S [range T]の例」を参照してください。

例

S [range T]の例

例4-6の問合せq1があるとします。例4-7のデータ・ストリームSがある場合に、例4-8のリレーションが問合せで返されます。デフォルトでは、範囲の時間単位はsecondであるため(time_spec::=を参照)、S[range 1]はS[range 1 second]と同等です。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。最初の1000 msの間隔に存在している要素、つまりタプル(10,0.1)がウィンドウに入ります。時間1002 msには、タプル(15,0.14)がウィンドウに入ります。時間2000 msには、この間隔よりも長い間ウィンドウに留まっていたタプル、つまりタプル(10,0.1)がリレーションから削除の対象になります。この時間、タプル(15,0.14)はまだリレーションに含まれます。時間2002 msには、タプル(15,0.14)が、ウィンドウに留まっていた期間がその時点で1000 msを超えたため、削除の対象になります。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

例4-6 S [range T]の問合せ

<query id="q1"><![CDATA[
SELECT * FROM S [range 1]
]]></query>

例4-7 S [range T]のストリーム入力

Timestamp   Tuple
1000   10,0.1
1002   15,0.14
200000   20,0.2
400000   30,0.3
h 800000
100000000   40,4.04
h 200000000

例4-8 S [range T]のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:  +           10,0.1
1002:  +           15,0.14
2000:  -           10,0.1
2002:  -           15,0.14
200000:  +           20,0.2
201000:  -           20,0.2
400000:  +           30,0.3
401000:  -           30,0.3
100000000:  +           40,4.04
100001000:  -           40,4.04

S[range T1 slide T2]

この時間ベースの範囲ウィンドウでは、過去のタプルを維持する必要のある期間(範囲)と、タプルの出力を表示する頻度(スライド)を指定できます。そのため、2つのタプルが期間n*T2と(n+1)*T2の間に到着した場合、これらは(n+1)*T2の時点でのみ見えるようになり(ウィンドウに入り)、(n+1)*T2+T1の時点でウィンドウから期限切れになります。

例については、「S [range T1 slide T2]の例」を参照してください。

例

S [range T1 slide T2]の例

例4-9の問合せq1があるとします。例4-10のデータ・ストリームSがある場合に、例4-11のリレーションが問合せで返されます。デフォルトでは、範囲の時間単位はsecondであるため(time_spec::=を参照)、S[range 10 slide 5]はS[Range 10 seconds slide 5 seconds]と同等です。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。スライド値は5 secであり、これはユーザーが5 secごとに出力の表示を確認することを意味するため、1000、1002および5000に到着したすべてのタプルは5000の時点でウィンドウに入ります。これらのタプルは5 sec=5000 msにウィンドウに入りますが、範囲値は10 sec = 10000 msであるため、15000 msに期限切れになります。

例4-9 S [range T1 slide T2]の問合せ

<query id="q1"><![CDATA[
SELECT * FROM S [range 10 slide 5]
]]></query>

例4-10 S [range T1 slide T2]のストリーム入力

Timestamp   Tuple
1000      10,0.1
1002      15,0.14
5000      33,4.4
8000      23,56.33
10000     34,4.4
200000      20,0.2
209000      45,23.44
400000      30,0.3
h 800000

例4-11 S [range T1 slide T2]のリレーション出力

Timestamp   Tuple Kind  Tuple
5000:     +           10,0.1
5000:     +           15,0.14
5000:     +           33,4.4
10000:     +           23,56.33
10000:     +           34,4.4
15000:     -           10,0.1
15000:     -           15,0.14
15000:     -           33,4.4
20000:     -           23,56.33
20000:     -           34,44.4
200000:     +           20,0.2
210000:     -           20,0.2
210000:     +           45,23.44
220000:     -           45,23.44
400000:     +           30,0.3
410000:     -           30,0.3

S[range unbounded]

この時間ベースの範囲ウィンドウでは、T = infinityである場合に、時間tのリレーションが時間tまでのSのすべての要素から取得されたタプルで構成されるように、出力リレーションが定義されます。要素はウィンドウ内で無限に維持されます。

例については、「S [range unbounded]の例」を参照してください。

例

S [range unbounded]の例

例4-12の問合せq1と例4-13のデータ・ストリームSがあるとします。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。要素は到着した時点でリレーションに挿入されます。どの要素も削除されません。例4-14は時間5000 msに問合せで返されるリレーションを示し、例4-15は時間205000 msに問合せで返されるリレーションを示します。

例4-12 S [range unbounded]の問合せ

<query id="q1"><![CDATA[
SELECT * FROM S [range unbounded]
]]></query>

例4-13 S [range unbounded]のストリーム入力

Timestamp   Tuple
1000      10,0.1
1002      15,0.14
5000      33,4.4
8000      23,56.33
10000      34,4.4
200000      20,0.2
209000      45,23.44
400000      30,0.3
h 800000

例4-14 S [range unbounded]の時間5000 msのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:     +           10,0.1
1002:     +           15,0.14
5000:     +           33,4.4

例4-15 S [range unbounded]の時間205000 msのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:     +           10,0.1
1002:     +           15,0.14
5000:     +           33,4.4
8000:     +           23,56.33
10000:     +           34,4.4
200000:     +           20,0.2

S[range C on E]

この定数値ベースの範囲ウィンドウでは、ストリーム要素Eの値の差がC未満のタプルから成る、識別子Eに基づいて並べられたストリームの最新部分を取得することで、出力リレーションが定義されます。ストリーム要素Eの値とリレーションの任意のタプルの値の差がC以上の場合、タプルは削除の対象になります。

例については、次の項を参照してください。

- 「S [range C on E]の例: 定数値」

- 「S [range C on E]の例: INTERVALとTIMESTAMP」

例

S [range C on E]の例: 定数値

例4-16の問合せtkdata56_q0と例4-17のデータ・ストリームtkdata56_S0があるとします。ストリームtkdata56_S0のスキーマは(c1 integer, c2 float)です。例4-18は、問合せで返されるリレーションを示します。この例では、時間200000の出力リレーションには次のタプルが含まれています: (5,0.1)、(8,0.14)、(10,0.2)。これらの各タプルのc1値の差は10未満です。時間250000にタプル(15,0.2)が追加されると、タプル(5,0.1)は差が15 - 5 = 10であり10未満でないため、削除対象になります。15 - 8 = 7は10未満であるため、タプル(8,0.14)は留まります。同様に、15 - 10 = 5も10未満であるため、タプル(10,0.2)は留まります。時間300000にタプル(18,0.22)が追加されると、タプル(8,0.14)は差が18 - 8 = 10であり10未満でないため、削除対象になります。

例4-16 S [range C on E]定数値: 問合せ

<query id="tkdata56_q0"><![CDATA[
select * from tkdata56_S0 [range 10 on c1]
]]></query>

例4-17 S [range C on E]定数値: ストリーム入力

Timestamp   Tuple
100000     5, 0.1
150000     8, 0.14
200000     10, 0.2
250000     15, 0.2
300000     18, 0.22
350000     20, 0.25
400000     30, 0.3
600000     40, 0.4
650000     45, 0.5
700000     50, 0.6
1000000     58, 4.04

例4-18 S [range C on E]定数値: リレーション出力

Timestamp   Tuple Kind  Tuple
100000:    +           5,0.1
150000:    +           8,0.14
200000:    +           10,0.2
250000:    -           5,0.1
250000:    +           15,0.2
300000:    -           8,0.14
300000:    +           18,0.22
350000:    -           10,0.2
350000:    +           20,0.25
400000:    -           15,0.2
400000:    -           18,0.22
400000:    -           20,0.25
400000:    +           30,0.3
600000:    -           30,0.3
600000:    +           40,0.4
650000:    +           45,0.5
700000:    -           40,0.4
700000:    +           50,0.6
1000000:    -           45,0.5
1000000:    +           58,4.04

S [range C on E]の例: INTERVALとTIMESTAMP

同様に、S[range C on ID]ウィンドウではINTERVALとTIMESTAMPを使用できます。例4-19の問合せtkdata56_q2と例4-20のデータ・ストリームtkdata56_S1があるとします。ストリームtkdata56_S1のスキーマは(c1 timestamp, c2 double)です。例4-21は、問合せで返されるリレーションを示します。

例4-19 S [range C on E] INTERVAL値: 問合せ

<query id="tkdata56_q2"><![CDATA[
select * from tkdata56_S1 [range INTERVAL "530 0:0:0.0" DAY TO SECOND on c1]
]]></query>

例4-20 S [range C on E] INTERVAL値: ストリーム入力

Timestamp   Tuple
10        "08/07/2004 11:13:48", 11.13
2000        "08/07/2005 12:13:48", 12.15
3400        "08/07/2006 10:15:58", 22.25
4700        "08/07/2007 10:10:08", 32.35

例4-21 S [range C on E] INTERVAL値: リレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           08/07/2004 11:13:48,11.13
2000:       +           08/07/2005 12:13:48,12.15
3400:       -           08/07/2004 11:13:48,11.13
3400:       +           08/07/2006 10:15:58,22.25
4700:       -           08/07/2005 12:13:48,12.15
4700:       +           08/07/2007 10:10:08,32.35

タプルベースのストリームからリレーションへのウィンドウ演算子

Oracle CQLでは、次のタプルベースのストリームからリレーションへのウィンドウ演算子がサポートされています。

window_type_tuple::=

- S [rows N]

- S [rows N1 slide N2]

詳細は、以下を参照してください。

- 「範囲ベースのストリームからリレーションへのウィンドウ演算子」

- 「Query」

- 「ストリームからリレーションへの演算子(ウィンドウ)」

- 2.7.1.2項「ウィンドウ演算子の別名」

S [rows N]

タプルベースのウィンドウでは、並べられたストリームの最後のNタプルのウィンドウをスライドさせることで、時間の経過に沿った出力リレーションが定義されます。

S [rows N]の出力リレーションRの場合、時間tのリレーションは、大きいタイムスタンプ(<= t)を持つSのN個のタプル(または、tまでのSの長さが<= Nの場合はすべてのタプル)で構成されます。

同じタイムスタンプを持つ複数のタプルがある場合は、N個のタプルが返されることを保証するため、Oracle CEPによって確定的でない方法で1つのタプルが選択されます。このため、タプルベースのウィンドウはタイムスタンプが一意でないストリームには適していない場合があります。

デフォルトでは、スライドは1です。

例については、「S [rows N]の例」を参照してください。

例

S [rows N]の例

例4-22の問合せq1と例4-23のデータ・ストリームSがあるとします。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。要素はS [Range 1]の場合と同様に挿入および削除されます(「S [range T]の例」を参照)。

例4-24は、時間1002 msに問合せで返されるリレーションを示します。この時点のSの長さはrows値(3)以下であるため、その時点までに挿入されたSのすべてのタプル、つまりタプル(10,0.1)および(15,0.14)が問合せで返されます。

例4-25は、時間1006 msに問合せで返されるリレーションを示します。この時点のSの長さはrows値(3)を超えているため、1006 ms以下の大きいタイムスタンプを持つSの3つのタプル、つまりタプル(15,0.14)、(33,4.4)および(23,56.33)が問合せで返されます。

例4-26は、時間2000 msに問合せで返されるリレーションを示します。この時点で2000 ms以下の大きいタイムスタンプを持つSの3つのタプル、つまりタプル(45,23.44)、(30,0.3)および(17,1.3)が問合せで返されます。

例4-22 S [rows N]の問合せ

<query id="q1"><![CDATA[
SELECT * FROM S [rows 3]
]]></query>

例4-23 S [rows N]のストリーム入力

Timestamp    Tuple
1000         10,0.1
1002         15,0.14
1004         33,4.4
1006         23,56.33
1008         34,4.4
1010         20,0.2
1012         45,23.44
1014         30,0.3
2000         17,1.3

例4-24 S [rows N]の時間1003 msのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:         +       10,0.1
1002:         +       15,0.14

例4-25 S [rows N]の時間1007 msのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:         +       10,0.1
1002:         +       15,0.14
1004:         +       33,4.4
1006:         -       10,0.1
1006:         +       23,56.33

例4-26 S [rows N]の時間2001 msのリレーション出力

Timestamp   Tuple Kind  Tuple
1000          +       10,0.1
1002          +       15,0.14
1004          +       33,4.4
1006          -       10,0.1
1006          +       23,56.33
1008          -       15,0.14
1008          +       34,4.4
1008          -       33,4.4
1010          +       20,0.2
1010          -       23,56.33
1012          +       45,23.44
1012          -       34,4.4
1014          +       30,0.3
2000          -       20,0.2
2000          +       17,1.3

S [rows N1 slide N2]

タプルベースのウィンドウでは、並べられたストリームの最後のN1タプルのウィンドウをスライドさせることで、時間の経過に沿った出力リレーションが定義されます。

S [rows N1 slide N2]の出力リレーションRの場合、時間tのリレーションは、大きいタイムスタンプ(<= t)を持つSのN1個のタプル(または、tまでのSの長さが<= Nの場合はすべてのタプル)で構成されます。

同じタイムスタンプを持つ複数のタプルがある場合は、N個のタプルが返されることを保証するため、Oracle CEPによって確定的でない方法で1つのタプルが選択されます。このため、タプルベースのウィンドウはタイムスタンプが一意でないストリームには適していない場合があります。

整数のストリーム要素数としてスライドN2を構成できます。Oracle CEPではN2個の要素を受け取るまで、リレーションへの要素の追加が遅延されます。

例については、「S [rows N]の例」を参照してください。

例

S [rows N1 slide N2]の例

例4-27の問合せtkdata55_q0と例4-28のデータ・ストリームtkdata55_S55があるとします。ストリームtkdata55_S55のスキーマは(c1 integer, c2 float)です。例4-29は、出力リレーションを示します。

例4-29に示すとおり、時間100000では、タプル(20,0.1)のみがストリームに到着しているため、出力リレーションは空です。時間150000までに、slide値の指定する数(2)のタプルが到着します。この時点で、出力リレーションにはタプル(20,0.1)と(15,0.14)が含まれます。時間250000までに、さらにslide数のタプルが到着し、出力リレーションにはタプル(20,0.1)、(15,0.14)、(5,0.2)および(8,0.2)が含まれます。時間350000までに、さらにslide数のタプルが到着します。この時点で、最も古いタプル(20,0.1)は、rows値による制約を満たすために削除されます。つまり、出力リレーションには5以下の要素のみを含むことができるという制約です。この時点で、出力リレーションにはタプル(15,0.14)、(5,0.2)、(8,0.2)、(10,0.22)および(20,0.25)が含まれます。時間600000で、さらにslide数のタプルが到着します。この時点で、最も古いタプル(15,0.14)と(5,0.2)は、rows値の制約を満たすために削除されます。この時点で、出力リレーションにはタプル(8,0.2)、(10,0.22)、(20,0.25)、(30,0.3)および(40,0.4)が含まれます。

例4-27 S [rows N1 slide N2]の問合せ

<query id="tkdata55_q0"><![CDATA[
select * from tkdata55_S55 [rows 5 slide 2 ]
]]></query>

例4-28 S [rows N1 slide N2]のストリーム入力

Timestamp   Tuple
100000   20, 0.1
150000   15, 0.14
200000    5, 0.2
250000    8, 0.2
300000   10, 0.22
350000   20, 0.25
400000   30, 0.3
600000   40, 0.4
650000   45, 0.5
700000   50, 0.6
100000000    8, 4.04

例4-29 S [rows N1 slide N2]のリレーション出力

Timestamp   Tuple Kind  Tuple
150000:     +           20,0.1
150000:     +           15,0.14
250000:     +            5,0.2
250000:     +            8,0.2
350000:     -           20,0.1
350000:     +           10,0.22
350000:     +           20,0.25
600000:     -           15,0.14
600000:     -            5,0.2
600000:     +           30,0.3
600000:     +           40,0.4
700000:     -            8,0.2
700000:     -           10,0.22
700000:     +           45,0.5
700000:     +           50,0.6

分割されたストリームからリレーションへのウィンドウ演算子

Oracle CQLでは、次の分割されたストリームからリレーションへのウィンドウ演算子がサポートされています。

window_type_partition::=

(time_spec::=、non_mt_attr_list::=)

- S [partition by A1,..., Ak rows N]

- S [partition by A1,..., Ak rows N range T]

- S [partition by A1,..., Ak rows N range T1 slide T2]

詳細は、以下を参照してください。

- 「タプルベースのストリームからリレーションへのウィンドウ演算子」

- 「Query」

- 「ストリームからリレーションへの演算子(ウィンドウ)」

- 2.7.1.2項「ウィンドウ演算子の別名」

S [partition by A1,..., Ak rows N]

ストリームSに対するこの分割されたスライディング・ウィンドウでは、正の整数のタプル数Nとストリーム属性のサブセット{A1,... Ak}をパラメータとして受け取り、次のことを行います。

- 属性A1,... Akの同一性に基づいて、Sを異なるサブストリームに論理的に分割します(SQL GROUP BYと同様)。

- 各サブストリームで、サイズNのタプルベースのスライディング・ウィンドウを個別に計算します。

例については、「S[partition by A1, ..., Ak rows N]の例」を参照してください。

例

S[partition by A1, ..., Ak rows N]の例

例4-30の問合せqPart_row2と例4-31のデータ・ストリームSP1があるとします。ストリームSP1のスキーマは(c1 integer, name char(10))です。この問合せは、例4-32に示すリレーションを返します。デフォルトでは、範囲(およびスライド)は1秒です。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

例4-30 S[partition by A1, ..., Ak rows N]の問合せ

<query id="qPart_row2"><![CDATA[
select * from SP1 [partition by c1 rows 2]
]]></query>

例4-31 S[partition by A1, ..., Ak rows N]のストリーム入力

Timestamp   Tuple
1000        1,abc
1100        2,abc
1200        3,abc
2000        1,def
2100        2,def
2200        3,def
3000        1,ghi
3100        2,ghi
3200        3,ghi
h 3800
4000        1,jkl
4100        2,jkl
4200        3,jkl
5000        1,mno
5100        2,mno
5200        3,mno
h 12000
h 200000000

例4-32 S[partition by A1, ..., Ak rows N]のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           1,abc
1100:       +           2,abc
1200:       +           3,abc
2000:       +           1,def
2100:       +           2,def
2200:       +           3,def
3000:       -           1,abc
3000:       +           1,ghi
3100:       -           2,abc
3100:       +           2,ghi
3200:       -           3,abc
3200:       +           3,ghi
4000:       -           1,def
4000:       +           1,jkl
4100:       -           2,def
4100:       +           2,jkl
4200:       -           3,def
4200:       +           3,jkl
5000:       -           1,ghi
5000:       +           1,mno
5100:       -           2,ghi
5100:       +           2,mno
5200:       -           3,ghi
5200:       +           3,mno

S [partition by A1,..., Ak rows N range T]

ストリームSに対するこの分割されたスライディング・ウィンドウでは、正の整数のタプル数Nとストリーム属性のサブセット{A1,... Ak}をパラメータとして受け取り、次のことを行います。

- 属性A1,... Akの同一性に基づいて、Sを異なるサブストリームに論理的に分割します(SQL GROUP BYと同様)。

- 各サブストリームで、サイズNおよび範囲Tのタプルベースのスライディング・ウィンドウを個別に計算します。

例については、「S[partition by A1, ..., Ak rows N range T]の例」を参照してください。

例

S[partition by A1, ..., Ak rows N range T]の例

例4-33の問合せqPart_range2と例4-34のデータ・ストリームSP5があるとします。ストリームSP5のスキーマは(c1 integer, name char(10))です。この問合せは、例4-35に示すリレーションを返します。デフォルトでは、範囲の時間単位はsecondであるため(time_spec::=を参照)、range 2はrange 2 secondsと同等です。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。

例4-33 S[partition by A1, ..., Ak rows N range T]の問合せ

<query id="qPart_range2"><![CDATA[
select * from SP5 [partition by c1 rows 2 range 2]
]]></query>

例4-34 S[partition by A1, ..., Ak rows N range T]のストリーム入力

Timestamp   Tuple
1000        1,abc
2000        1,abc
3000        1,abc
4000        1,abc
5000        1,def
6000        1,xxx
h 200000000

例4-35 S[partition by A1, ..., Ak rows N range T]のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           1,abc
2000:       +           1,abc
3000:       -           1,abc
3000:       +           1,abc
4000:       -           1,abc
4000:       +           1,abc
5000:       -           1,abc
5000:       +           1,def
6000:       -           1,abc
6000:       +           1,xxx
7000:       -           1,def
8000:       -           1,xxx

S [partition by A1,..., Ak rows N range T1 slide T2]

ストリームSに対するこの分割されたスライディング・ウィンドウでは、正の整数のタプル数Nとストリーム属性のサブセット{A1,... Ak}をパラメータとして受け取り、次のことを行います。

- 属性A1,... Akの同一性に基づいて、Sを異なるサブストリームに論理的に分割します(SQL GROUP BYと同様)。

- 各サブストリームで、サイズN、範囲T1およびスライドT2のタプルベースのスライディング・ウィンドウを個別に計算します。

例については、「S[partition by A1, ..., Ak rows N]の例」を参照してください。

例

S[partition by A1, ..., Ak rows N range T1 slide T2]の例

例4-36の問合せqPart_rangeslideと例4-37のデータ・ストリームSP1があるとします。ストリームSP1のスキーマは(c1 integer, name char(10))です。この問合せは、例4-38に示すリレーションを返します。デフォルトでは、範囲とスライドの時間単位はsecondであるため(time_spec::=を参照)、range 1 slide 1はrange 1 second slide 1 secondと同等です。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。

例4-36 S[partition by A1, ..., Ak rows N range T1 slide T2]の問合せ

<query id="qPart_rangeslide"><![CDATA[
select * from SP1 [partition by c1 rows 1 range 1 slide 1]
]]></query>

例4-37 S[partition by A1, ..., Ak rows N range T1 slide T2]のストリーム入力

Timestamp   Tuple
1000        1,abc
1100        2,abc
1200        3,abc
2000        1,def
2100        2,def
2200        3,def
3000        1,ghi
3100        2,ghi
3200        3,ghi
h 3800
4000        1,jkl
4100        2,jkl
4200        3,jkl
5000        1,mno
5100        2,mno
5200        3,mno
h 12000
h 200000000

例4-38 S[partition by A1, ..., Ak rows N range T1 slide T2]のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           1,abc
2000:       +           2,abc
2000:       +           3,abc
2000:       -           1,abc
2000:       +           1,def
3000:       -           2,abc
3000:       +           2,def
3000:       -           3,abc
3000:       +           3,def
3000:       -           1,def
3000:       +           1,ghi
4000:       -           2,def
4000:       +           2,ghi
4000:       -           3,def
4000:       +           3,ghi
4000:       -           1,ghi
4000:       +           1,jkl
5000:       -           2,ghi
5000:       +           2,jkl
5000:       -           3,ghi
5000:       +           3,jkl
5000:       -           1,jkl
5000:       +           1,mno
6000:       -           2,jkl
6000:       +           2,mno
6000:       -           3,jkl
6000:       +           3,mno
6000:       -           1,mno
7000:       -           2,mno
7000:       -           3,mno

リレーションからストリームへのIStream演算子

タプルsがR(t) - R(t-1)に含まれている場合は常に、つまり、tの時点でsがRに挿入された場合は常に、リレーションRに適用されたIstream(「挿入ストリーム」を意味する)には(s,t)が含まれます。同じタイムスタンプでタプルの挿入と削除の両方が発生した場合、Istreamでは挿入が出力されません。

例4-39では、selectによってフィルタ条件(viewq3.ACCT_INTRL_ID = ValidLoopCashForeignTxn.ACCT_INTRL_ID)を満たすタプルのストリームが出力されます。nowウィンドウによってviewq3がリレーションに変換され、これはフィルタ条件によってリレーションとして維持されます。リレーションからストリームへのIStream演算子によって、フィルタ出力がストリームに変換されます。

例4-39 IStream

<query id="q3Txns"><![CDATA[
Istream(
select
TxnId,
ValidLoopCashForeignTxn.ACCT_INTRL_ID,
TRXN_BASE_AM,
ADDR_CNTRY_CD,
TRXN_LOC_ADDR_SEQ_ID
from
viewq3[NOW],
ValidLoopCashForeignTxn
where
viewq3.ACCT_INTRL_ID = ValidLoopCashForeignTxn.ACCT_INTRL_ID
)
]]></query>

Istream演算子とDIFFERENCES USING句を組み合せて、Istreamの差分を簡単に検出できます。

詳細は、以下を参照してください。

- idstream_clause::=

- 18.2.10項「問合せ結果の差分の検出」

リレーションからストリームへのDStream演算子

タプルsがR(t-1) - R(t)に含まれている場合は常に、つまり、tの時点でsがRから削除された場合は常に、リレーションRに適用されたDstream(「削除ストリーム」を意味する)には(s,t)が含まれます。

例4-40では、問合せによってストリームSの入力が10分遅延されます。ストリームSはrangeウィンドウ演算子によってリレーションに変換されますが、Dstreamによってストリームに戻されます。

例4-40 DStream

<query id="BBAQuery"><![CDATA[
Dstream(select * from S[range 10 minutes])
]]></query>

時間の最小単位を分と想定します。表4-5は、次の入力ストリームTradeInputsの入力について、rangeウィンドウ演算子のリレーション(S[Range 10 minutes])とDstreamのストリームのコンテンツを示しています。

Time    Value
05      1,1
25      2,2
50      3,3

表4-5 DStreamの出力例

入力ストリームS

リレーション出力

リレーションのコンテンツ

DStream出力

05    1,1

+ 05    1,1

{1, 1}

- 15    1,1

{}

+15    1,1

25    2,2

+ 25    2,2

{2,2}

- 35    2,2

{}

+35    2,2

50    3,3

+ 50    3,3

{3,3}

- 60    3,3

{}

+60    3,3

時間15、35および60の時点で、リレーションは空{}です(空のセット)。

Dstream演算子とDIFFERENCES USING句を組み合せて、Dstreamの差分を簡単に検出できます。

詳細は、以下を参照してください。

- idstream_clause::=

- 18.2.10項「問合せ結果の差分の検出」

リレーションからストリームへのRStream演算子

Rstream演算子は、入力リレーションの現在の状態全体を維持し、各時間ステップごとにすべてのタプルを挿入として出力します。

Rstreamでは各瞬間のリレーション全体の状態が出力されるため、リレーション・セットが非常に小さい場合を除き、コストがかかる可能性があります。

例4-41では、Rstreamによって時間Nowのwhere句でフィルタ処理されたリレーション全体の状態が出力されます。

例4-41 RStream

<query id="rstreamQuery"><![CDATA[
Rstream(
select
cars.car_id, SegToll.toll
from
CarSegEntryStr[now] as cars, SegToll
where (cars.exp_way = SegToll.exp_way and
cars.lane = SegToll.lane and
cars.dir = SegToll.dir and
cars.seg = SegToll.seg)
)
]]></query>

詳細は、idstream_clause::=を参照してください。

5 式

この章では、Oracle Continuous Query Language (Oracle CQL)の式のリファレンスを提供します。式は、1つ以上の値と1つ以上の演算の組合せであり、確定値を持つ定数、値に評価される関数、または値を格納する属性を含みます。

式はそれぞれのデータ型に割り当てられます。次の単純な式は4に評価され、データ型はNUMBER(構成要素と同一のデータ型)です。

2*2

次の式は、関数と演算子を使用するより複雑な式の例です。この式は現在の日付に7日を加算し、合計から時間の要素を削除し、結果をCHARデータ型に変換します。

TO_CHAR(TRUNC(SYSDATE+7))

5.1 式の概要

Oracle CEPでは、次の式が用意されています。

- 集計(distinct)式: 「aggr_distinct_expr」

- 集計式: 「aggr_expr」

- 算術式: 「arith_expr」

- 算術式リスト: 「arith_expr_list」

- Case式: 「case_expr」

- Decode式: 「decode」

- 関数式: 「func_expr」

- オブジェクト式: 「object_expr」

- 順序式: 「order_expr」

- XML集計式: 「xml_agg_expr」

- XML列属性値式: 「xmlcolattval_expr」

- XML要素式: 「xmlelement_expr」

- XMLフォレスト式: 「xmlforest_expr」

- XML解析式: 「xml_parse_expr」

次の場所で式を使用できます。

- SELECT文のselectリスト

- WHERE句およびHAVING句の条件

Oracle CEPではOracle CQL文の一部で式の形式の一部が使用できない場合があります。Oracle CQL文の式の制限の詳細は、第20章「Oracle CQL文」で個々のOracle CQL文を参照してください。

このリファレンスの他の部分で説明している条件、Oracle CQL関数、Oracle CQL文でexprと示されている箇所では、適切な式表記を使用する必要があります。それに続く項では、様々な式の例をあげて説明しています。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

aggr_distinct_expr

distinctを使用して集計の組込み関数を使用する場合は、aggr_distinct_expr集計式を使用します。distinctを使用せずに集計の組込み関数を使用する場合は、「aggr_expr」を参照してください。

aggr_distinct_expr::=

(arith_expr::=)

arith_distinct_exprは集計式の引数として指定できます。

aggr_distinct_exprは次のOracle CQL文で使用できます。

- arith_expr::=

詳細は、第9章「組込みの集計関数」を参照してください。

例

例5-2にCOUNT集計(Distinct)式の使用方法を示します。

例5-1 COUNTのaggr_distinct_expr

create view viewq2Cond1(ACCT_INTRL_ID, sumForeign, countForeign) as
select ACCT_INTRL_ID, sum(TRXN_BASE_AM), count(distinct ADDR_CNTRY_CD)
from ValidCashForeignTxn[range 48 hours]
group by ACCT_INTRL_ID
having ((sum(TRXN_BASE_AM) * 100) >= (1000 * 60) and
(count(distinct ADDR_CNTRY_CD >= 2)))

aggr_expr

集計の組込み関数を使用する場合は、aggr_expr集計式を使用します。distinctを使用して集計の組込み関数を使用する場合は、「aggr_distinct_expr」を参照してください。

aggr_expr::=

(arith_expr::=、identifier::=、attr::=、xml_agg_expr::=)

arith_exprは集計式の引数として指定できます。

count組込み集計関数は、表5-1でリストされているいずれかの値で構成される単一の引数を使用し、示されたintを返します。

表5-1 COUNT集計関数の戻り値

入力引数

戻り値

arith_expr

arith_exprがnullでない場合のタプルの数。

*

重複とnullを含む、すべてのタプルの数。

identifier.*

相関変数identifierと一致する、重複とnullを含む、すべてのタプルの数。

identifier.attr

attrがnullでない場合に、相関変数identifierと一致するタプルの数。

firstおよびlast集計組込み関数は、次のピリオド区切りの値から成る単一の引数を使用します。

- identifier1: DEFINE句で指定されたパターンの名前。

- identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

aggr_exprは次のOracle CQL文で使用できます。

- arith_expr::=

詳細は、以下を参照してください。

- 第9章「組込みの集計関数」

- 19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」

- 「first」

- 「last」

例

例5-2にCOUNT集計式の使用方法を示します。

例5-2 COUNTのaggr_expr

<view id="SegVol" schema="exp_way lane dir seg volume"><![CDATA[
select
exp_way,
lane,
dir,
seg,
count(*) as volume
from
CurCarSeg
group by
exp_way,
lane,
dir,
seg
having
count(*) > 50
]]></view>

arith_expr

ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して算術式を定義するには、arith_expr算術式を使用します。すべての一般的な算術演算子(+、-、*、/)および連結演算子(||)を使用できます。

arith_expr::=

(attr::=、const_value::=、func_expr::=、aggr_expr::=、aggr_distinct_expr::=、case_expr::=、decode::=、arith_expr::=)

arith_exprは次のOracle CQL文で使用できます。

- aggr_distinct_expr::=

- aggr_expr::=

- arith_expr::=

- case_expr::=

- searched_case::=

- simple_case::=

- condition::=

- between_condition::=

- non_mt_arg_list::=

- param_list

- measure_column::=

- projterm::=

詳細は、「算術演算子」を参照してください。

例

例5-3にarith_expr式の使用方法を示します。

例5-3 arith_expr

<view id="SegVol" schema="exp_way lane dir seg volume"><![CDATA[
select
exp_way,
speed * 1.5 as adjustedSpeed,
dir,
max(seg) as maxSeg,
count(*) as volume
from
CurCarSeg
having
adjustedSpeed > 50
]]></view>

arith_expr_list

ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して1つ以上の算術式を定義するには、arith_expr_list算術式リストを使用します。すべての一般的な算術演算子(+、-、*、/)および連結演算子(||)を使用できます。

arith_expr_list::=

(arith_expr::=)

arith_expr_listは次のOracle CQL文で使用できます。

- xmlelement_expr::=

詳細は、「算術演算子」を参照してください。

例

例5-4にarith_expr_list式の使用方法を示します。

例5-4 arith_expr_list

<query id="q1"><![CDATA[
select
XMLELEMENT("Emp", XMLELEMENT("Name", e.job_id||' '||e.last_name),            XMLELEMENT("Hiredate", e.hire_date)
)
from
tkdata51_S0 [range 1] as e
]]></query>

case_expr

複数の条件でストリーム要素を評価するには、case式case_exprを使用します。

case_expr::=

(searched_case_list::=、arith_expr::=、simple_case_list::=)

searched_case_list::=

(searched_case::=)

searched_case::=

(non_mt_cond_list::=、arith_expr::=)

simple_case_list::=

(simple_case::=)

simple_case::=

(arith_expr::=)

case_exprは算術式のDECODE句と同様です(「decode」を参照)。

searched_case句では、non_mt_cond_listがtrueに評価される場合、searched_case句によって算術式またはnullのいずれかが返されます。

simple_case句では、算術式がtrueである場合、simple_case句によって別の算術式またはnullのいずれかが返されます。

case_exprは次のOracle CQL文で使用できます。

- arith_expr::=

- opt_where_clause::=

- select_clause::=

例

この項では、case_exprの次の例について説明します。

- 「case_expr with SELECT *」

- 「case_expr with SELECT」

case_expr with SELECT *

例5-5の問合せq97と例5-6のデータ・ストリームS0があるとします。ストリームS1のスキーマは(c1 float, c2 integer)です。例5-7は、問合せで返されるリレーションを示します。

例5-5 CASE式: SELECT *の問合せ

<query id="q97"><![CDATA[
select * from S0
where
case
when c2 < 25 then c2+5
when c2 > 25 then c2+10
end > 25
]]></query>

例5-6 CASE式: SELECT *のストリーム入力

Timestamp   Tuple
1000    0.1,10
1002   0.14,15
200000    0.2,20
400000    0.3,30
500000    0.3,35
600000       ,35
h 800000
100000000   4.04,40
h 200000000

例5-7 CASE式: SELECT *のリレーション出力

Timestamp   Tuple Kind  Tuple
400000:+ 0.3,30
500000:+ 0.3,35
600000:+ ,35
100000000:+ 4.04,40

case_expr with SELECT

例5-8の問合せq96と、例5-9のS0および例5-10のS1というデータ・ストリームがあるとします。ストリームS0のスキーマは(c1 float, c2 integer)であり、ストリームS1のスキーマは(c1 float, c2 integer)です。例5-11は、問合せで返されるリレーションを示します。

例5-8 CASE式: SELECTの問合せ

<query id="q96"><![CDATA[
select
case to_float(S0.c2+10)
when (S1.c2*100)+10 then S0.c1+0.5
when (S1.c2*100)+11 then S0.c1
else S0.c1+0.3
end
from
S0[rows 100],
S1[rows 100]
]]></query>

例5-9 CASE式: SELECTのストリームS0入力

Timestamp   Tuple
1000    0.1,10
1002   0.14,15
200000    0.2,20
400000    0.3,30
500000    0.3,35
600000       ,35
h 800000
100000000   4.04,40
h 200000000

例5-10 CASE式: SELECTのストリームS1入力

Timestamp   Tuple
1000   10,0.1
1002   15,0.14
200000   20,0.2
300000     ,0.2
400000   30,0.3
100000000   40,4.04

例5-11 CASE式: SELECTのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:  +           0.6
1002:  +           0.44
1002:  +           0.4
1002:  +           0.14
200000:  +           0.5
200000:  +           0.5
200000:  +           0.4
200000:  +           0.44
200000:  +           0.7
300000:  +           0.4
300000:  +           0.44
300000:  +           0.7
400000:  +           0.6
400000:  +           0.6
400000:  +           0.6
400000:  +           0.6
400000:  +           0.4
400000:  +           0.44
400000:  +           0.5
400000:  +           0.8
500000:  +           0.6
500000:  +           0.6
500000:  +           0.6
500000:  +           0.6
500000:  +           0.6
600000:  +
600000:  +
600000:  +
600000:  +
600000:  +
100000000:  +           4.34
100000000:  +           4.34
100000000:  +           4.34
100000000:  +           4.34
100000000:  +           4.34
100000000:  +           0.4
100000000:  +           0.44
100000000:  +           0.5
100000000:  +           0.6
100000000:  +           0.6
100000000:  +
100000000:  +           4.34

decode

複数の条件でストリーム要素を評価するには、decode式を使用します。

decode::=

(non_mt_arg_list::=)

DECODEでは、次の形式を持つnon_mt_arg_listが予期されます。

expr, search1, result1, search2, result2, ... , searchN, result N, default

DECODEは、exprを各search値と1つずつ比較します。exprがsearch値と一致した場合、DECODE式は対応するresult値を返します。一致する値がない場合、DECODE式はdefaultを返します。defaultが省略されている場合、DECODE式はnullを返します。

引数には任意の数値データ型(INTEGER、BIGINT、FLOAT、DOUBLE)または文字データ型(CHAR)を使用できます。詳細は、2.1項「データ型」を参照してください。

search、resultおよびdefaultの各値は式から派生できます。Oracle CEPでは短絡評価が使用されます。すべてのsearch値を評価してからそれらをexprと比較するかわりに、各search値はexprとの比較が行われる前にのみ評価されます。このため、Oracle CEPでは、前回の検索j (0 < j < i)がexprと一致した場合に検索iは評価されません。

Oracle CEPでは、比較を行う前にexprと各search値が最初のsearch値のデータ型に自動的に変換されます。戻り値は最初のresultと同じデータ型に自動的に変換されます。

DECODE式では、Oracle CEPによって2つのnullが同等と見なされます。exprがnullのとき、Oracle CEPでは最初のsearchが同様にnullである場合にそのresultが返されます。

expr、searches、resultsおよびdefaultを含むDECODE式の要素の最大数は255です。

decode式はcase_exprと同様です(case_expr::=を参照)。

decode式は次のOracle CQL文で使用できます。

- arith_expr::=

- opt_where_clause::=

- select_clause::=

例

例5-12の問合せqと例5-13のリレーションRがあるとします。リレーションRのスキーマは(c1 float, c2 integer)です。例5-14は、問合せで返されるリレーションを示します。

例5-12 算術式とDECODEの問合せ

<query id="q"><![CDATA[
...
SELECT DECODE (c2, 10, c1+0.5, 20, c1+0.1, 30, c1+0.2, c1+0.3) from R
]]></query>

例5-13 算術式とDECODEのリレーション入力

Timestamp   Tuple Kind  Tuple
1000:  +            0.1,10
1002:  +           0.14,15
2000:  -            0.1,10
2002:  -           0.14,15
200000:  +            0.2,20
201000:  -            0.2,20
400000:  +            0.3,30
401000:  -            0.3,30
500000:  +            0.3,35
501000:  -            0.3,35
600000:  +               ,35
601000:  -               ,35
100000000:  +           4.04,40
100001000:  -           4.04,40

例5-14 算術式とDECODEのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:  +           0.6
1002:  +           0.44
200000:  +           0.3
400000:  +           0.5
500000:  +           0.6
100000000:  +           4.34

func_expr

任意のOracle CQL組込み関数、ユーザー定義関数またはOracleデータ・カートリッジ関数を使用して関数呼出しを定義するには、func_expr関数式を使用します。

func_expr::=

(identifier::=、const_int::=、const_bigint::=、const_string::=、xqryargs_list::=、non_mt_arg_list::=、xml_parse_expr::=、xmlelement_expr::=、xmlforest_expr::=、xmlcolattval_expr::=、func_name:=、link::=、arith_expr::=)

func_name:=

(identifier::=)

func_name

次のように、関数の識別子を明示的に指定できます。

- Oracleデータ・カートリッジ関数の型によって、linkを使用してまたは使用せずに指定します。
詳細は、以下を参照してください。

- link::=

- 第14章「データ・カートリッジの概要」

- 空の引数リストを使用して指定します。

- 1つ以上の引数の引数リストを使用して指定します。

- 個別の算術式を使用して指定します。
詳細は、aggr_distinct_exprを参照してください。

PREV

PREV関数は、次のピリオド区切りのidentifier引数から成る単一の引数を使用します。

- identifier1: DEFINE句で指定されたパターンの名前。

- identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

また、PREV 関数は次のconst_int引数を使用します。

- const_int: 現在のストリーム要素の前にある比較対象のストリーム要素の索引。デフォルト: 1。

- const_bigint: 現在のストリーム要素の前にある比較対象のストリーム要素のタイムスタンプ。ストリーム要素のタイムスタンプを取得するには、ELEMENT_TIME疑似列を使用できます(3.2項「ELEMENT_TIME疑似列」を参照)。

詳細は、「prev」を参照してください。例については、「func_expr PREV関数の例」を参照してください。

XQuery: XMLEXISTSとXMLQUERY

Oracle CEPによってXMLストリーム要素データに適用される、xqryargs_listにバインドされたXQueryを指定できます。詳細は、以下を参照してください。

- 「xmlexists」

- 「xmlquery」

xqryargs_listは、selectリストからの1つ以上のストリーム要素、ASキーワード、XQuery変数または演算子(現在のノード演算子"."など)を表すconst_stringを使用する算術式から成る1つ以上のxqryargインスタンスのカンマ区切りのリストです。詳細は、xqryargs_list::=を参照してください。

例については、「func_expr XMLQUERY関数の例」を参照してください。

詳細は、「SQL/XML (SQLX)」を参照してください。

XMLCONCAT

XMLCONCAT関数は、カンマ区切りのxmltype引数の連結をxmltypeとして返します。

詳細は、以下を参照してください。

- 「xmlconcat」

- 「SQL/XML (SQLX)」

SQL/XML (SQLX)

SQLX仕様はXMLデータをサポートするようにSQLを拡張します。

Oracle CQLではタイプSQLXのプロパティを含むイベント・タイプがサポートされます。この場合、Oracle CEPサーバーはOracle CQL内でSQLXからStringに変換し、出力時にStringからSQLXに変換します。

Oracle CQLではSQLXストリームからのデータを操作する次の式(および関数)を提供します。たとえば、SQLXストリーム要素を使用したXML要素または属性の作成、より大きいXMLフラグメントへの結合、XMLコンテンツまたはドキュメントの入力の解析などができます。

注意:

Oracle CQLでは、タイプXMLTYPEの列との外部リレーションはサポートされません(リレーショナル・データベース管理システムとの結合など)。詳細は、2.1.1項「Oracle CQL組込みデータ型」を参照してください。

Oracle CQL SQLX式の詳細は、次の項を参照してください。

- 「xml_agg_expr」

- 「xmlcolattval_expr」

- 「xmlelement_expr」

- 「xmlforest_expr」

- 「xml_parse_expr」

Oracle CQL SQLX関数の詳細は、次の項を参照してください。

- 「XQuery: XMLEXISTSとXMLQUERY」

- 「xmlcomment」

- 「xmlconcat」

- 「xmlagg」

Oracle CQLでXMLを使用する場合のデータ型の制限については、次の項を参照してください。

- 2.3.3項「日時リテラル」

SQLXの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

FIRSTとLAST

FIRST関数とLAST関数は、次のピリオド区切りの個別の値から成る単一の引数をそれぞれ使用します。

- identifier1: DEFINE句で指定されたパターンの名前。

- identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

詳細は、以下を参照してください。

- 「first」

- 「last」

関数の識別子は、non_mt_arg_list (呼び出される組込み関数またはユーザー定義関数に対して有効な引数のリスト)を明示的に使用するかどうかにかかわらず指定できます。リストには、1つまたは複数の引数を含めることができます。

func_exprは次のOracle CQL文で使用できます。

- arith_expr::=

詳細は、1.1.11項「関数」を参照してください。

例

この項では、func_exprの次の例について説明します。

- 「func_expr PREV関数の例」

- 「func_expr XMLQUERY関数の例」

func_expr PREV関数の例

例5-15に、PREV関数を呼び出すfunc_exprの作成方法を示します。

例5-15 PREVのfunc_expr

<query id="q36"><![CDATA[
select T.Ac1 from S15
MATCH_RECOGNIZE (
PARTITION BY
c2
MEASURES
A.c1 as Ac1
PATTERN(A)
DEFINE
A as (A.c1 = PREV(A.c1,3,5000) )
) as T
]]></query>

func_expr XMLQUERY関数の例

例5-16に、XMLQUERY関数を呼び出すfunc_exprの作成方法を示します。

例5-16 XMLQUERYのfunc_expr

<query id="q1"><![CDATA[
select
xmlexists(
"for $i in /PDRecord where $i/PDId <= $x return $i/PDName"
passing by value
c2 as ".",
(c1+1) as "x"
returning content
) xmldata
from
S1
]]></query>

例5-17に、SUM関数を呼び出すfunc_exprの作成方法を示します。

例5-17 SUMのfunc_expr

<query id="q3"><![CDATA[
select sum(c2) from S1[range 5]
]]></query>

object_expr

データ・カートリッジ複合型のメンバーを参照するには、object_expr式を使用します。

object_exprは、算術式が使用できる場所であればどこでも使用できます。詳細は、「arith_expr」を参照してください。

object_expr::=

構文については、次の項を参照してください。

- complex_type::=

- array_type::=

オプションとして、object_exprでリンク(@)を使用してデータ・カートリッジ名を指定できます。必要に応じて、linkを使用してOracle CQLデータ・カートリッジ複合型のクラス、メソッド、フィールドまたはコンストラクタの場所を指定し、参照の曖昧性を解消します。この場所は、名前でデータ・カートリッジを参照する必要があります。たとえば、2つのデータ・カートリッジ(myCartridgeとyourCartridge)の両方が複合型com.package.ThisClassを定義する場合、link句を使用して、使用するcom.package.ThisClassを明示的に特定する必要があります。

注意:

デフォルトのJavaデータ・カートリッジで提供されている型を使用する場合、linkは不要です。

link::=

(methodname::=、data_cartridge_name::=、param_list::=、qualified_type_name::=)

data_cartridge_name::=

(identifier::=)

data_cartridge_name

各Oracle CQLデータ・カートリッジ実装は、一意のデータ・カートリッジ名で識別されます。

データ・カートリッジ名には、次のものが含まれます。

- java: Oracle CQL Javaデータ・カートリッジを識別します。
これはデフォルトのデータ・カートリッジ名です。フィールド参照またはコンストラクタ参照でデータ・カートリッジ名を省略すると、Oracle CQLはjavaデータ・カートリッジ名を使用して参照を解決しようとします。すなわち、次の文は同一です。

SELECT java.lang.String@java(“foo”) …
SELECT java.lang.String(“foo”) …

メソッド参照でデータ・カートリッジ名を省略すると、Oracle CQLはその組込み関数に対して参照を解決しようとします(1.1.11項「関数」を参照)。

- spatial: Oracle CQL Oracle Spatialを識別します。

構文については、data_cartridge_name::=(親: link::=)を参照してください。

型宣言

qualified_type_name@data_cartridge_nameを使用して、イベント・プロパティを複合型として宣言します。

例については、「型宣言の例: link」を参照してください。

フィールド・アクセス

複合型フィールドにアクセスする場合、フィールドの型によってすでに場所が識別されているため、リンクは指定できません。次の文は使用できません。

SELECT java.lang.String(“foo”).CASE_INSENSITIVE_ORDER@java …

例については、「フィールド・アクセスの例: link」を参照してください。

メソッド・アクセス

複合型メソッドにアクセスする場合、メソッドの型によってすでに場所が識別されているため、リンクは指定できません。次の文は使用できません。

SELECT java.lang.String(“foo”).substring@java(0,1) …

例については、「メソッド・アクセスの例: link」を参照してください。

コンストラクタ呼出し

qualified_type_name@data_cartridge_name(param_list)を使用して、複合型コンストラクタを呼び出します。

例については、「コンストラクタ呼出しの例: link」を参照してください。

例

次の例では、この文でサポートされる様々なセマンティクスを示します。

- 「オブジェクト式の例」

- 「型宣言の例: link」

- 「フィールド・アクセスの例: link」

- 「メソッド・アクセスの例: link」

- 「コンストラクタ呼出しの例: link」

オブジェクト式の例

例5-18にobject_exprを示します。

getContainingGeometries@spatial (InputPoints.point)

このobject_exprは、1つのパラメータ(InputPoints.point)を渡してOracle SpatialメソッドgetContainingGeometriesを呼び出すデータ・カートリッジTABLE句を使用します。このメソッドの戻り値、Oracle CEP ITypeレコードのCollectionには、別名validGeometriesが作成されます。表ソース自体には別名R2が作成されます。

例5-18 データ・カートリッジTABLEの問合せ

<query id="q1"><![CDATA[
RSTREAM (
SELECT
R2.validGeometries.shape as containingGeometry,
R1.point as inputPoint
FROM
InputPoints[now] as R1,
TABLE (getContainingGeometries@spatial (InputPoints.point) as validGeometries) AS R2
)
]]></query>

型宣言の例: link

例5-19に、イベント・タイプを、イベント・プロパティをOracle CQLデータ・カートリッジmyCartridgeに属するパッケージcom.mypackageで定義されたOracle CQLデータ・カートリッジ複合型MyTypeとして指定するJavaクラスとして作成する方法を示します。com.myPackage.MyTypeが他のOracle CQLデータ・カートリッジで定義されている場合(データ・カートリッジ名otherCatridgeで)、リンクとデータ・カートリッジ名myCartridgeを使用してa1プロパティの型を指定することで、Oracle CQLは正しい複合型を参照できます。

例5-19 Oracle CQLデータ・カートリッジ・リンクを使用した型宣言

package com.myapplication.event;

import java.util.Date;
import // Oracle CQL data cartridge package(s)?

public final class MarketEvent {
private final String symbol;
private final Double price;
private final com.myPackage.MyType@myCartridge a1;

public MarketEvent(...) {
...
}
...
}

フィールド・アクセスの例: link

例5-20に、複合型MyTypeをインスタンス化して静的フィールドMY_FIELDにアクセスする方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridgeに属するcom.myPackage.MyTypeクラスを明示的に参照します。

例5-20 Oracle CQLデータ・カートリッジ・リンクを使用したフィールド・アクセス

<query id="q1"><![CDATA[
SELECT com.myPackage.MyType@myCartridge(“foo”).MY_FIELD ...
]]></query>

メソッド・アクセスの例: link

例5-21に、複合型MyTypeをインスタンス化してメソッドmyMethodにアクセスする方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridgeに属するcom.myPackage.MyTypeクラスを明示的に参照します。

例5-21 Oracle CQLデータ・カートリッジ・リンクを使用した型宣言

<query id="q1"><![CDATA[
SELECT com.myPackage.MyType@myCartridge(“foo”).myMethod("bar") ...
]]></query>

コンストラクタ呼出しの例: link

例5-22に、複合型MyTypeをインスタンス化する方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridgeに属するcom.myPackage.MyTypeクラスを明示的に参照します。

例5-22 Oracle CQLデータ・カートリッジ・リンクを使用した型宣言

<query id="q1"><![CDATA[
SELECT com.myPackage.MyType@myCartridge(“foo”) ...
]]></query>

order_expr

Oracle CEPが問合せで選択されたタプルを返すソート順を指定するには、order_expr式を使用します。

order_expr::=

(attr::=、const_int::=)

ストリーム要素はattr名で指定できます。

または、const_int索引でもストリーム要素を指定できます。索引はストリームの登録または作成時に指定したストリーム要素の位置に対応します。

order_exprは次のOracle CQL文で使用できます。

- orderterm::=

例

例5-23を示します。ストリームS3のスキーマは(c1 bigint, c2 interval, c3 byte(10), c4 float)です。この例は、問合せq210の結果をc1、c2の順でソートする方法と、問合せq211の結果をc2、索引3のストリーム要素(c3)、索引4のストリーム要素(c4)の順でソートする方法を示します。

例5-23 order_expr

<query id="q210"><![CDATA[
select * from S3 order by c1 desc nulls first, c2 desc nulls last
]]></query>
<query id="q211"><![CDATA[
select * from S3 order by c2 desc nulls first, 3 desc nulls last, 4 desc
]]></query>

xml_agg_expr

XMLフラグメントのコレクションを集計されたXMLドキュメントとして返すには、xml_agg_expr式を使用します。nullを返す引数は結果から削除されます。

xml_agg_expr::=

(arith_expr、order_by_clause::=)

xml_agg_exprは集計式の引数として指定できます。

xml_agg_exprは次のOracle CQL文で使用できます。

- aggr_expr::=

詳細は、以下を参照してください。

- 第9章「組込みの集計関数」

- 「xmlagg」

- 『Oracle Database SQL言語リファレンス』のXMLAGGに関する項

例

例5-24の問合せtkdata67_q1と例5-25の入力リレーションtkdata67_S0があるとします。リレーションtkdata67_S0のスキーマは(c1 integer, c2 float)です。例5-26は、問合せで返されるリレーションを示します。

例5-24 xml_agg_exprの問合せ

<query id="tkdata67_q1"><![CDATA[
select
c1,
xmlagg(xmlelement("c2",c2))
from
tkdata67_S0[rows 10]
group by c1
]]></query>

例5-25 xml_agg_exprのリレーション入力

Timestamp           Tuple
1000               15, 0.1
1000               20, 0.14
1000               15, 0.2
4000               20, 0.3
10000               15, 0.04
h 12000

例5-26 xml_agg_exprのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           15,<c2>0.1</c2>
<c2>0.2</c2>
1000:       +           20,<c2>0.14</c2>
4000:       -           20,<c2>0.14</c2>
4000:       +           20,<c2>0.14</c2>
<c2>0.3</c2>
10000:      -           15,<c2>0.1</c2>
<c2>0.2</c2>
10000:      +           15,<c2>0.1</c2>
<c2>0.2</c2>
<c2>0.04</c2>

xmlcolattval_expr

XMLフラグメントを作成し、各XMLフラグメントに名前列と属性名が含まれるように結果のXMLを拡張するには、xmlcolattval_expr式を使用します。

xmlcolattval_expr::=

(xml_attr_list::=)

xmlcolattval_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

xmlcolattval_exprは次のOracle CQL文で使用できます。

- func_expr::=

詳細は、『Oracle Database SQL言語リファレンス』のXMLCOLATTVALに関する項を参照してください。

例

例5-24の問合せtkdata53_q1と例5-25の入力リレーションtkdata53_S0があるとします。リレーションtkdata53_S0のスキーマは(c1 integer, c2 float)です。例5-26は、問合せで返されるリレーションを示します。

例5-27 xmlcolattval_exprの問合せ

<query id="tkdata53_q1"><![CDATA[
select
XMLELEMENT("tkdata53_S0", XMLCOLATTVAL( tkdata53_S0.c1, tkdata53_S0.c2))
from
tkdata53_S0 [range 1]
]]></query>

例5-28 xmlcolattval_exprのリレーション入力

Timestamp                Tuple
1000:               10, 0.1
1002:               15, 0.14
200000:               20, 0.2
400000:               30, 0.3
h 800000
100000000:               40, 4.04
h 200000000

例5-29 xmlcolattval_exprのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +      <tkdata53_S0>
<column name="c1">10</column>
<column name="c2">0.1</column>
</tkdata53_S0>
1002:       +      <tkdata53_S0>
<column name="c1">15</column>
<column name="c2">0.14</column>
</tkdata53_S0>
2000:       -      <tkdata53_S0>
<column name="c1">10</column>
<column name="c2">0.1</column>
</tkdata53_S0>
2002:       -      <tkdata53_S0>
<column name="c1">15</column>
<column name="c2">0.14</column>
</tkdata53_S0>
200000:       +      <tkdata53_S0>
<column name="c1">20</column>
<column name="c2">0.2</column>
</tkdata53_S0>
201000:       -      <tkdata53_S0>
<column name="c1">20</column>
<column name="c2">0.2</column>
</tkdata53_S0>
400000:       +      <tkdata53_S0>
<column name="c1">30</column>
<column name="c2">0.3</column>
</tkdata53_S0>
401000:       -      <tkdata53_S0>
<column name="c1">30</column>
<column name="c2">0.3</column>
</tkdata53_S0>
100000000:       +      <tkdata53_S0>
<column name="c1">40</column>
<column name="c2">4.04</column>
</tkdata53_S0>
100001000:       -      <tkdata53_S0>
<column name="c1">40</column>
<column name="c2">4.04</column>
</tkdata53_S0>

xmlelement_expr

ストリーム要素から整形式のXML要素を作成する必要がある場合は、xmlelement_expr式を使用します。

xmlelement_expr::=

(const_string::=、arith_expr::=、xml_attribute_list::=、arith_expr_list::=)

xmlelement_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

xmlelement_exprは次のOracle CQL文で使用できます。

- func_expr::=

詳細は、『Oracle Database SQL言語リファレンス』のXMLELEMENTに関する項を参照してください。

例

例5-30の問合せtkdata51_q0と例5-31の入力リレーションtkdata51_S0があるとします。リレーションtkdata51_S0のスキーマは(c1 integer, c2 float)です。例5-32は、問合せで返されるリレーションを示します。

例5-30 xmlelement_exprの問合せ

<query id="tkdata51_q0"><![CDATA[
select
XMLELEMENT(
NAME "S0",
XMLELEMENT(NAME "c1", tkdata51_S0.c1),
XMLELEMENT(NAME "c2", tkdata51_S0.c2)
)
from
tkdata51_S0 [range 1]
]]></query>

例5-31 xmlelement_exprのリレーション入力

Timestamp                Tuple
1000:               10, 0.1
1002:               15, 0.14
200000:               20, 0.2
400000:               30, 0.3
h 800000
100000000:               40, 4.04
h 200000000

例5-32 xmlelement_exprのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:  +           <S0>
<c1>10</c1>
<c2>0.1</c2>
</S0>
1002:  +           <S0>
<c1>15</c1>
<c2>0.14</c2>
</S0>
2000:  -           <S0>
<c1>10</c1>
<c2>0.1</c2>
</S0>
2002:  -           <S0>
<c1>15</c1>
<c2>0.14</c2>
</S0>
200000:  +           <S0>
<c1>20</c1>
<c2>0.2</c2>
</S0>
201000:  -           <S0>
<c1>20</c1>
<c2>0.2</c2>
</S0>
400000:  +           <S0>
<c1>30</c1>
<c2>0.3</c2>
</S0>
401000:  -           <S0>
<c1>30</c1>
<c2>0.3</c2>
</S0>
100000000:  +           <S0>
<c1>40</c1>
<c2>4.04</c2>
</S0>
100001000:  -           <S0>
<c1>40</c1>
<c2>4.04</c2>
</S0>

xmlforest_expr

各引数パラメータをXMLに変換し、これらの変換された引数を連結したXMLフラグメントを返すには、xmlforest_exprを使用します。

xmlforest_expr::=

(xml_attr_list::=)

xmlforest_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

xmlforest_exprは次のOracle CQL文で使用できます。

- func_expr::=

詳細は、『Oracle Database SQL言語リファレンス』のXMLFORESTに関する項を参照してください。

例

例5-33の問合せtkdata52_q0と例5-34の入力リレーションtkdata52_S0があるとします。リレーションtkdata52_S0のスキーマは(c1 integer, c2 float)です。例5-35は、問合せで返されるリレーションを示します。

例5-33 xmlforest_exprの問合せ

<query id="tkdata52_q0"><![CDATA[
select
XMLFOREST( tkdata52_S0.c1, tkdata52_S0.c2)
from
tkdata52_S0 [range 1]
]]></query>

例5-34 xmlforest_exprのリレーション入力

Timestamp                Tuple
1000:               10, 0.1
1002:               15, 0.14
200000:               20, 0.2
400000:               30, 0.3
h 800000
100000000:               40, 4.04
h 200000000

例5-35 xmlforest_exprのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:  +           <c1>10</c1>
<c2>0.1</c2>
1002:  +           <c1>15</c1>
<c2>0.14</c2>
2000:  -           <c1>10</c1>
<c2>0.1</c2>
2002:  -           <c1>15</c1>
<c2>0.14</c2>
200000:  +           <c1>20</c1>
<c2>0.2</c2>
201000:  -           <c1>20</c1>
<c2>0.2</c2>
400000:  +           <c1>30</c1>
<c2>0.3</c2>
401000:  -           <c1>30</c1>
<c2>0.3</c2>
100000000:  +           <c1>40</c1>
<c2>4.04</c2>
100001000:  -           <c1>40</c1>
<c2>4.04</c2>

xml_parse_expr

arith_exprの評価された結果からXMLインスタンスを解析および生成するには、xml_parse_expr式を使用します。

xml_parse_expr::=

(arith_expr::=)

xml_parse_expr式の使用では、次のことに注意します。

- arith_exprがnullに解決される場合は、式でnullが返されます。

- contentを指定した場合は、arith_exprが有効なXML値に解決される必要があります。例については、「xml_parse_exprドキュメントの例」を参照してください。

- documentを指定した場合は、arith_exprが単一ルートのXMLドキュメントに解決される必要があります。例については、「xml_parse_exprドキュメントの例」を参照してください。

- wellformedを指定した場合はvalue_exprが整形式のXMLドキュメントに解決されることを保証することになるため、正しい形式の入力を確認する有効性チェックがデータベースで実行されません。例については、「xml_parse_expr整形式の例」を参照してください。

xml_parse_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

xml_parse_exprは次のOracle CQL文で使用できます。

- func_expr::=

詳細は、『Oracle Database SQL言語リファレンス』のXMLPARSEに関する項を参照してください。

例

この項では、xml_parse_exprの次の例について説明します。

- 「xml_parse_exprコンテンツの例」

- 「xml_parse_exprドキュメントの例」

- 「xml_parse_expr整形式の例」

xml_parse_exprコンテンツの例

例5-36の問合せtkdata62_q3と例5-37の入力リレーションtkdata62_S1があるとします。リレーションtkdata62_S1のスキーマは(c1 char(30))です。例5-38は、問合せで返されるリレーションを示します。

例5-36 xml_parse_exprコンテンツ: 問合せ

<query id="tkdata62_q3"><![CDATA[
select XMLPARSE(CONTENT c1) from tkdata62_S1
]]></query>

例5-37 xml_parse_exprコンテンツ: リレーション入力

Timestamp               Tuple
1000                    "<a>3</a>"
1000                    "<e3>blaaaaa</e3>"
1000                    "<r>4</r>"
1000                    "<a></a>
1003                    "<a>s3</a>"
1004                    "<d>b6</d>"

例5-38 xml_parse_exprコンテンツ: リレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +     <a>3</a>
1000:       +     <e3>blaaaaa</e3>
1000:       +     <r>4</r>
1000:       +     <a/>
1003:       +     <a>s3</a>
1004:       +     <d>b6</d>

xml_parse_exprドキュメントの例

例5-39の問合せtkdata62_q4と例5-40の入力リレーションtkdata62_S1があるとします。リレーションtkdata62_S1のスキーマは(c1 char(30))です。例5-41は、問合せで返されるリレーションを示します。

例5-39 xml_parse_exprドキュメント: 問合せ

<query id="tkdata62_q4"><![CDATA[
select XMLPARSE(DOCUMENT c1) from tkdata62_S1
]]></query>

例5-40 xml_parse_exprドキュメント: リレーション入力

Timestamp               Tuple
1000                    "<a>3</a>"
1000                    "<e3>blaaaaa</e3>"
1000                    "<r>4</r>"
1000                    "<a></a>
1003                    "<a>s3</a>"
1004                    "<d>b6</d>"

例5-41 xml_parse_exprドキュメント: リレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +     <a>3</a>
1000:       +     <e3>blaaaaa</e3>
1000:       +     <r>4</r>
1000:       +     <a/>
1003:       +     <a>s3</a>
1004:       +     <d>b6</d>

xml_parse_expr整形式の例

例5-42の問合せtkdata62_q2と例5-43の入力リレーションtkdata62_Sがあるとします。リレーションtkdata62_Sのスキーマは(c char(30))です。例5-44は、問合せで返されるリレーションを示します。

例5-42 xml_parse_expr整形式: 問合せ

<query id="tkdata62_q2"><![CDATA[
select XMLPARSE(DOCUMENT c WELLFORMED) from tkdata62_S
]]></query>

例5-43 xml_parse_expr整形式: リレーション入力

Timestamp               Tuple
1000                    "<a>3</a>"
1000                    "<e3>blaaaaa</e3>"
1000                    "<r>4</r>"
1000                    "<a/>"
1003                    "<a>s3</a>"
1004                    "<d>b6</d>"

例5-44 xml_parse_expr整形式: リレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           <a>3</a>
1000:       +           <e3>blaaaaa</e3>
1000:       +           <r>4</r>
1000:       +           <a/>
1003:       +           <a>s3</a>
1004:       +           <d>b6</d>

6 条件

この章では、Oracle Continuous Query Language (Oracle CQL)の条件のリファレンスを提供します。条件は1つ以上の式と論理演算子の組合せを指定し、TRUE、FALSEまたはUNKNOWNの値を返します。

- 6.1項「条件の概要」

- 6.2項「比較条件」

- 6.3項「論理条件」

- 6.4項「LIKE条件」

- 6.5項「範囲条件」

- 6.6項「Null条件」

- 6.7項「複合条件」

- 6.8項「IN条件」

6.1 条件の概要

Oracle CQL文のconditionと示されている箇所では、常に適切な条件構文を使用する必要があります。

条件は、次の文のWHERE句で使用できます。

- SELECT

条件は、SELECT文の次の句で使用できます。

- WHERE

- HAVING

関連項目:

「Query」

条件は論理的なデータ型であると考えることができます。

次の単純な条件は常にTRUEに評価されます。

1 = 1

次のより複雑な条件は、salary値をcommission_pct値に加算し(nvl関数を使用してnullを値0で置換します)、合計が定数25000よりも大きいかどうかを判断します。

NVL(salary, 0) + NVL(salary + (salary*commission_pct, 0) > 25000)

論理条件では、複数の条件を単一の条件に結合できます。たとえば、AND条件を使用して2つの条件を結合できます。

(1 = 1) AND (5 < 7)

次に、有効な条件を示します。

name = 'SMITH'
S0.department_id = S2.department_id
hire_date > '01-JAN-88'
commission_pct IS NULL AND salary = 2100

6.1.1 条件の優先順位

優先順位とは、Oracle CEPによって同一の式の異なる条件が評価される順序です。複数の条件を含む式を評価する場合、Oracle CEPでは優先順位の高い条件が優先順位の低い条件よりも先に評価されます。優先順位の等しい条件は式の左から右に評価されます。

表6-1は、Oracle CQL条件の優先順位レベルを高い順に示しています。同じ行にある条件の優先順位は同じです。表に示されているとおり、演算子は条件の前に評価されます。

表6-1 Oracle CQL条件の優先順位

条件の種類

目的

Oracle CQL演算子はOracle CQL条件の前に評価されます

4.1.2項「演算子の優先順位について」を参照してください。

=, <>, <, >, <=, >=

比較

IS NULL、IS NOT NULL、LIKE、BETWEEN、IN、NOT IN

比較

NOT

累乗、論理否定

AND

論理積

OR

論理和

XOR

論理和

6.2 比較条件

比較条件はある式を別の式と比較します。このような比較の結果は TRUE、FALSEまたはNULLになります。

数値式の比較の場合、Oracle CEPでは数値の優先順位を使用して、INTEGER、FLOATまたはBIGINTのどの値が条件で比較されるかを判断します。

非スカラ型の2つのオブジェクトは、それらが同じ名前付きの型を持ち、各要素が1対1で対応している場合に比較可能です。

比較条件は、式またはビューの結果との比較を指定します。

表6-2に、比較条件を示します。

表6-2 比較条件

条件の種類

目的

例

=

等価性テスト。

<query id="Q1"><![CDATA[
SELECT *
FROM S0
WHERE salary = 2500
]]></query>

<>

非等価テスト。

<query id="Q1"><![CDATA[
SELECT *
FROM S0
WHERE salary <> 2500
]]></query>

>

<

大小のテスト。

<query id="Q1"><![CDATA[
SELECT * FROM S0
WHERE salary > 2500
]]></query>
<query id="Q1"><![CDATA[
SELECT * FROM S0
WHERE salary < 2500
]]></query>

>=

<=

以上または以下のテスト。

<query id="Q1"><![CDATA[
SELECT * FROM S0
WHERE salary >= 2500
]]></query>
<query id="Q1"><![CDATA[
SELECT * FROM S0
WHERE salary <= 2500
]]></query>

like

文字データのパターン照合テスト。

詳細は、6.4項「LIKE条件」を参照してください。

<query id="q291"><![CDATA[
select * from SLk1
where first1 like "^Ste(v|ph)en$"
]]></query>

is [not] null

Nullテスト。

詳細は、6.6項「Null条件」を参照してください。

<query id="Q1"><![CDATA[
SELECT last_name
FROM S0
WHERE commission_pct
IS NULL
]]></query>

<query id="Q2"><![CDATA[
SELECT last_name
FROM S0
WHERE commission_pct
IS NOT NULL
]]></query>

[not] in

集合およびメンバーシップ・テスト。

詳細は、6.8項「IN条件」を参照してください。

<query id="Q1"><![CDATA[
SELECT * FROM S0
WHERE job_id NOT IN
('PU_CLERK','SH_CLERK')
]]></query>
<view id="V1" schema="salary"><![CDATA[
SELECT salary
FROM S0
WHERE department_id = 30
]]></view>
<view id="V2" schema="salary"><![CDATA[
SELECT salary
FROM S0
WHERE department_id = 20
]]></view>
<query id="Q2"><![CDATA[
V1 IN V2
]]></query>

condition::=

(arith_expr::=, const_string::=, non_mt_arg_list::=, non_mt_arg_list_set::=, sfw_block::=)

6.3 論理条件

論理条件は、構成要素である2つの条件の結果を結合して、それらに基づく単一の結果を生成するか、または単一条件の結果を逆転します。表6-3に論理条件を示します。

表6-3 論理条件

条件の種類

演算

例

NOT

以降の条件がFALSEの場合はTRUEを返します。条件がTRUEの場合はFALSEを返します。条件がUNKNOWNの場合はUNKNOWNのままです。

<query id="Q1"><![CDATA[
SELECT *
FROM S0
WHERE NOT (job_id IS NULL)
]]></query>

AND

両方のコンポーネント条件がTRUEの場合はTRUEを返します。一方がFALSEの場合はFALSEを返します。それ以外の場合はUNKNOWNを返します。

<query id="Q1"><![CDATA[
SELECT *
FROM S0
WHERE job_id = 'PU_CLERK'
AND dept_id = 30
]]></query>

OR

一方のコンポーネント条件がTRUEの場合はTRUEを返します。両方がFALSEの場合はFALSEを返します。それ以外の場合はUNKNOWNを返します。

<query id="Q1"><![CDATA[
SELECT *
FROM S0
WHERE job_id = 'PU_CLERK'
OR department_id = 10
]]></query>

XOR

一方のコンポーネント条件がTRUEの場合はTRUEを返します。両方がFALSEの場合はFALSEを返します。それ以外の場合はUNKNOWNを返します。

<query id="Q1"><![CDATA[
SELECT *
FROM S0
WHERE job_id = 'PU_CLERK'
XOR department_id = 10
]]></query>

表6-4に、NOT条件が式に適用された場合の結果を示します。

表6-4 NOTの真偽表

--

TRUE

FALSE

UNKNOWN

NOT

FALSE

TRUE

UNKNOWN

表6-5に、2つの式にAND条件を結合した場合の結果を示します。

表6-5 ANDの真偽表

AND

TRUE

FALSE

UNKNOWN

TRUE

TRUE

FALSE

UNKNOWN

FALSE

FALSE

FALSE

FALSE

UNKNOWN

UNKNOWN

FALSE

UNKNOWN

たとえば、次のSELECT文のWHERE句では、product.levelxがBRANDで、かつv1.prodkeyがproduct.prodkeyと等しい場合にのみAND論理条件で値が返されます。

<view id="v2" schema="region, dollars, month_"><![CDATA[
select
v1.region,
v1.dollars,
v1.month_
from
v1,
product
where
product.levelx = "BRAND" and v1.prodkey = product.prodkey
]]></view>

表6-6に、2つの式にORを適用した場合の結果を示します。

表6-6 ORの真偽表

OR

TRUE

FALSE

UNKNOWN

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

UNKNOWN

UNKNOWN

TRUE

UNKNOWN

UNKNOWN

たとえば、次の問合せでは、リスクの種類が2であるRBKまたはRBRアカウントの内部アカウント識別子が返されます。

<view id="ValidAccounts" schema="ACCT_INTRL_ID"><![CDATA[
select ACCT_INTRL_ID from Acct
where (
((MANTAS_ACCT_BUS_TYPE_CD = "RBK") OR (MANTAS_ACCT_BUS_TYPE_CD = "RBR")) AND
(ACCT_EFCTV_RISK_NB != 2)
)
]]></view>

表6-7に、2つの式にXORを適用した場合の結果を示します。

表6-7 XORの真偽表

XOR

TRUE

FALSE

UNKNOWN

TRUE

FALSE

TRUE

UNKNOWN

FALSE

TRUE

FALSE

UNKNOWN

UNKNOWN

UNKNOWN

UNKNOWN

UNKNOWN

たとえば、次の問合せでは、c1が15かつc2が0.14である場合、またはc1が20かつc2が100.1である場合にc1とc2が返されますが、どちらか一方の条件のみが真になります。

<query id="q6"><![CDATA[
select
S2.c1,
S3.c2
from
S2[range 1000], S3[range 1000]
where
(S2.c1 = 15 and S3.c2 = 0.14) xor (S2.c1 = 20 and S3.c2 = 100.1)
]]></query>

6.4 LIKE条件

LIKE条件は正規表現のパターン・マッチングを使用するテストを指定します。等価演算子(=)ではある文字値が別の文字値と厳密に照合されるのに対して、LIKE条件では2番目の値で指定された正規表現パターンを1番目の値で検索することで、ある文字値が別の文字値と部分的に照合されます。LIKEは入力文字セットで定義された文字を使用して、文字列を計算します。

like_condition::=

(arith_expr::=、const_string::=)

この構文では:

- arith_exprは、const_stringと比較される値を含む算術式です。

- const_stringは、arith_exprと比較される定数値の正規表現です。

arith_exprまたはconst_stringのいずれかがnullの場合、結果はunknownです。

const_stringにはjava.util.regexでサポートされている正規表現の任意のアサーションと量指定子を含めることができます。つまり、構文内の文字列形式で指定する正規表現はPerlで使用されるものと同様です。

表6-8に、LIKE条件を示します。

表6-8 LIKE条件

条件の種類

演算

例

x LIKE y

xがパターンyと一致する場合はTRUE、それ以外の場合はFALSE。

<query id="q291"><![CDATA[
select * from SLk1 where first1 like "^Ste(v|ph)en$"
]]></query>

<query id="q292"><![CDATA[
select * from SLk1 where first1 like ".*intl.*"
]]></query>

関連項目:

「lk」

Perlの正規表現の詳細は、http://perldoc.perl.org/perlre.htmlを参照してください。

6.4.1 例

次の条件は、Maで始まるすべてのlast_name値でtrueです。

last_name LIKE '^Ma'

次のすべてのlast_name値では、条件がtrueになります。

Mallin, Markle, Marlow, Marvins, Marvis, Matos

大文字と小文字が区別されるため、MA、ma、mAで始まるlast_name値では条件がfalseになります。

次のような条件があるとします。

last_name LIKE 'SMITH[A-Za-z]'

この条件は、次のlast_name値でtrueです。

SMITHE, SMITHY, SMITHS

[A-Z]はlast_name値の1文字と厳密に一致している必要があるため、この条件はSMITHではfalseです。

次のような条件があるとします。

last_name LIKE 'SMITH[A-Z]+'

[A-Z]+は単語末尾の1つ以上の文字に一致している必要があるため、この条件はSMITHではfalseですが、次のlast_name値ではtrueです。

SMITHSTONIAN, SMITHY, SMITHS

詳細は、http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.htmlを参照してください。

6.5 範囲条件

範囲条件は範囲に含まれていることをテストします。

between_condition::=

(arith_expr::=)

表6-9に、範囲条件を示します。

表6-9 範囲条件

条件の種類

演算

例

BETWEEN x AND y

x以上で、y以下。

<query id="Q1"><![CDATA[
SELECT * FROM S0
WHERE salary
BETWEEN 2000 AND 3000
]]></query>

6.6 Null条件

NULL条件はnullをテストします。これはnullのテストで使用される唯一の条件です。

null_conditions::=

(第5章「式」)

表6-10に、null条件を示します。

表6-10 Null条件

条件の種類

演算

例

IS [NOT] NULL

nullをテストします。

関連項目: 2.5項「Null」

<query id="Q1"><![CDATA[
SELECT last_name
FROM S0
WHERE commission_pct
IS NULL
]]></query>

<query id="Q2"><![CDATA[
SELECT last_name
FROM S0
WHERE commission_pct
IS NOT NULL
]]></query>

6.7 複合条件

複合条件は他の条件の組合せを指定します。

compound_conditions::=

関連項目:

NOT、ANDおよびORの各条件の詳細は、6.3項「論理条件」を参照してください。

6.8 IN条件

INおよびNOT INは、次のように使用できます。

- in_condition_set: 6.8.1項「集合演算としてのINとNOT INの使用」

- in_condition_membership: 6.8.2項「メンバーシップ条件としてのINとNOT INの使用」

注意:

これらの2つの使用法を組み合せることはできません。

6.8.3項「NOT INとNull値」で説明しているように、NOT IN条件を使用する際、null値の効果に注意してください。

6.8.1 集合演算としてのINとNOT INの使用

「BINARYの例: INとNOT IN」を参照してください。

6.8.2 メンバーシップ条件としてのINとNOT INの使用

この使用法では、問合せはSELECT-FROM-WHERE問合せになり、1つの引数が同じタイプの引数のリスト内に含まれているメンバーであるかどうか、または引数のリストが一連の同様なリストのメンバーであるかどうかがテストされます。

in_condition_membership::=

(arith_expr::=, non_mt_arg_list::=, non_mt_arg_list_set::=)

non_mt_arg_list_set::=

(non_mt_arg_list::=)

INまたはNOT INを使用して、non_mt_arg_listが一連の同様なリストのメンバーであるかどうかをテストする場合、non_mt_arg_list_setを使用する必要があります。引数の数およびタイプに関して、non_mt_arg_list_set内の各non_mt_arg_listが、条件の左にあるnon_mt_arg_listと一致している必要があります。

注意:

6.8.1項「集合演算としてのINとNOT INの使用」で説明しているように、この使用法はin_condition_setと組み合せることはできません。

例6-1の問合せQ1、および例6-2のデータ・ストリームS0があるとします。ストリームS0には、スキーマ(c1 integer, c2 integer)があります。例6-3には、問合せで返されるリレーションが示されています。Q1では、non_mt_arg_list_setは((50,4),(4,5))です。これに含まれている各non_mt_arg_listが、条件(c1, c2)の左にあるnon_mt_arg_list内の引数の数およびタイプと一致している必要があります。

例6-1 S [range C on E] INTERVAL値: 問合せ

<query id="Q1"><![CDATA[
select c1,c2 from S0[range 1] where (c1,c2) in ((50,4),(4,5))
]]></query>

例6-2 S [range C on E] INTERVAL値: ストリーム入力

Timestamp   Tuple
1000        50, 4
2000        30, 6
3000          , 5
4000        22,
h 200000000

例6-3 S [range C on E] INTERVAL値: リレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           50,4
2000:       -           50,4

6.8.3 NOT INとNull値

NOT IN演算に続くリストのいずれかの項目がnullに評価される場合、すべてのストリーム要素はFALSEまたはUNKNOWNに評価され、行は返されません。たとえば、次の文では、c1が50でも30でもない場合にc1とc2が返されます。

<query id="check_notin1"><![CDATA[
select c1,c2 from S0[range 1]
where
c1 not in (50, 30)
]]></query>

しかし、次の文ではストリーム要素が返されません。

<query id="check_notin1"><![CDATA[
select c1,c2 from S0[range 1]
where
c1 not in (50, 30, NULL)
]]></query>

上の例ではストリーム要素が返されません。これは、WHERE句の条件が次のように評価されるためです。

c1 != 50 AND c1 != 30 AND c1 != null

3番目の条件でc1とnullが比較された結果がUNKNOWNになるため、式全体の結果はFALSEになります(ストリーム要素のc1 が50または30に等しい場合)。この動作は、特にNOT IN演算子がビューを参照する場合に見過ごされがちです。

さらに、次の例のように、NOT IN条件でストリーム要素が返されないビューを参照する場合には、すべてのストリーム要素が返されます。V1ではいずれのストリーム要素も返されないので、Q1が返されます。

<view id="V1" schema="c1"><![CDATA[
IStream(select * from S1[range 10 slide 10] where 1=2)
]]></view>
<view id="V2" schema="c1"><![CDATA[
IStream(select * from S1[range 10 slide 10] where c1=2)
]]></view>
<query id="Q1"><![CDATA[
V1 not in V2
]]></query>

7 共通のOracle CQL DDL句

この章では、Oracle Continuous Query Language (Oracle CQL)のデータ定義言語(DDL)に含まれる句のリファレンスを提供します。

- 7.1項「共通のOracle CQL DDL句の概要」

7.1 共通のOracle CQL DDL句の概要

Oracle CQLでは次の共通のDDL句をサポートしています。

- 「array_type」

- 「attr」

- 「attrspec」

- 「complex_type」

- 「const_int」

- 「const_string」

- 「const_value」

- 「identifier」

- 「l-value」

- 「methodname」

- 「non_mt_arg_list」

- 「non_mt_attr_list」

- 「non_mt_attrname_list」

- 「non_mt_attrspec_list」

- 「non_mt_cond_list」

- 「param_list」

- 「qualified_type_name」

- 「query_ref」

- 「time_spec」

- 「xml_attribute_list」

- 「xml_attr_list」

- 「xqryargs_list」

Oracle CQL文の詳細は、第20章「Oracle CQL文」を参照してください。

array_type

目的

すべて同じ型の一連のcomplex_typeコンポーネントで構成されるOracle CQLデータ・カートリッジの型を指定するには、array_type句を使用します。

注意:

Oracle CQLでは1次元配列のみをサポートしています。このため、java.lang.String[]は使用できますが、java.lang.String[][]は使用できません。

要件

なし。

構文

array_type::=

(l-value::=、qualified_type_name::=)

セマンティクス

配列宣言

配列型はOracle CQLデータ・カートリッジcomplex_typeのqualified_type_nameを使用して宣言します。complextypeの配列のみがサポートされます。Oracle CQL Javaデータ・カートリッジに同等の型が定義されていなければ、Oracle CQL単純型の配列を宣言することはできません。

例については、次の項を参照してください。

- 「配列宣言の例: complex_type」

- 「配列宣言の例: Oracle CQL単純型」

配列アクセス

complex_type配列要素には、整数索引でアクセスします。索引は、データ・カートリッジ実装によって0または1で始まります。

配列へのアクセス時に、Oracle CQLで新しい配列型のインスタンスを直接インスタンス化することはサポートされていません。たとえば、次の文は使用できません。

SELECT java.lang.String[10] ...

例については、「配列アクセスの例」を参照してください。

例

次の例では、この文でサポートされる様々なセマンティクスを示します。

- 「配列宣言の例: complex_type」

- 「配列宣言の例: Oracle CQL単純型」

- 「配列アクセスの例」

配列宣言の例: complex_type

例7-1に、イベント・タイプを、イベント・プロパティをパッケージcom.mypackageで定義されたOracle CQLデータ・カートリッジ複合型MyClassの配列として指定するJavaクラスとして作成する方法を示します。

例7-1 Oracle CQLデータ・カートリッジ配列をイベント・タイプで宣言

package com.myapplication.event;

import java.util.Date;
import // Oracle CQL Java data cartridge package?

public final class MarketEvent {
private final String symbol;
private final Double price;
private final com.mypackage.MyClass[] a1;

public MarketEvent(...) {
...
}
...
}

配列宣言の例: Oracle CQL単純型

Oracle CQLデータ・カートリッジの型の配列のみがサポートされています。Oracle CQL単純型の配列は宣言できません。

int[] a1

ただし、Oracle CQL Javaデータ・カートリッジを使用し、単純型に相当するJavaの型(存在する場合)を参照することで、この問題を解決できます。

int@java[] a1

@構文の詳細は、link::=を参照してください。

配列アクセスの例

例7-2に、Oracle CQLデータ・カートリッジ複合型の配列アクセスを使用する、次の問合せを登録する方法を示します。

- ビューv1は配列a1の3番目の要素にアクセスします。この配列には、例7-1で定義された、Oracle CQLデータ・カートリッジ複合型com.mypackage.MyClassのインスタンスが含まれます。

- 問合せq1は配列field1の最初の要素にアクセスします。この配列は、Oracle CQLデータ・カートリッジ複合型a1で定義されます。

例7-2 Oracle CQL問合せでのOracle CQLデータ・カートリッジ配列へのアクセス

<view id="v1" schema="symbol price a1"><![CDATA[
IStream(select symbol, price, a1[3] from S1[range 10 slide 10])
]]></view>
<query id="q1"><![CDATA[
SELECT a1.field1[1] …
]]></query>

attr

目的

ストリーム要素または疑似列を指定するには、attr句を使用します。

attr句は次のOracle CQL文で使用できます。

- arith_expr::=

- order_expr::=

- non_mt_attr_list::=

要件

なし。

構文

attr::=

(identifier::=、pseudo_column::=)

pseudo_column::=

セマンティクス

identifier

ストリーム要素の識別子を指定します。

指定できるものは、次のとおりです。

- StreamOrViewName.ElementName

- ElementName

- CorrelationName.PseudoColumn

- PseudoColumn

例については、「例」を参照してください。

構文については、identifier::=(親: attr::=)を参照してください。

pseudo_column

特定のストリーム要素、すべてのストリーム要素、またはMATCH_RECOGNIZE句の相関名に関連するストリーム要素に関連付けられているタイムスタンプを指定します。

例については、次の項を参照してください。

- 「例」

- 3.2.2.1項「SELECTでのELEMENT_TIMEの使用」

- 3.2.2.2項「GROUP BYでのELEMENT_TIMEの使用」

- 3.2.2.3項「PATTERNでのELEMENT_TIMEの使用」

詳細は、第3章「疑似列」を参照してください。

構文については、pseudo_column::=(親: attr::=)を参照してください。

例

例7-3に示すストリームがある場合、有効な属性の句は次のとおりです。

- ItemTempStream.temp

- temp

- B.element_time

- element_time

例7-3 attr句

<view id="ItemTempStream" schema="itemId temp"><![CDATA[
IStream(select * from ItemTemp)
]]></view>
<query id="detectPerish"><![CDATA[
select its.itemId
from ItemTempStream MATCH_RECOGNIZE (
PARTITION BY itemId
MEASURES A.itemId as itemId
PATTERN (A B* C)
DEFINE
A  AS  (A.temp >= 25),
B  AS  ((B.temp >= 25) and (to_timestamp(B.element_time) - to_timestamp(A.element_time) < INTERVAL "0 00:00:05.00" DAY TO SECOND)),
C  AS  (to_timestamp(C.element_time) - to_timestamp(A.element_time) >= INTERVAL "0 00:00:05.00" DAY TO SECOND)
) as its
]]></query>

attrspec

目的

ストリーム要素の識別子とデータ型を定義するには、attrspec句を使用します。

attrspec句は次のOracle CQL文で使用できます。

- non_mt_attrspec_list::=

要件

なし。

構文

attrspec::=

(identifier::=、fixed_length_datatype::=、variable_length_datatype::=)

セマンティクス

identifier

ストリーム要素の識別子を指定します。

構文については、identifier::=(親: attrspec::=)を参照してください。

fixed_length_datatype

ストリーム要素のデータ型を固定長のデータ型として指定します。

構文については、fixed_length_datatype::=(親: attrspec::=)を参照してください。

variable_length_datatype

ストリーム要素のデータ型を可変長のデータ型として指定します。

構文については、variable_length_datatype::=(親: attrspec::=)を参照してください。

integer

可変長データ型の長さを指定します。

構文については、attrspec::=を参照してください。

complex_type

目的

次の項目を定義するOracle CQLデータ・カートリッジの型を指定するには、complex_type句を使用します。

- メンバー・フィールド(静的またはインスタンス)

- メンバー・メソッド(静的またはインスタンス)

- コンストラクタ

フィールドの型、およびメソッドの戻り値の型およびパラメータ・リストは、複合型または単純型です。

複合型は修飾型名(ピリオド「.」で区切られた一連の識別子)と所属するデータ・カートリッジのオプション名(link::=を参照)で識別されます。リンク名が指定されていない場合、Oracle CEPは複合型がJavaクラスであると見なします(複合型がJavaデータ・カートリッジに所属すると見なします)。

要件

complextypeを提供するOracle CQLデータ・カートリッジが、実行時にOracle CEPサーバーによってロードされている必要があります。

構文

complex_type::=

(attr::=、fieldname::=、methodname::=、param_list::=、qualified_type_name::=)

fieldname::=

(identifier::=、link::=)

セマンティクス

fieldname

fieldname句を使用して、Oracle CQLデータ・カートリッジ複合型の静的フィールドを指定します。

構文: fieldname::=(親: complex_type::=)。

フィールド・アクセス

ORDER BY句内の式で生成された複合型l-valueは使用できません。現在、SELECT句およびWHERE句内の式のみ、複合型l-valueを生成できます。

qualified_type_nameを使用してアクセスできるのは、静的フィールドのみです。静的でないフィールドにアクセスするには、まず複合型をインスタンス化する必要があります(「コンストラクタ呼出し」を参照)。

例については、「フィールド・アクセスの例: complex_type」を参照してください。

メソッド・アクセス

複合型のセッター・メソッドにアクセスすると、他の問題が発生する可能性があります。他の問題が発生すると、同時実行性と共有の機会が低下します。たとえば、セッター・メソッドを呼び出して、ビューに依存する他の問合せと共有しているビュー属性(イベント・プロパティなど)の値を変更すると、メソッド呼出しによって発生した他の問題により、問合せの結果が変わる可能性があります。

qualified_type_nameを使用してアクセスできるのは、静的メソッドのみです。静的でないフィールドにアクセスするには、まず複合型をインスタンス化する必要があります(「コンストラクタ呼出し」を参照)。

例については、「メソッド・アクセスの例: complex_type」を参照してください。

コンストラクタ呼出し

qualified_type_nameを使用してアクセスできるのは、静的フィールドおよび静的メソッドのみです。静的でないフィールドまたは静的でないメソッドにアクセスするには、まずいずれかのコンストラクタを呼び出して、複合型をインスタンス化する必要があります。

例については、「コンストラクタ呼出しの例: complex_type」を参照してください。

例

次の例では、この文でサポートされる様々なセマンティクスを示します。

- 「フィールド・アクセスの例: complex_type」

- 「メソッド・アクセスの例: complex_type」

- 「コンストラクタ呼出しの例: complex_type」

フィールド・アクセスの例: complex_type

例7-4に、Oracle CQLデータ・カートリッジ複合型のフィールド・アクセスを使用する、次の問合せを登録する方法を示します。

- 問合せq1は、Oracle CQLデータ・カートリッジ複合型a1からフィールドmyFieldにアクセスします。

- 問合せq2は、メソッドfunction-returning-objectから返されたOracle CQLデータ・カートリッジ複合型で定義されたフィールドmyFieldにアクセスします。メソッド・アクセスの詳細は、「メソッド・アクセス」を参照してください。

- 問合せq3は、Oracle CQLデータ・カートリッジ複合型a1で定義されたOracle CQLデータ・カートリッジ複合型myFieldで定義されたフィールドmyNestedFieldにアクセスします。

- 問合せq4は、パッケージcom.myPackageのクラスMyTypeで定義された静的フィールドmyStaticFieldにアクセスします。静的フィールドの場合、リンク(@myCartridge)が必要です。

例7-4 データ・カートリッジのフィールド・アクセス

<query id="q1"><![CDATA[
SELECT a1.myField …
]]></query>
<query id="q2"><![CDATA[
SELECT function-returning-object().myField …
]]></query>
<query id="q3"><![CDATA[
SELECT a1.myField.myNestedField …
]]></query>
<query id="q4"><![CDATA[
SELECT com.myPackage.MyType.myStaticField@myCartridge …
]]></query>

メソッド・アクセスの例: complex_type

例7-5に、Oracle CQLデータ・カートリッジ複合型のメソッド・アクセスを使用する、次の問合せを登録する方法を示します。

- 問合せq1は、Oracle CQLデータ・カートリッジ複合型a1で定義されたメソッドmyMethodにアクセスします。この問合せは、空のパラメータ・リストでメソッドにアクセスします。

- 問合せq2は、問合せq1とは別の署名を使用して、Oracle CQLデータ・カートリッジ複合型a1で定義されたメソッドmyMethodにアクセスします。このケースでは、問合せは3つの引数パラメータ・リストでメソッドにアクセスします。

- 問合せq3は、Oracle CQLデータ・カートリッジ複合型MyTypeで定義されたメソッドmyStaticMethodにアクセスします。この問合せは、1つのパラメータでメソッドにアクセスします。静的メソッドの場合、リンク(@myCartridge)が必要です。

例7-5 データ・カートリッジのメソッド・アクセス

<query id="q1"><![CDATA[
SELECT a1.myMethod() …
]]></query>
<query id="q2"><![CDATA[
SELECT a1.myMethod(a2, “foo”, 10) …
]]></query>
<query id="q3"><![CDATA[
SELECT myPackage.MyType.myStaticMethod@myCartridge("foo") …
]]></query>

コンストラクタ呼出しの例: complex_type

例7-6に、Oracle CQLデータ・カートリッジ複合型のコンストラクタ呼出しを使用する、次の問合せを登録する方法を示します。

- 問合せq1は、パッケージjava.langで定義されたコンストラクタStringを呼び出します。このケースでは、問合せは空の引数リストでコンストラクタを呼び出します。

- 問合せq2は、パッケージjava.langで定義されたコンストラクタStringを呼び出します。このケースでは、問合せは1つの引数パラメータ・リストでコンストラクタを呼び出し、返されたStringインスタンスで定義された静的でないメソッドsubstringを呼び出します。

例7-6 データ・カートリッジのコンストラクタ呼出し

<query id="q1"><![CDATA[
SELECT java.lang.String() …
]]></query>
<query id="q2"><![CDATA[
SELECT java.lang.String(“food”).substring(0,1) …
]]></query>

const_bigint

目的

big integerの数値リテラルを指定するには、const_bigint句を使用します。

const_bigint句は次のOracle CQL文で使用できます。

- func_expr::=

詳細は、2.3.2項「数値リテラル」を参照してください。

要件

なし。

構文

const_bigint::=

const_int

目的

整数の数値リテラルを指定するには、const_int句を使用します。

const_int句は次のOracle CQL文で使用できます。

- func_expr::=

- order_expr::=

詳細は、2.3.2項「数値リテラル」を参照してください。

要件

なし。

構文

const_int::=

const_string

目的

定数のStringテキスト・リテラルを指定するには、const_string句を使用します。

const_string句は次のOracle CQL文で使用できます。

- func_expr::=

- order_expr::=

- condition::=

- interval_value::=

- xmltable_clause::=

- xtbl_col::=

詳細は、2.3.1項「テキスト・リテラル」を参照してください。

要件

なし。

構文

const_string::=

const_value

目的

リテラル値を指定するには、const_value句を使用します。

const_value句は次のOracle CQL文で使用できます。

- arith_expr::=

- condition::=

詳細は、2.3項「リテラル」を参照してください。

要件

なし。

構文

const_value::=

(interval_value::=、const_string::=、const_int::=、const_bigint::=)

interval_value::=

(const_string::=)

セマンティクス

interval_value

期間の定数値を引用符付きの文字列として指定します。例:

INTERVAL '4 5:12:10.222' DAY TO SECOND(3)

詳細は、2.3.4項「期間リテラル」を参照してください。

構文については、interval_value::=(親: const_value::=)を参照してください。

const_string

引用符付きのString定数値を指定します。

詳細は、2.3.1項「テキスト・リテラル」を参照してください。

構文については、const_string::=(親: interval_value::=およびconst_value::=)を参照してください。

null

null定数値を指定します。

詳細は、2.5項「Null」を参照してください。

const_int

int定数値を指定します。

詳細は、2.3.2項「数値リテラル」を参照してください。

bigint

bigint定数値を指定します。

詳細は、2.3.2項「数値リテラル」を参照してください。

float

float定数値を指定します。

詳細は、2.3.2項「数値リテラル」を参照してください。

identifier

目的

既存のOracle CQLスキーマ オブジェクトを参照するには、identifier句を使用します。

identifier句は次のOracle CQL文で使用できます。

- binary::=

- aggr_expr::=

- func_expr::=

- attr::=

- attrspec::=

- query_ref::=

- non_mt_attrname_list::=

- relation_variable::=

- measure_column::=

- 「Query」

- projterm::=

- 「View」

要件

スキーマ・オブジェクトが存在している必要があります。

構文

identifier::=

(const_string::=、unreserved_keyword::=)

unreserved_keyword::=

セマンティクス

const_string

識別子をStringとして指定します。

詳細は、2.8.1項「スキーマ・オブジェクトのネーミング・ルール」を参照してください。

構文については、identifier::=を参照してください。

[A-Z]

識別子を単一の大文字として指定します。

構文については、identifier::=を参照してください。

unreserved_keyword

識別子として使用できる名前です。

詳細は、以下を参照してください。

- 「reserved_keyword」

- 2.8.1項「スキーマ・オブジェクトのネーミング・ルール」

構文については、unreserved_keyword::=(親: identifier::=)を参照してください。

reserved_keyword

次の名前は予約キーワードであるため、識別子として使用できません。add、aggregate、all、alter、and、application、as、asc、avg、between、bigint、binding、binjoin、binstreamjoin、boolean、by、byte、callout、case、char、clear、columns、constraint、content、count、create、day、days、decode、define、derived、desc、destination、disable、distinct、document、double、drop、dstream、dump、duration、duration、element_time、else、enable、end、evalname、event、events、except、external、false、first、float、from、function、group、groupaggr、having、heartbeat、hour、hours、identified、implement、in、include、index、instance、int、integer、intersect、interval、is、istream、java、key、language、last、level、like、lineage、logging、match_recognize、matches、max、measures、metadata_query、metadata_system、metadata_table、metadata_userfunc、metadata_view、metadata_window、microsecond、microseconds、millisecond、milliseconds、min、minus、minute、minutes、monitoring、multiples、nanosecond、nanoseconds、not、now、null、nulls、object、of、on、operator、or、order、orderbytop、output、partition、partitionwin、partnwin、passing、path、pattern、patternstrm、patternstrmb、prev、primary、project、push、query、queue、range、rangewin、real、register、relation、relsrc、remove、return、returning、rows、rowwin、rstream、run、run_time、sched_name、sched_threaded、schema、second、seconds、select、semantics、set、silent、sink、slide、source、spill、start、stop、storage、store、stream、strmsrc、subset、sum、synopsis、system、systemstate、then、time、time_slice、timeout、timer、timestamp、timestamped、to、true、trusted、type、unbounded、union、update、using、value、view、viewrelnsrc、viewstrmsrc、wellformed、when、where、window、xmlagg、xmlattributes、xmlcolattval、xmlconcat、xmldata、xmlelement、xmlexists、xmlforest、xmlparse、xmlquery、xmltable、xmltypeまたはxor。

l-value

目的

整数リテラルを指定するには、l-value句を使用します。

l-value句は次のOracle CQL文で使用できます。

- array_type::=

要件

なし。

構文

l-value::=

(integer::=)

methodname

目的

Oracle CQLデータ・カートリッジ複合型のメソッドを指定するには、methodname句を使用します。

methodname句は次のOracle CQL文で使用できます。

- complex_type::=

要件

なし。

構文

methodname::=

(identifier::=、link::=)

non_mt_arg_list

目的

1つ以上の引数をストリーム要素を使用する算術式として指定するには、non_mt_arg_list句を使用します。1つ以上の引数をストリーム要素として直接指定するには、non_mt_attr_list::=を参照してください。

non_mt_arg_list句は次のOracle CQL文で使用できます。

- decode::=

- func_expr::=

- condition::=

- non_mt_arg_list_set::=

要件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

non_mt_arg_list::=

(arith_expr::=)

セマンティクス

arith_expr

引数値に解決される算術式を指定します。

non_mt_attr_list

目的

1つ以上の引数をストリーム要素として直接指定するには、non_mt_attr_list句を使用します。1つ以上の引数を、ストリーム要素を使用する算術式として指定するには、non_mt_arg_list::=を参照してください。

non_mt_attr_list句は次のOracle CQL文で使用できます。

- pattern_partition_clause::=

- window_type::=

- opt_group_by_clause::=

要件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

non_mt_attr_list::=

(attr::=)

セマンティクス

attr

引数をストリーム要素として直接指定します。

non_mt_attrname_list

目的

1つ以上のストリーム要素を名前で指定するには、non_mt_attrname_list句を使用します。

non_mt_attrname_list句は次のOracle CQL文で使用できます。

- 「View」

要件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

non_mt_attrname_list::=

(identifier::=)

セマンティクス

identifier

ストリーム要素を名前で指定します。

non_mt_attrspec_list

目的

ストリーム要素の識別子とデータ型を定義する1つ以上の属性仕様を指定するには、non_mt_attrspec_list句を使用します。

non_mt_attrspec_list句は次のOracle CQL文で使用できます。

- 「View」

要件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

non_mt_attrspec_list::=

(attrspec::=)

セマンティクス

attrspec

属性の識別子とデータ型を指定します。

non_mt_cond_list

目的

AND、OR、XORおよびNOTの論理演算子の任意の組合せを使用して1つ以上の条件を指定するには、non_mt_cond_list句を使用します。

non_mt_cond_list句は次のOracle CQL文で使用できます。

- correlation_name_definition::=

- searched_case::=

- opt_where_clause::=

- opt_having_clause::=

詳細は、第6章「条件」を参照してください。

要件

なし。

構文

non_mt_cond_list::=

(non_mt_cond_list::=、condition::=、between_condition::=)

セマンティクス

condition

比較条件を指定します。

詳細は、6.2項「比較条件」を参照してください。

構文については、condition::=(親: non_mt_cond_list::=)を参照してください。

between_condition

範囲に含まれているかをテストする条件を指定します。

詳細は、6.5項「範囲条件」を参照してください。

構文については、between_condition::=(親: non_mt_cond_list::=)を参照してください。

param_list

目的

関数パラメータ・リストに類似した、Oracle CQLデータ・カートリッジ複合型のメソッドまたはコンストラクタのゼロ個以上のパラメータのカンマ区切りリストを指定するには、param_list句を使用します。

param_list句は次のOracle CQL文で使用できます。

- complex_type::=

- link::=

要件

なし。

構文

param_list::=

(arith_expr::=)

qualified_type_name

目的

java.lang.Stringなど、Oracle CQLデータ・カートリッジ複合型の完全指定型名を指定するには、qualified_type_name句を使用します。Oracle CQLデータ・カートリッジの静的フィールド、静的メソッドまたはコンストラクタを呼び出す場合は、qualified_type_nameを使用します。

デフォルト・パッケージはありません。たとえば、クラスStringを参照する場合は、Javaデータ・カートリッジを使用してjava.langを指定する必要があります。予約語と修飾型を区別するには、すべての修飾型に少なくとも2つの識別子が必要であり、修飾名に少なくとも1つのピリオド(.)を使用する必要があります。

qualified_type_name句は次のOracle CQLデータ・カートリッジ文で使用できます。

- complex_type::=

- array_type::=

要件

なし。

構文

qualified_type_name::=

(arith_expr::=、package_name::=、class_name::=、link::=)

package_name::=

(identifier::=)

class_name::=

(arith_expr::=)

セマンティクス

package_name

package_name句を使用して、Oracle CQLデータ・カートリッジ・パッケージ名を指定します。

構文: package_name::=(親: qualified_type_name::=)

class_name

class_name句を使用して、Oracle CQLデータ・カートリッジClassの名前を指定します。

構文: class_name::=(親: qualified_type_name::=)

query_ref

目的

既存のOracle CQL問合せを名前で参照するには、query_ref句を使用します。

次のOracle CQL文でOracle CQL問合せを参照できます。

- 「View」

要件

問合せが存在している必要があります (「Query」を参照)。

構文

query_ref::=

(identifier::=)

セマンティクス

identifier

問合せの名前を指定します。これは、以降のOracle CQL文で問合せを参照するのに使用する名前です。

time_spec

目的

日数、時間数、分数、秒数、ミリ秒数またはナノ秒数で期間を定義するにはtime_spec句を使用します。

デフォルト: 単位を指定しない場合、Oracle CEPでは[second|seconds]が想定されます。

time_spec句は次のOracle CQL文で使用できます。

- window_type::=

- duration_clause::=

要件

なし。

構文

time_spec::=

(time_unit::=)

time_unit::=

セマンティクス

integer

時間単位の数を指定します。

time_unit

時間単位を指定します。

xml_attribute_list

目的

1つ以上のXML属性を指定するには、xml_attribute_list句を使用します。

xml_attribute_list句は次のOracle CQL文で使用できます。

- 「xmlelement_expr」

要件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

xml_attribute_list::=

(xml_attr_list::=)

セマンティクス

xml_attr_list

1つ以上のXML属性を指定します(例7-7を参照)。

例7-7 xml_attr_list

<query id="tkdata51_q1"><![CDATA[
select XMLELEMENT(NAME "S0", XMLATTRIBUTES(tkdata51_S0.c1 as "C1", tkdata51_S0.c2 as "C2"),
XMLELEMENT(NAME "c1_plus_c2", c1+c2), XMLELEMENT(NAME "c2_plus_10", c2+10.0)) from tkdata51_S0 [range 1]
]]>
</query>

構文については、xml_attr_list::=(親: xml_attribute_list::=)を参照してください。

xml_attr_list

目的

1つ以上のXML属性を指定するには、xml_attr_list句を使用します。

xml_attr_list句は次のOracle CQL文で使用できます。

- 「xml_attribute_list」

- 「xmlforest_expr」

- 「xml_agg_expr」

要件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

xml_attr_list::=

(xml_attr::=)

xml_attr::=

(const_string::=、arith_expr::=、attr::=)

セマンティクス

xml_attr

XML属性を指定します。

構文については、xml_attr::=(親: xml_attr_list::=)を参照してください。

xqryargs_list

目的

XML問合せに1つ以上の引数を指定するには、xqryargs_list句を使用します。

non_mt_arg_list句は次のOracle CQL文で使用できます。

- 「xmlexists」

- 「xmlquery」

- func_expr::=

- xmltable_clause::=

要件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

xqryargs_list::=

(xqryarg::=)

xqryarg::=

(const_string::=、arith_expr::=)

セマンティクス

xqryarg

ストリーム要素の値をXQuery変数またはXPath演算子にバインドする句。

1つ以上のストリーム要素を使用する任意の算術式を(arith_expr::=を参照)、指定されたXQueryの変数またはXPath演算子("."など)に引用符付きの文字列としてバインドできます。

構文については、xqryarg::=(親: xqryargs_list::=)を参照してください。

第II部

関数

この部は、次の章で構成されています。

- 第8章「組込みの単一行関数」

- 第9章「組込みの集計関数」

- 第10章「Colt単一行関数」

- 第11章「Colt集計関数」

- 第12章「java.lang.Math関数」

- 第13章「ユーザー定義関数」

8 組込みの単一行関数

この章では、Oracle Continuous Query Language (Oracle CQL)の単一行関数のリファレンスを提供します。単一行関数は、問い合せたストリームまたはビューのすべての行について単一行の結果を返します。

詳細は、1.1.11項「関数」を参照してください。

8.1 Oracle CQLの組込みの単一行関数の概要

表8-1は、Oracle CQLに用意されている組込みの単一行関数を示しています。

表8-1 Oracle CQLの組込みの単一行関数

型

関数

文字(文字値を返す)

- concat

文字(数値を返す)

- length

日時

- systimestamp

変換

- to_bigint

- to_boolean

- to_char

- to_double

- to_float

- to_timestamp

XMLとSQLX

- xmlcomment

- xmlconcat

- xmlexists

- xmlquery

エンコードとデコード

- hextoraw

- rawtohex

Null関連

- nvl

パターン一致

- lk

- prev

注意:

組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

詳細は、以下を参照してください。

- 1.1.11項「関数」

- 2.1項「データ型」

concat

構文

目的

concatは、char2に連結されたchar1をchar[]として返すか、byte2に連結されたbyte1をbyte[]として返します。返されるcharは、char1と同じ文字セット内にあります。そのデータ型は引数のデータ型によって異なります。

concatを使用すると、任意の組合せの文字、バイトおよび数値データ型を連結できます。concatでは、数値を文字列に自動変換します。

この関数は、連結演算子(||)に相当します。詳細は、「連結演算子」を参照してください。

xmltypeの引数を連結するには、xmlconcatを使用します。詳細は、「xmlconcat」を参照してください

例

concat関数

例8-1の問合せchr_concatと例8-2のデータ・ストリームS4があるとします。ストリームS4のスキーマは(c1 char(10))です。例8-3は、問合せで返されるリレーションを示します。

例8-1 concat関数の問合せ

<query id="chr_concat"><![CDATA[
select
concat(c1,c1),
concat("abc",c1),
concat(c1,"abc")
from
S4[range 5]
]]></query>

例8-2 concat関数のストリーム入力

Timestamp   Tuple
1000
2000       hi
8000       hi1
9000
15000       xyz
h 200000000

例8-3 concat関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:      +           ,abc,abc
2000:      +           hihi,abchi,hiabc
6000:      -           ,abc,abc
7000:      -           hihi,abchi,hiabc
8000:      +           hi1hi1,abchi1,hi1abc
9000:      +           ,abc,abc
13000:      -           hi1hi1,abchi1,hi1abc
14000:      -           ,abc,abc
15000:      +           xyzxyz,abcxyz,xyzabc
20000:      -           xyzxyz,abcxyz,xyzabc

連結演算子(||)

例8-4の問合せq264と例8-5のデータ・ストリームS10があるとします。ストリームS10のスキーマは(c1 integer, c2 char(10))です。例8-6は、問合せで返されるリレーションを示します。

例8-4 連結演算子(||)の問合せ

<query id="q264"><![CDATA[
select
c2 || "xyz"
from
S10
]]></query>

例8-5 連結演算子(||)のストリーム入力

Timestamp   Tuple
1           1,abc
2           2,ab
3           3,abc
4           4,a
h 200000000

例8-6 連結演算子(||)のリレーション出力

Timestamp   Tuple Kind  Tuple
1:          +           abcxyz
2:          +           abxyz
3:          +           abcxyz
4:          +           axyz

hextoraw

構文

目的

hextorawは、char文字セット内の16進数を含むcharをRAW値に変換します。

関連項目:

「rawtohex」

例

例8-7の問合せq6と例8-8のデータ・ストリームSinpByte1があるとします。ストリームSinpByte1のスキーマは(c1 byte(10), c2 integer)です。例8-9は、問合せで返されるリレーションを示します。

例8-7 hextoraw関数の問合せ

<query id="q6"><![CDATA[
select * from SByt[range 2]
where
bytTest(c2) between hextoraw("5200") and hextoraw("5600")
]]></query>

例8-8 hextoraw関数のストリーム入力

Timestamp   Tuple
1000        1,"51c1"
2000        2,"52"
3000        3,"53aa"
4000        4,"5"
5000         ,"55ef"
6000        6,
h 8000
h 200000000

例8-9 hextoraw関数のリレーション出力

Timestamp   Tuple Kind  Tuple
2000        +           2,"52"
3000        +           3,"53aa"
4000        -           2,"52"
5000        -           3,"53aa"
5000        +            ,"55ef"
7000        -            ,"55ef"

length

構文

目的

length関数は、char式またはbyte式の長さをintとして返します。lengthでは、入力文字セットで定義されている文字を使用して長さを計算します。

char式の場合は、すべての末尾の空白が長さに含まれます。式がnullの場合、この関数はnullを返します。

例

例8-10の問合せchr_lenと例8-11のデータ・ストリームS2があるとします。ストリームS2のスキーマは(c1 integer, c2 integer)です。例8-12は、問合せで返されるリレーションを示します。

例8-10 length関数の問合せ

<query id="chr_len"><![CDATA[
select length(c1) from S4[range 5]
]]></query>

例8-11 length関数のストリーム入力

Timestamp   Tuple
1000
2000       hi
8000       hi1
9000
15000       xyz
h 200000000

例8-12 length関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:      +           0
2000:      +           2
6000:      -           0
7000:      -           2
8000:      +           3
9000:      +           0
13000:      -           3
14000:      -           0
15000:      +           3
20000:      -           3

lk

構文

目的

char1が正規表現char2に一致する場合、lkはブール値trueを返します。それ以外の場合は、falseを返します。

この関数は、LIKE条件に相当します。詳細は、6.4項「LIKE条件」を参照してください。

例

例8-13の問合せq291と例8-14のデータ・ストリームSLk1があるとします。ストリームSLk1のスキーマは(first1 char(20), last1 char(20))です。例8-15は、問合せで返されるリレーションを示します。

例8-13 lk関数の問合せ

<query id="q291"><![CDATA[
select * from SLk1
where
lk(first1,"^Ste(v|ph)en$")
]]></query>

例8-14 lk関数のストリーム入力

Timestamp   Tuple
1           Steven,King
2           Sten,Harley
3           Stephen,Stiles
4           Steven,Markles
h 200000000

例8-15 lk関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1:          +           Steven,King
3:          +           Stephen,Stiles
4:          +           Steven,Markles

nvl

構文

目的

nvlを使用すると、空白として返されるnullを問合せの結果内の文字列に置き換えることができます。expr1がnullの場合、NVLはexpr2を返します。expr1がnullでない場合、NVLはexpr1を返します。

引数expr1とexpr2は任意のデータ型にすることができます。この2つのデータ型が異なる場合、Oracle CEPでは一方の型をもう一方にあわせるように暗黙的に変換します。暗黙的な変換を行うことができない場合、Oracle CEPはエラーを返します。この暗黙的な変換は次のように実装されます。

- expr1が文字データの場合、Oracle CEPではexpr2を文字データに変換してから比較を行い、expr1の文字セット内のVARCHAR2を返します。

- expr1が数値の場合、Oracle CEPでは数値の優先順位が最も高い引数を判断し、他の引数をそのデータ型に暗黙的に変換して、そのデータ型を返します。

例

例8-16の問合せq281と例8-17のデータ・ストリームSNVLがあるとします。ストリームSNVLのスキーマは(c1 char(20), c2 integer)です。例8-18は、問合せで返されるリレーションを示します。

例8-16 nvl関数の問合せ

<query id="q281"><![CDATA[
select nvl(c1,"abcd") from SNVL
]]></query>

例8-17 nvl関数のストリーム入力

Timestamp   Tuple
1              ,1
2            ab,2
3           abc,3
4              ,4
h 200000000

例8-18 nvl関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1:          +           abcd
2:          +           ab
3:          +           abc
4:          +           abcd

prev

構文

目的

prevは、現在のイベントが属するパーティション内にある、現在のイベントの前に発生したイベントのストリーム属性(関数の引数identifier2)の値を返します。該当する前のイベントがない場合は、NULLと評価されます。

指定されるストリーム要素の型は、次のいずれかになります。

- integer

- bigint

- float

- double

- byte

- char

- interval

- timestamp

この関数の戻り値の型は、指定されたストリーム属性の型によって異なります(関数の引数identifier2)。

この関数は次の引数を使用します。

- prev(identifier1.identifier2)

- prev(identifier1.identifier2, const_int1)

- prev(identifier1.identifier2, const_int1, const_int2)

説明:

- identifier1.identifier2: identifier1はPATTERN句で使用されDEFINE句で定義される相関変数の名前で、identifier2はprevによって前のイベントの値が返されるストリーム属性の名前です。

- const_int1: この引数の値がnの場合、現在のイベントが属するパーティション内のn個前のイベントを指定します。このようなイベントが存在する場合、n個前のイベントの属性値(引数identifier2で指定される)が返され、それ以外の場合はNULLが返されます。

- const_int2: 時間範囲をナノ秒で指定し、現在のイベントより特定の時間範囲以内に発生した前のイベントのみを探す場合に使用します。

関連項目:

- 「first」

- 「last」

- 「func_expr」

- pattern_recognition_clause::=

例

prev(identifier1.identifier2)

例8-19の問合せq2と例8-20のデータ・ストリームS1があるとします。ストリームS1のスキーマは(c1 integer)です。この例では、パターンAをA.c1 = prev(A.c1)と定義します。つまり、現在のストリーム要素のc1の値が現在のストリーム要素の直前にあるストリーム要素のc1の値と一致する場合に、パターンAが一致します。この問合せは、例8-21に示すリレーションを返します。

例8-19 prev(identifier1.identifier2)関数の問合せ

<query id="q2"><![CDATA[
select
T.Ac1,
T.Cc1
from
S1
MATCH_RECOGNIZE (
MEASURES
A.c1 as Ac1,
C.c1 as Cc1
PATTERN(A B+ C)
DEFINE
A as A.c1 = prev(A.c1),
B as B.c1 = 10,
C as C.c1 = 7
) as T
]]></query>

例8-20 prev(identifier1.identifier2)関数のストリーム入力

Timestamp   Tuple
1000        35
3000        35
4000        10
5000         7

例8-21 prev(identifier1.identifier2)関数のリレーション出力

Timestamp   Tuple Kind  Tuple
5000:       +           35,7

prev(identifier1.identifier2, const_int1)

例8-22の問合せq35と例8-23のデータ・ストリームS15があるとします。ストリームS15のスキーマは(c1 integer, c2 integer)です。この例では、パターンAをA.c1 = prev(A.c1,3)と定義します。つまり、現在のストリーム要素のc1の値が現在のストリーム要素の3つ前にあるストリーム要素のc1の値と一致する場合に、パターンAが一致します。この問合せは、例8-24に示すリレーションを返します。

例8-22 prev(identifier1.identifier2, const_int1)関数の問合せ

<query id="q35"><![CDATA[
select T.Ac1 from S15
MATCH_RECOGNIZE (
MEASURES
A.c1 as Ac1
PATTERN(A)
DEFINE
A as (A.c1 = prev(A.c1,3) )
) as T
]]></query>

例8-23 prev(identifier1.identifier2, const_int1)関数のストリーム入力

Timestamp   Tuple
1000       45,20
2000       45,30
3000        45,30
4000       45,30
5000       45,30
6000       45,20
7000       45,20
8000       45,20
9000       43,40
10000       52,10
11000       52,30
12000       43,40
13000       52,50
14000       43,40
15000       43,40

例8-24 prev(identifier1.identifier2, const_int1)関数のリレーション出力

Timestamp   Tuple Kind  Tuple
3000:       +          45
4000:       +          45
5000:       +          45
6000:       +          45
7000:       +          45
8000:       +          45
13000:       +          52
15000:       +          43

prev(identifier1.identifier2, const_int1, const_int2)

例8-26の問合せq36と例8-27のデータ・ストリームS15があるとします。ストリームS15のスキーマは(c1 integer, c2 integer)です。この例では、パターンAをA.c1 = prev(A.c1,3,5000000000L)と定義します。つまり、次の場合にパターンAが一致します。

- 現在のイベントのc1の値が、現在のイベントが属するパーティション内の3つ前のイベントのc1の値と一致する場合、および

- 現在のイベントのタイムスタンプと3つ前のイベントのタイムスタンプの差が、5000000000Lナノ秒以下である場合。

この問合せは、例8-28に示す出力リレーションを返します。出力リレーションには、8000での出力はありません。例8-25は、8000でのイベントが属する(c2属性の値でパーティション化された)パーティションのコンテンツを示しています。

例8-25 8000でのイベントを含むパーティション

Timestamp   Tuple
1000        45,20
6000        45,20
7000        45,20
8000        45,20

例8-25に示すように、3つ前のイベント(1000でのイベント)のc1の値が現在のイベント(8000でのイベント)のc1の値と等しくても、範囲条件は満たされません。これら2つのイベントのタイムスタンプの差が5000000000ナノ秒を超えているためです。前のタプルは存在しないものとして処理され、prevはNULLを返すため、条件は一致しません。

例8-26 prev(identifier1.identifier2, const_int1, const_int2)関数の問合せ

<query id="q36"><![CDATA[
select T.Ac1 from S15
MATCH_RECOGNIZE (
PARTITION BY
c2
MEASURES
A.c1 as Ac1
PATTERN(A)
DEFINE
A as (A.c1 = prev(A.c1,3,5000000000L) )
) as T
]]></query>

例8-27 prev(identifier1.identifier2, const_int1, const_int2)関数のストリーム入力

Timestamp   Tuple
1000       45,20
2000       45,30
3000       45,30
4000       45,30
5000       45,30
6000       45,20
7000       45,20
8000       45,20
9000       43,40
10000       52,10
11000       52,30
12000       43,40
13000       52,50
14000       43,40
15000       43,40

例8-28 prev(identifier1.identifier2, const_int1, const_int2)関数のリレーション出力

Timestamp   Tuple Kind  Tuple
5000:       +           45

rawtohex

構文

目的

rawtohexは、RAW値を含むbyteをchar文字セット内の16進数に変換します。

関連項目:

「hextoraw」

例

例8-29の問合せbyte_to_hexと例8-30のデータ・ストリームS5があるとします。ストリームS5のスキーマは(c1 integer, c2 byte(10))です。この問合せでは、rawtohex関数を使用して、10バイトのRAW値を、現在のロケールの文字セット内にある同等の10個の16進数に変換します。この問合せは、例8-31に示すリレーションを返します。

例8-29 rawtohex関数の問合せ

<query id="byte_to_hex"><![CDATA[
select rawtohex(c2) from S5[range 4]
]]></query>

例8-30 rawtohex関数のストリーム入力

Timestamp   Tuple
1000        1,"51c1"
2000        2,"52"
2500        7,"axc"
3000        3,"53aa"
4000        4,"5"
5000         ,"55ef"
6000        6,
h 8000
h 200000000

例8-31 rawtohex関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:      +           51c1
2000:      +           52
3000:      +           53aa
4000:      +           05
5000:      -           51c1
5000:      +           55ef
6000:      -           52
6000:      +
7000:      -           53aa
8000:      -           05
9000:      -           55ef
10000:      -

systimestamp

構文

目的

systimestampは、Oracle CEPサーバーが存在するシステムのシステム日付(小数で表す秒数とタイム・ゾーンを含む)を返します。戻り値の型は、TIMESTAMP WITH TIME ZONEです。

例

例8-32の問合せq106と例8-33のデータ・ストリームS0があるとします。ストリームS0のスキーマは(c1 float, c2 integer)です。この問合せは、例8-34に示すリレーションを返します。caseの詳細は、「case_expr」を参照してください。

例8-32 systimestamp関数の問合せ

<query id="q106"><![CDATA[
select * from S0
where
case c2
when 10 then null
when 20 then null
else systimestamp()
end > "07/06/2007 14:13:33"
]]></query>

例8-33 systimestamp関数のストリーム入力

Timestamp   Tuple
1000   0.1 ,10
1002   0.14,15
200000   0.2 ,20
400000   0.3 ,30
500000   0.3 ,35
600000       ,35
h 800000
100000000   4.04,40
h 200000000

例8-34 systimestamp関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1002:  +           0.14,15
400000:  +           0.3 ,30
500000:  +           0.3 ,35
600000:  +               ,35
100000000:  +           4.04,40

to_bigint

構文

目的

to_bigintは、integerの引数と同等のbigintの数値を返します。

詳細は、以下を参照してください。

- arith_expr::=

- 2.2.4.2項「明示的なデータ型変換」

例

例8-35の問合せq282と例8-36のデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。例8-37は、問合せで返されるリレーションを示します。

例8-35 to_bigint関数の問合せ

<query id="q282"><![CDATA[
select nvl(to_bigint(c1), 5.2) from S11
]]></query>

例8-36 to_bigint関数のストリーム入力

Timestamp   Tuple
10        1,abc
2000         ,ab
3400        3,abc
4700         ,a
h 8000
h 200000000

例8-37 to_bigint関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1
2000:       +           5.2
3400:       +           3
4700:       +           5.2

to_boolean

構文

目的

to_booleanは、bigint式またはinteger式の引数に対して値trueまたはfalseを返します。

詳細は、以下を参照してください。

- arith_expr::=

- 2.2.4.2項「明示的なデータ型変換」

例

例8-35の問合せq282と例8-36のデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。例8-37は、問合せで返されるリレーションを示します。

例8-38 to_boolean関数の問合せ

<view id="v2" schema="c1 c2" ><![CDATA[
select to_boolean(c1), c1 from tkboolean_S3 [now] where c2 = 0.1
]]></view><query id="q1"><![CDATA[
select * from v2
]]></query>

例8-39 to_boolean関数のストリーム入力

Timestamp   Tuple
1000        -2147483648, 0.1
2000        2147483647, 0.2
3000        12345678901, 0.3
4000        -12345678901, 0.1
5000        9223372036854775799, 0.2
6000        -9223372036854775799, 0.3
7000        , 0.1
8000        10000000000, 0.2
9000        60000000000, 0.3
h 200000000

例8-40 to_boolean関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1000      +           true,-2147483648
1000      -           true,-2147483648
4000      +           true,-12345678901
4000      -           true,-12345678901
7000      +           ,
7000      -           ,

to_char

構文

目的

to_charは、integer、double、bigint、float、timestampまたはinterval式の引数に対してcharの値を返します。bigintの引数がcharの精度を超える場合、Oracle CEPはエラーを返します。

詳細は、以下を参照してください。

- arith_expr::=

- 2.2.4.2項「明示的なデータ型変換」

例

例8-35の問合せq282と例8-36のデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。例8-37は、問合せで返されるリレーションを示します。

例8-41 to_char関数の問合せ

<query id="q1"><![CDATA[
select to_char(c1), to_char(c2), to_char(c3), to_char(c4), to_char(c5), to_char(c6)
from S1
]]></query>

例8-42 to_char関数のストリーム入力

Timestamp   Tuple
1000        99,99999, 99.9, 99.9999, "4 1:13:48.10", "08/07/2004 11:13:48", cep

例8-43 to_char関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           99,99999,99.9,99.9999,4 1:13:48.10,08/07/2004 11:13:48

to_double

構文

目的

to_doubleは、bigint、integerまたはfloat式の引数に対してdoubleの値を返します。bigintの引数がdoubleの精度を超える場合、Oracle CEPはエラーを返します。

詳細は、以下を参照してください。

- arith_expr::=

- 2.2.4.2項「明示的なデータ型変換」

例

例8-35の問合せq282と例8-36のデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。例8-37は、問合せで返されるリレーションを示します。

例8-44 to_double関数の問合せ

<query id="q282"><![CDATA[
select nvl(to_double(c1), 5.2) from S11
]]></query>

例8-45 to_double関数のストリーム入力

Timestamp   Tuple
10        1,abc
2000         ,ab
3400        3,abc
4700         ,a
h 8000
h 200000000

例8-46 to_double関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1
2000:       +           5.2
3400:       +           3
4700:       +           5.2

to_float

構文

目的

to_floatは、bigintまたはintegerの引数と同等のfloatの数値を返します。bigintの引数がfloatの精度を超える場合、Oracle CEPはエラーを返します。

詳細は、以下を参照してください。

- arith_expr::=

- 2.2.4.2項「明示的なデータ型変換」

例

例8-47の問合せq1と例8-48のデータ・ストリームS11があるとします。ストリームS1のスキーマは(c1 integer, name char(10))です。例8-49は、問合せで返されるリレーションを示します。

例8-47 to_float関数の問合せ

<query id="q1"><![CDATA[
select nvl(to_float(c1), 5.2) from S11
]]></query>

例8-48 to_float関数のストリーム入力

Timestamp   Tuple
10        1, abc
2000         , ab
3400        3, abc
4700         , a
h 8000
h 200000000

例8-49 to_float関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:+ 1.02000:+ 5.23400:+ 3.04700:+ 5.2

to_timestamp

構文

目的

to_timestampは、java.text.SimpleDateFormatの書式モデルに準拠しているcharリテラルをtimestampデータ型に変換します。to_timestamp関数には次の2つの形式があり、引数の数で区別されます。

- char: この形式のto_timestamp関数では、デフォルトのjava.text.SimpleDateFormatの書式モデル(MM/dd/yyyy HH:mm:ss)に準拠しているcharリテラルを含む1つのcharの引数を、対応するtimestampデータ型に変換します。

- char1, char2: この形式のto_timestamp関数では、2番目のchar2の引数で指定された java.text.SimpleDateFormatの書式モデルに準拠しているcharリテラルを含むchar1の引数を、対応するtimestampデータ型に変換します。

- long: この形式のto_timestamp関数では、January 1, 1970, 00:00:00 GMTなど、"Epoch"(エポック)と呼ばれる標準の基本時間以降のナノ秒を示す1つのlong引数を、デフォルトのjava.text.SimpleDateFormatの書式モデル(MM/dd/yyyy HH:mm:ss)に準拠している日付書式で、"Epoch"(エポック)以降のミリ秒として表現される対応するtimestampデータ型に変換します。

詳細は、以下を参照してください。

- 2.1.1項「Oracle CQL組込みデータ型」

- 2.3.3項「日時リテラル」

- 2.4.2項「日時書式モデル

例

例8-50の問合せq277と例8-51のデータ・ストリームSTs2があるとします。ストリームSTs2のスキーマは(c1 integer, c2 char(20))です。例8-52は、問合せで返されるリレーションを示します。

例8-50 to_timestamp関数の問合せ

<query id="q277"><![CDATA[
select * from STs2
where
to_timestamp(c2,"yyMMddHHmmss") = to_timestamp("09/07/2005 10:13:48")
]]></query>

例8-51 to_timestamp関数のストリーム入力

Timestamp   Tuple
1           1,"040807111348"
2           2,"050907101348"
3           3,"041007111348"
4           4,"060806111248"
h 200000000

例8-52 to_timestamp関数のリレーション出力

Timestamp   Tuple Kind  Tuple
2:          +           2,050907101348

xmlcomment

構文

目的

xmlcommentは、二重引用符で区切られた定数Stringの引数をxmltypeとして返します。

xmlcommentを使用すると、整形式のXMLコメントを問合せ結果に追加できます。

この関数は次の引数を使用します。

- quoted_string_double_quotes: 二重引用符で区切られたString定数。

この関数の戻り値の型はxmltypeです。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。

関連項目:

- const_string::=

- 「SQL/XML (SQLX)」

例

例8-53の問合せtkdata64_q1と例8-54のデータ・ストリームtkdata64_Sがあるとします。ストリームtkdata64_Sのスキーマは(c1 char(30))です。例8-55は、問合せで返されるリレーションを示します。

例8-53 xmlcomment関数の問合せ

<query id="tkdata64_q1"><![CDATA[
xmlconcat(xmlelement("parent", c1), xmlcomment("this is a comment"))
from tkdata64_S
]]></query>

例8-54 xmlcomment関数のストリーム入力

Timestamp   Tuple
c 30
1000        "san jose"
1000        "mountain view"
1000
1000        "sunnyvale"
1003
1004        "belmont"

例8-55 xmlcomment関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           <parent>san jose</parent>
<!--this is a comment-->
1000:       +           <parent>mountain view</parent>
<!--this is a comment-->
1000:       +           <parent/>
<!--this is a comment-->
1000:       +           <parent>sunnyvale</parent>
<!--this is a comment-->
1003:       +           <parent/>
<!--this is a comment-->
1004:       +           <parent>belmont</parent>
<!--this is a comment-->

xmlconcat

構文

目的

xmlconcatは、カンマで区切られたxmltypeの引数の連結をxmltypeとして返します。

xmlconcatを使用すると、任意の組合せのxmltypeの引数を連結できます。

この関数は次の引数を使用します。

- non_mt_arg_list: カンマで区切られたxmltypeの引数のリスト。詳細は、non_mt_arg_list::=を参照してください。

この関数の戻り値の型はxmltypeです。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。

この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

xmltype以外のデータ型を連結するには、CONCATを使用します。詳細は、「concat」を参照してください。

関連項目:

「SQL/XML (SQLX)」

例

例8-53の問合せtkdata64_q1と例8-54のデータ・ストリームtkdata64_Sがあるとします。ストリームtkdata64_Sのスキーマは(c1 char(30))です。例8-55は、問合せで返されるリレーションを示します。

例8-56 xmlconcat関数の問合せ

<query id="tkdata64_q1"><![CDATA[
select
xmlconcat(xmlelement("parent", c1), xmlcomment("this is a comment"))
from tkdata64_S
]]></query>

例8-57 xmlconcat関数のストリーム入力

Timestamp   Tuple
c 30
1000        "san jose"
1000        "mountain view"
1000
1000        "sunnyvale"
1003
1004        "belmont"

例8-58 xmlconcat関数のリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           <parent>san jose</parent>
<!--this is a comment-->
1000:       +           <parent>mountain view</parent>
<!--this is a comment-->
1000:       +           <parent/>
<!--this is a comment-->
1000:       +           <parent>sunnyvale</parent>
<!--this is a comment-->
1003:       +           <parent/>
<!--this is a comment-->
1004:       +           <parent>belmont</parent>
<!--this is a comment-->

xmlexists

構文

目的

xmlexistsは、XMLデータのストリームに対する連続した問合せを作成します。この問合せでは、指定したXQueryをXMLデータが満たすかどうかを示すbooleanを返します。

この関数は次の引数を使用します。

- const_string: xqryargs_listでバインドするXMLストリーム要素のデータにOracle CEPが適用するXQuery。詳細は、const_string::=を参照してください。

- xqryargs_list: ストリーム要素とXQuery変数またはXPath演算子との間の1つまたは複数のバインディングのリスト。詳細は、xqryargs_list::=を参照してください。

この関数の戻り値の型はbooleanです。XQueryを満たす場合はtrue、それ以外の場合はfalseです。

この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

関連項目:

- 「xmlquery」

- func_expr::=

- xmltable_clause::=

- 「SQL/XML (SQLX)」

例

例8-59の問合せq1と例8-60のXMLデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 integer, c2 xmltype)です。この例では、ストリーム要素c2の値が現在のノード(".")にバインドされ、ストリーム要素c1 + 1の値がXQuery変数xにバインドされます。この問合せは、例8-61に示すリレーションを返します。

例8-59 xmlexists関数の問合せ

<query id="q1"><![CDATA[
SELECT
xmlexists(
"for $i in /PDRecord WHERE $i/PDId <= $x RETURN $i/PDName"
PASSING BY VALUE
c2 as ".",
(c1+1) AS "x"
RETURNING CONTENT
) XMLData
FROM
S
]]></query>

例8-60 xmlexists関数のストリーム入力

Timestamp   Tuple
3           1, "<PDRecord><PDName>hello</PDName></PDRecord>"
4           2, "<PDRecord><PDName>hello</PDName><PDName>hello1</PDName></PDRecord>"
5           3, "<PDRecord><PDId>6</PDId><PDName>hello1</PDName></PDRecord>"
6           4, "<PDRecord><PDId>46</PDId><PDName>hello2</PDName></PDRecord>"

例8-61 xmlexists関数のリレーション出力

Timestamp   Tuple Kind  Tuple
3:          +           false
4:          +           false
5:          +           true
6:          +           false

xmlquery

構文

目的

xmlqueryは、XMLデータのストリームに対する連続した問合せを作成します。この問合せでは、指定したXQueryを満たすXMLデータを返します。

この関数は次の引数を使用します。

- const_string: xqryargs_listでバインドするXMLストリーム要素のデータにOracle CEPが適用するXQuery。詳細は、const_string::=を参照してください。

- xqryargs_list: ストリーム要素とXQuery変数またはXPath演算子との間の1つまたは複数のバインディングのリスト。詳細は、xqryargs_list::=を参照してください。

この関数の戻り値の型はxmltypeです。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。

この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

関連項目:

- 「xmlexists」

- func_expr::=

- xmltable_clause::=

- 「SQL/XML (SQLX)」

例

例8-62の問合せq1と例8-63のXMLデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 integer, c2 xmltype)です。この例では、ストリーム要素c2の値が現在のノード(".")にバインドされ、ストリーム要素c1 + 1の値がXQuery変数xにバインドされます。この問合せは、例8-64に示すリレーションを返します。

例8-62 xmlquery関数の問合せ

<query id="q1"><![CDATA[
SELECT
xmlquery(
"for $i in /PDRecord WHERE $i/PDId <= $x RETURN $i/PDName"
PASSING BY VALUE
c2 as ".",
(c1+1) AS "x"
RETURNING CONTENT
) XMLData
FROM
S
]]></query>

例8-63 xmlquery関数のストリーム入力

Timestamp   Tuple
3           1, "<PDRecord><PDName>hello</PDName></PDRecord>"
4           2, "<PDRecord><PDName>hello</PDName><PDName>hello1</PDName></PDRecord>"
5           3, "<PDRecord><PDId>6</PDId><PDName>hello1</PDName></PDRecord>"
6           4, "<PDRecord><PDId>46</PDId><PDName>hello2</PDName></PDRecord>"

例8-64 xmlquery関数のリレーション出力

Timestamp   Tuple Kind  Tuple
3:          +
4:          +
5:          +           "<PDName>hello1</PDName>"
6:          +           "<PDName>hello2</PDName>"

9 組込みの集計関数

この章では、Oracle Continuous Query Language (Oracle CQL)に含まれる組込みの集計関数のリファレンスを提供します。組込みの集計関数は、問合せが返すすべての値の集計操作を行います。

詳細は、1.1.11項「関数」を参照してください。

9.1 Oracle CQLの組込みの集計関数の概要

表9-1に、Oracle CQLに用意されている組込みの集計関数を示します。

表9-1 Oracle CQLの組込みの集計関数

型

関数

集計

- max

- min

- xmlagg

集計(増分計算)

- avg

- count

- sum

拡張集計

- first

- last

builtin_aggr::=

builtin_aggr_incr::=

extended_builtin_aggr::=

選択された重複するタプルの各セットのコピーを1つだけOracle CEPが返すようにする場合は、distinctを指定します。重複タプルとはselectリスト内の各式と一致する値を持つタプルです。詳細は、aggr_distinct_exprを参照してください。

Oracle CEP ではネストされた集計をサポートしていません。

注意:

組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

詳細は、以下を参照してください。

- 9.1.1項「組込み集計関数とWhere、Group ByおよびHaving句」

- 1.1.2項「リレーションからリレーションへの演算子」

- 1.1.11項「関数」

- 2.1項「データ型」

- select_clause::=

9.1.1 組込み集計関数とWhere、Group ByおよびHaving句

Oracle CQLでは、where句はgroup by句およびhaving句の前に適用されます。したがって、例9-1のOracle CQL文は無効です。

例9-1 countの無効な使用

<query id="q1"><![CDATA[
select * from InputChanel[rows 4 slide 4] as ic where count(*) = 4
]]></query>

例9-2に示すようなOracle CQL文を使用する必要があります。

例9-2 countの有効な使用

<query id="q1"><![CDATA[
select * from InputChanel[rows 4 slide 4] as ic, count(*) as myCount having myCount = 4
]]></query>

詳細は、以下を参照してください。

- 「opt_where_clause::=」

- 「opt_group_by_clause::=」

- 「opt_having_clause::=」

avg

構文

目的

avgは、exprの平均値を返します。

この関数は、bigint、floatまたはintデータ型を引数として使用します。また、引数の数値データ型に関係なくfloatを返します。

例

例9-3の問合せfloat_avgと例9-4のデータ・ストリームS3があるとします。ストリームS3のスキーマは(c1 float)です。この問合せは、例9-5に示すリレーションを返します。平均値が数字でない場合、avg関数はNaNの結果を返します。詳細は、2.3.2項「数値リテラル」を参照してください。

例9-3 avg関数の問合せ

<query id="float_avg"><![CDATA[
select avg(c1) from S3[range 5]
]]></query>

例9-4 avg関数のストリーム入力

Timestamp   Tuple
1000
2000        5.5
8000        4.4
9000
15000       44.2
h 200000000

例9-5 avg関数のリレーション出力

Timestamp   Tuple Kind  Tuple
0:      +
1000:      -
1000:      +            0.0
2000:      -            0.0
2000:      +            5.5
6000:      -            5.5
6000:      +            5.5
7000:      -            5.5
7000:      +
8000:      -
8000:      +            4.4
9000:      -            4.4
9000:      +            4.4
13000:      -            4.4
13000:      +           NaN
14000:      -           NaN
14000:      +
15000:      -
15000:      +           44.2
20000:      -           44.2
20000:      +

count

構文

(arith_expr::=、attr::=、identifier::=)

目的

countは、問合せが返すタプル数をintの値として返します。

表9-2に示すように、戻り値は引数によって異なります。

表9-2 COUNT集計関数の戻り値

入力引数

戻り値

arith_expr

arith_exprがnullでない場合のタプルの数。

*

重複とnullを含む、すべてのタプルの数。

identifier.*

相関変数identifierと一致する、重複とnullを含む、すべてのタプルの数。

identifier.attr

attrがnullでない場合に、相関変数identifierと一致するタプルの数。

countは、nullを返しません。

例

例9-6の問合せq2と例9-7のデータ・ストリームS2があるとします。ストリームS2のスキーマは(c1 integer, c2 integer)です。例9-8は、問合せで返されるリレーションを示します。

例9-6 count関数の問合せ

<query id="q2"><![CDATA[
SELECT COUNT(c2), COUNT(*) FROM  S [RANGE 10]
]]></query>

例9-7 count関数のストリーム入力

Timestamp   Tuple
1000        1,2
2000        1,
3000        1,4
6000        1,6

例9-8 count関数のリレーション出力

Timestamp                Tuple Kind  Tuple
-9223372036854775808:    +           0,0
1000:                    -           0,0
1000:                    +           1,1
2000:                    -           1,1
2000:                    +           1,2
3000:                    -           1,2
3000:                    +           2,3
6000:                    -           2,3

詳細は、以下を参照してください。

- 19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」

- 「範囲ベースのストリームからリレーションへのウィンドウ演算子」

first

構文

目的

firstは、指定されたパターンに最初に一致する、指定されたストリーム要素の値を返します。

指定されるストリーム要素の型は、次のいずれかになります。

- bigint

- integer

- byte

- char

- float

- interval

- timestamp

この関数の戻り値の型は、指定されたストリーム要素の型によって異なります。

この関数は、ピリオドで区切られた次の値で構成される1つの引数を使用します。

- identifier1: DEFINE句で指定されたパターンの名前。

- identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

関連項目:

- 「last」

- 「prev」

- pattern_recognition_clause::=

例

例9-9の問合せq9と例9-10のデータ・ストリームS0があるとします。ストリームS0のスキーマは(c1 integer, c2 float)です。この例では、パターンCをC.c1 = 7と定義します。また、firstcをfirst(C.c2)と定義します。つまり、最初にc1 = 7になった場合に、firstcは値c2と等しくなります。この問合せは、例9-11に示すリレーションを返します。

例9-9 first関数の問合せ

<query id="q9"><![CDATA[
select
T.firstc,
T.lastc,
T.Ac1,
T.Bc1,
T.avgCc1,
T.Dc1
from
S0
MATCH_RECOGNIZE (
MEASURES
first(C.c2) as firstc,
last(C.c2) as lastc,
avg(C.c1) as avgCc1,
A.c1 as Ac1,
B.c1 as Bc1,
D.c1 as Dc1
PATTERN(A B C* D)
DEFINE
A as A.c1 = 30,
B as B.c2 = 10.0,
C as C.c1 = 7,
D as D.c1 = 40
) as T
]]></query>

例9-10 first関数のストリーム入力

Timestamp   Tuple
1000       33,0.9
3000       44,0.4
4000       30,0.3
5000       10,10.0
6000        7,0.9
7000        7,2.3
9000        7,8.7
11000       40,6.6
15000       19,8.8
17000       30,5.5
20000        5,10.0
23000       40,6.6
25000        3,5.5
30000       30,2.2
35000        2,10.0
40000        7,5.5
44000       40,8.9

例9-11 first関数のリレーション出力

Timestamp   Tuple Kind  Tuple
11000:      +           0.9,8.7,30,10,7.0,40
23000:      +           ,,30,5,,40
44000:      +           5.5,5.5,30,2,7.0,40

last

構文

目的

lastは、指定されたパターンに最後に一致する、指定されたストリーム要素の値を返します。

指定されるストリーム要素の型は、次のいずれかになります。

- bigint

- integer

- byte

- char

- float

- interval

- timestamp

この関数の戻り値の型は、指定されたストリーム要素の型によって異なります。

この関数は、ピリオドで区切られた次の値で構成される1つの引数を使用します。

- identifier1: DEFINE句で指定されたパターンの名前。

- identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

関連項目:

- 「first」

- 「prev」

- pattern_recognition_clause::=

例

例9-12の問合せq9と例9-13のデータ・ストリームS0があるとします。ストリームS1のスキーマは(c1 integer, c2 float)です。この例では、パターンCをC.c1 = 7と定義します。また、lastcをlast(C.c2)と定義します。つまり、最後にc1 = 7になった場合に、lastcは値c2と等しくなります。この問合せは、例9-14に示すリレーションを返します。

例9-12 last関数の問合せ

<query id="q9"><![CDATA[
select
T.firstc,
T.lastc,
T.Ac1,
T.Bc1,
T.avgCc1,
T.Dc1
from
S0
MATCH_RECOGNIZE (
MEASURES
first(C.c2) as firstc,
last(C.c2) as lastc,
avg(C.c1) as avgCc1,
A.c1 as Ac1,
B.c1 as Bc1,
D.c1 as Dc1
PATTERN(A B C* D)
DEFINE
A as A.c1 = 30,
B as B.c2 = 10.0,
C as C.c1 = 7,
D as D.c1 = 40
) as T
]]></query>

例9-13 last関数のストリーム入力

Timestamp   Tuple
1000       33,0.9
3000       44,0.4
4000       30,0.3
5000       10,10.0
6000        7,0.9
7000        7,2.3
9000        7,8.7
11000       40,6.6
15000       19,8.8
17000       30,5.5
20000        5,10.0
23000       40,6.6
25000        3,5.5
30000       30,2.2
35000        2,10.0
40000        7,5.5
44000       40,8.9

例9-14 last関数のリレーション出力

Timestamp   Tuple Kind  Tuple
11000:      +           0.9,8.7,30,10,7.0,40
23000:      +           ,,30,5,,40
44000:      +           5.5,5.5,30,2,7.0,40

max

構文

目的

maxは、exprの最大値を返します。そのデータ型は引数のデータ型によって異なります。

例

例9-15の問合せtest_max_timestampと例9-16のデータ・ストリームS15があるとします。ストリームS15のスキーマは(c1 int, c2 timestamp)です。この問合せは、例9-17に示すリレーションを返します。

例9-15 max関数の問合せ

<query id="test_max_timestamp"><![CDATA[
select max(c2) from S15[range 2]
]]></query>

例9-16 max関数のストリーム入力

Timestamp   Tuple
10        1,"08/07/2004 11:13:48"
2000         ,"08/07/2005 11:13:48"
3400        3,"08/07/2006 11:13:48"
4700         ,"08/07/2007 11:13:48"
h 8000
h 200000000

例9-17 max関数のリレーション出力

Timestamp   Tuple Kind  Tuple
0:       +
10:       -
10:       +           08/07/2004 11:13:48
2000:       -           08/07/2004 11:13:48
2000:       +           08/07/2005 11:13:48
2010:       -           08/07/2005 11:13:48
2010:       +           08/07/2005 11:13:48
3400:       -           08/07/2005 11:13:48
3400:       +           08/07/2006 11:13:48
4000:       -           08/07/2006 11:13:48
4000:       +           08/07/2006 11:13:48
4700:       -           08/07/2006 11:13:48
4700:       +           08/07/2007 11:13:48
5400:       -           08/07/2007 11:13:48
5400:       +           08/07/2007 11:13:48
6700:       -           08/07/2007 11:13:48
6700:       +

min

構文

目的

minは、exprの最小値を返します。そのデータ型は引数のデータ型によって異なります。

例

例9-18の問合せtest_min_timestampと例9-19のデータ・ストリームS15があるとします。ストリームS15のスキーマは(c1 int, c2 timestamp)です。この問合せは、例9-20に示すリレーションを返します。

例9-18 min関数の問合せ

<query id="test_min_timestamp"><![CDATA[
select min(c2) from S15[range 2]
]]></query>

例9-19 min関数のストリーム入力

Timestamp   Tuple
10        1,"08/07/2004 11:13:48"
2000         ,"08/07/2005 11:13:48"
3400        3,"08/07/2006 11:13:48"
4700         ,"08/07/2007 11:13:48"
h 8000
h 200000000

例9-20 min関数のリレーション出力

Timestamp   Tuple Kind  Tuple
0:       +
10:       -
10:       +           08/07/2004 11:13:48
2000:       -           08/07/2004 11:13:48
2000:       +           08/07/2004 11:13:48
2010:       -           08/07/2004 11:13:48
2010:       +           08/07/2005 11:13:48
3400:       -           08/07/2005 11:13:48
3400:       +           08/07/2005 11:13:48
4000:       -           08/07/2005 11:13:48
4000:       +           08/07/2006 11:13:48
4700:       -           08/07/2006 11:13:48
4700:       +           08/07/2006 11:13:48
5400:       -           08/07/2006 11:13:48
5400:       +           08/07/2007 11:13:48
6700:       -           08/07/2007 11:13:48
6700:       +

sum

構文

目的

sumは、exprの値の合計を返します。この関数は、bigint、floatまたはinteger式を引数として使用します。また、引数の数値データ型と同じデータ型を返します。

例

例9-21の問合せq3と例9-22のデータ・ストリームS1があるとします。ストリームS1のスキーマは(c1 integer, c2 bigint)です。この問合せは、例9-23に示すリレーションを返します。rangeの詳細は、「範囲ベースのストリームからリレーションへのウィンドウ演算子」を参照してください。

例9-21 sumの問合せ

<query id="q3"><![CDATA[
select sum(c2) from S1[range 5]
]]></query>

例9-22 sumのストリーム入力

Timestamp   Tuple
1000         5,
1000        10,5
2000          ,4
3000        30,6
5000        45,44
7000        55,3
h 200000000

例9-23 sumのリレーション出力

Timestamp   Tuple Kind  Tuple
0:      +
1000:      -
1000:      +           5
2000:      -           5
2000:      +           9
3000:      -           9
3000:      +           15
5000:      -           15
5000:      +           59
6000:      -           59
6000:      +           54
7000:      -           54
7000:      +           53
8000:      -           53
8000:      +           47
10000:      -           47
10000:      +           3
12000:      -           3
12000:      +

xmlagg

構文

目的

xmlaggは、集計されたXMLドキュメントとしてXMLフラグメントの集合を返します。nullを返す引数は結果から削除されます。

ORDER BY句を使用すると、フラグメントの順序を制御できます。詳細は、18.2.9項「問合せ結果のソート」を参照してください。

例

この項では、次のxmlaggの例を示します。

- 「xmlagg関数とxmlelement関数」

- 「xmlagg関数とORDER BY句」

xmlagg関数とxmlelement関数

例9-24の問合せtkdata67_q1と例9-25の入力リレーションがあるとします。ストリームtkdata67_S0のスキーマは(c1 integer, c2 float)です。この問合せでは、xmlelementを使用してストリーム要素からXMLフラグメントを作成し、xmlaggを使用してそれらのXMLフラグメントをXMLドキュメントに集計します。この問合せは、例9-26に示すリレーションを返します。

xmlelementの詳細は、「xmlelement_expr」を参照してください。

例9-24 xmlaggの問合せ

<query id="tkdata67_q1"><![CDATA[
select
c1,
xmlagg(xmlelement("c2",c2))
from
tkdata67_S0[rows 10]
group by c1
]]></query>

例9-25 xmlaggのリレーション入力

Timestamp           Tuple
1000               15, 0.1
1000               20, 0.14
1000               15, 0.2
4000               20, 0.3
10000               15, 0.04
h 12000

例9-26 xmlaggのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           15,<c2>0.1</c2>
<c2>0.2</c2>
1000:       +           20,<c2>0.14</c2>
4000:       -           20,<c2>0.14</c2>
4000:       +           20,<c2>0.14</c2>
<c2>0.3</c2>
10000:      -           15,<c2>0.1</c2>
<c2>0.2</c2>
10000:      +           15,<c2>0.1</c2>
<c2>0.2</c2>
<c2>0.04</c2>

xmlagg関数とORDER BY句

例9-27の問合せtkxmlAgg_q5と例9-28の入力リレーションがあるとします。ストリームtkxmlAgg_S1のスキーマは(c1 int, c2 xmltype)です。この問合せでは、xmltypeストリーム要素を選択し、XMLAGGを使用してそれらをXMLドキュメントに集計します。また、ORDER BY句を使用してXMLフラグメントを並べ替えます。この問合せは、例9-29に示すリレーションを返します。

例9-27 xmlaggとORDER BYの問合せ

<query id="tkxmlAgg_q5"><![CDATA[
select
xmlagg(c2),
xmlagg(c2 order by c1)
from
tkxmlAgg_S1[range 2]
]]></query>

例9-28 xmlaggとORDER BYのリレーション入力

Timestamp           Tuple
1000                1, "<a>hello</a>"
2000               10, "<b>hello1</b>"
3000               15, "<PDRecord><PDName>hello</PDName></PDRecord>"
4000                5, "<PDRecord><PDName>hello</PDName><PDName>hello1</PDName></PDRecord>"
5000               51, "<PDRecord><PDId>6</PDId><PDName>hello1</PDName></PDRecord>"
6000               15, "<PDRecord><PDId>46</PDId><PDName>hello2</PDName></PDRecord>"
7000               55, "<PDRecord><PDId>6</PDId><PDName>hello2</PDName><PDName>hello3</PDName></PDRecord>"

例9-29 xmlaggとORDER BYのリレーション出力

Timestamp   Tuple Kind  Tuple
0:      +
1000:       -
1000:       +           <a>hello</a>
,<a>hello</a>
2000:       -           <a>hello</a>
,<a>hello</a>
2000:       +           <a>hello</a>
<b>hello1</b>
,<a>hello</a>
<b>hello1</b>
3000:       -           <a>hello</a>
<b>hello1</b>
,<a>hello</a>
<b>hello1</b>
3000:       +           <b>hello1</b>
<PDRecord>
<PDName>hello</PDName>
</PDRecord>
,<b>hello1</b>
<PDRecord>
<PDName>hello</PDName>
</PDRecord>
4000:       -           <b>hello1</b>
<PDRecord>
<PDName>hello</PDName>
</PDRecord>
,<b>hello1</b>
<PDRecord>
<PDName>hello</PDName>
</PDRecord>
4000:       +           <PDRecord>
<PDName>hello</PDName>
</PDRecord>
<PDRecord>
<PDName>hello</PDName>
<PDName>hello1</PDName>
</PDRecord>
,<PDRecord>
<PDName>hello</PDName>
<PDName>hello1</PDName>
</PDRecord>
<PDRecord>
<PDName>hello</PDName>
</PDRecord>
5000:       -           <PDRecord>
<PDName>hello</PDName>
</PDRecord>
<PDRecord>
<PDName>hello</PDName>
<PDName>hello1</PDName>
</PDRecord>
,<PDRecord>
<PDName>hello</PDName>
<PDName>hello1</PDName>
</PDRecord>
<PDRecord>
<PDName>hello</PDName>
</PDRecord>
5000:       +           <PDRecord>
<PDName>hello</PDName>
<PDName>hello1</PDName>
</PDRecord>
<PDRecord>
<PDId>6</PDId>
<PDName>hello1</PDName>
</PDRecord>
,<PDRecord>
<PDName>hello</PDName>
<PDName>hello1</PDName>
</PDRecord>
<PDRecord>
<PDId>6</PDId>
<PDName>hello1</PDName>
</PDRecord>
6000:       -           <PDRecord>
<PDName>hello</PDName>
<PDName>hello1</PDName>
</PDRecord>
<PDRecord>
<PDId>6</PDId>
<PDName>hello1</PDName>
</PDRecord>
,<PDRecord>
<PDName>hello</PDName>
<PDName>hello1</PDName>
</PDRecord>
<PDRecord>
<PDId>6</PDId>
<PDName>hello1</PDName>
</PDRecord>
6000:       +           <PDRecord>
<PDId>6</PDId>
<PDName>hello1</PDName>
</PDRecord>
<PDRecord>
<PDId>46</PDId>
<PDName>hello2</PDName>
</PDRecord>
,<PDRecord>
<PDId>46</PDId>
<PDName>hello2</PDName>
</PDRecord>
<PDRecord>
<PDId>6</PDId>
<PDName>hello1</PDName>
</PDRecord>
7000:       -           <PDRecord>
<PDId>6</PDId>
<PDName>hello1</PDName>
</PDRecord>
<PDRecord>
<PDId>46</PDId>
<PDName>hello2</PDName>
</PDRecord>
,<PDRecord>
<PDId>46</PDId>
<PDName>hello2</PDName>
</PDRecord>
<PDRecord>
<PDId>6</PDId>
<PDName>hello1</PDName>
</PDRecord>

10 Colt単一行関数

この章では、Oracle Continuous Query Language (Oracle CQL)に含まれるColt単一行関数のリファレンスを提供します。Colt単一行関数は、高性能な科学技術計算のためのColtオープン・ソース・ライブラリに基づいています。

詳細は、1.1.11項「関数」を参照してください。

10.1 Oracle CQLの組込みの単一行Colt関数の概要

表10-1は、Oracle CQLに用意されている組込みの単一行Colt関数を示しています。

表10-1 Oracle CQLの組込みの単一行Coltベースの関数

Coltパッケージ

関数

cern.jet.math.Arithmetic

一連の基本的な多項関数、丸め関数および計算関数です。

- binomial

- binomial1

- ceil

- factorial

- floor

- log

- log2

- log10

- logFactorial

- longFactorial

- stirlingCorrection

cern.jet.math.Bessel

一連のベッセル関数です。

- i0

- i0e

- i1

- i1e

- j0

- j1

- jn

- k0

- k0e

- k1

- k1e

- kn

- y0

- y1

- yn

cern.jet.random.engine.RandomSeedTable

疑似乱数ジェネレータに適したシードを含む表です。この表内の各シーケンスの周期は10**9です。

- getSeedAtRowColumn

cern.jet.stat.Gamma

一連のガンマ関数とベータ関数です。

- beta

- gamma

- incompleteBeta

- incompleteGamma

- incompleteGammaComplement

- logGamma

cern.jet.stat.Probability

一連の確率分布です。

- beta1

- betaComplemented

- binomial2

- binomialComplemented

- chiSquare

- chiSquareComplemented

- errorFunction

- errorFunctionComplemented

- gamma1

- gammaComplemented

- negativeBinomial

- negativeBinomialComplemented

- normal

- normal1

- normalInverse

- poisson

- poissonComplemented

- studentT

- studentTInverse

cern.colt.bitvector.QuickBitVector

一連の非多相関数、非境界チェック関数、下位ビットベクタ関数です。

- bitMaskWithBitsSetFromTo

- leastSignificantBit

- mostSignificantBit

cern.colt.map.HashFunctions

一連のハッシュ関数です。

- hash

- hash1

- hash2

- hash3

注意:

組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

詳細は、以下を参照してください。

- 1.1.11項「関数」

- 2.1項「データ型」

- http://dsd.lbl.gov/~hoschek/colt/

beta

構文

目的

betaは、cern.jet.stat.Gammaに基づいています。入力引数のベータ関数(図10-1を参照)をdoubleとして返します。

図10-1 cern.jet.stat.Gamma beta

この関数は次の引数を使用します。

- double1: xの値。

- double2: yの値。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Gamma.html#beta(double,%20double)を参照してください。

例

例10-1は問合せqColt28を示しています。例10-2はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-3に示すリレーションを返します。

例10-1 beta関数の問合せ

<query id="qColt28"><![CDATA[
select beta(c2,c2) from SColtFunc
]]></query>

例10-2 beta関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-3 beta関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           3.1415927
1000:       +           1.899038
1200:       +           1.251922
2000:       +           4.226169

beta1

構文

目的

beta1は、cern.jet.stat.Probabilityに基づいています。ベータ密度関数(図10-2を参照)で示す領域P(x)(0からx)をdoubleとして返します。

図10-2 cern.jet.stat.Probability beta1

この関数は次の引数を使用します。

- double1: ベータ分布のアルファ・パラメータa。

- double2: ベータ分布のベータ・パラメータb。

- double3: 積分終了点x。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#beta(double,%20double,%20double)を参照してください。

例

例10-4は問合せqColt35を示しています。例10-5はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-6に示すリレーションを返します。

例10-4 beta1関数の問合せ

<query id="qColt35"><![CDATA[
select beta1(c2,c2,c2) from SColtFunc
]]></query>

例10-5 beta1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-6 beta1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.66235894
1200:       +           0.873397
2000:       +           0.44519535

betaComplemented

構文

目的

betaComplementedは、cern.jet.stat.Probabilityに基づいています。ベータ密度関数(図10-2を参照)の右側の尾(xから無限大)で示す領域をdoubleとして返します。

この関数は次の引数を使用します。

- double1: ベータ分布のアルファ・パラメータa。

- double2: ベータ分布のベータ・パラメータb。

- double3: 積分終了点x。

詳細は、以下を参照してください。

- "incompleteBeta"

- http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#betaComplemented(double,%20double,%20double)

例

例10-7は問合せqColt37を示しています。例10-8はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-9に示すリレーションを返します。

例10-7 betaComplemented関数の問合せ

<query id="qColt37"><![CDATA[
select betaComplemented(c2,c2,c2) from SColtFunc
]]></query>

例10-8 betaComplemented関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-9 betaComplemented関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.66235894
1200:       +           0.873397
2000:       +           0.44519535

binomial

構文

目的

binomialは、cern.jet.math.Arithmeticに基づいています。kを超える二項係数n(図10-3を参照)をdoubleとして返します。

図10-3 二項係数の定義

この関数は次の引数を使用します。

- double1: nの値。

- long2: kの値。

表10-2は、様々なkの値に対応するbinomial関数の戻り値を示しています。

表10-2 cern.jet.math.Arithmetic binomialの戻り値

引数

戻り値

k < 0

0

k = 0

1

k = 1

n

上記以外のkの値

図10-3で計算される二項係数。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#binomial(double,%20long)を参照してください。

例

例10-10は問合せqColt6を示しています。例10-11はスキーマ(c1 integer, c2 double, c3 long)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-12に示すリレーションを返します。

例10-10 binomial関数の問合せ

<query id="qColt6"><![CDATA[
select binomial(c2,c3) from SColtFunc
]]></query>

例10-11 binomial関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-12 binomial関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           -0.013092041
1000:       +           -0.012374863
1200:       +           -0.0010145549
2000:       +           -0.0416

binomial1

構文

目的

binomial1は、cern.jet.math.Arithmeticに基づいています。kを超える二項係数n(図10-3を参照)をdoubleとして返します。

この関数は次の引数を使用します。

- long1: nの値。

- long2: kの値。

表10-3は、様々なkの値に対応するBINOMIAL関数の戻り値を示しています。

表10-3 cern.jet.math.Arithmetic Binomial1の戻り値

引数

戻り値

k < 0

0

k = 0 || k = n

1

k = 1 || k = n-1

n

上記以外のkの値

図10-3で計算される二項係数。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#binomial(long,%20long)を参照してください。

例

例10-13は問合せqColt7を示しています。例10-14はスキーマ(c1 integer, c2 float, c3 long)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-15に示すリレーションを返します。

例10-13 binomial1関数の問合せ

<query id="qColt7"><![CDATA[
select binomial1(c3,c3) from SColtFunc
]]></query>

例10-14 binomial1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-15 binomial1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           1.0
1200:       +           1.0
2000:       +           1.0

binomial2

構文

目的

binomial2は、cern.jet.stat.Probabilityに基づいています。二項確率密度(図10-4を参照)の項0からkの合計をdoubleとして返します。

図10-4 cern.jet.stat.Probability binomial2

この関数は次の引数を使用します(すべての引数は正の値であることが必要です)。

- integer1: 末項k。

- integer2: 試行回数n。

- double3: (0.0, 1.0)で成功する確率p。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#binomial(int,%20int,%20double)を参照してください。

例

例10-16は問合せqColt34を示しています。例10-17はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-18に示すリレーションを返します。

例10-16 binomial2関数の問合せ

<query id="qColt34"><![CDATA[
select binomial2(c1,c1,c2) from SColtFunc
]]></query>

例10-17 binomial2関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-18 binomial2関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           1.0
1200:       +           1.0
2000:       +           1.0

binomialComplemented

構文

目的

binomialComplementedは、cern.jet.stat.Probabilityに基づいています。二項確率密度(図10-5を参照)の項k+1からnの合計をdoubleとして返します。

図10-5 cern.jet.stat.Probability binomialComplemented

この関数は次の引数を使用します(すべての引数は正の値であることが必要です)。

- integer1: 末項k。

- integer2: 試行回数n。

- double3: (0.0, 1.0)で成功する確率p。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#binomialComplemented(int,%20int,%20double)を参照してください。

例

例10-19は問合せqColt38を示しています。例10-20はスキーマ(integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-21に示すリレーションを返します。

例10-19 binomialComplemented関数の問合せ

<query id="qColt38"><![CDATA[
select binomialComplemented(c1,c1,c2) from SColtFunc
]]></query>

例10-20 binomialComplemented関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-21 binomialComplemented関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

bitMaskWithBitsSetFromTo

構文

目的

bitMaskWithBitsSetFromToは、cern.colt.bitvector.QuickBitVectorに基づいています。64ビット幅のビット・マスクを、指定の範囲のビットが1に設定され、その他のすべてのビットが0に設定されたlongとして返します。

この関数は次の引数を使用します。

- integer1: fromの値。開始ビット(を含む)の索引です。

- integer2: toの値。終了ビット(を含む)の索引です。

必要条件(チェックなし): to - from + 1 >= 0 && to - from + 1 <= 64。

to - from + 1 = 0の場合は、すべてのビットが0に設定されたビット・マスクを返します。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/colt/bitvector/QuickBitVector.html#bitMaskWithBitsSetFromTo(int,%20int)

- "leastSignificantBit"

- "mostSignificantBit"

例

例10-22は問合せqColt53を示しています。例10-23はスキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-24に示すリレーションを返します。

例10-22 bitMaskWithBitsSetFromTo関数の問合せ

<query id="qColt53"><![CDATA[
select bitMaskWithBitsSetFromTo(c1,c1) from SColtFunc
]]></query>

例10-23 bitMaskWithBitsSetFromTo関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-24 bitMaskWithBitsSetFromTo関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           2
1000:       +           16
1200:       +           8
2000:       +           256

ceil

構文

目的

ceilは、cern.jet.math.Arithmeticに基づいています。doubleの引数以上の最小のlongを返します。

丸めエラーが発生する可能性があるため、このメソッドは(float) java.lang.Math.ceil(long)を使用する場合よりも安全です。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#ceil(double)

- 「ceil1」

例

例10-25は問合せqColt1を示しています。例10-26はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-27に示すリレーションを返します。

例10-25 ceil関数の問合せ

<query id="qColt1"><![CDATA[
select ceil(c2) from SColtFunc
]]></query>

例10-26 ceil関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-27 ceil関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           1
1200:       +           1
2000:       +           1

chiSquare

構文

目的

chiSquareは、cern.jet.stat.Probabilityに基づいています。自由度がvのカイ2乗確率密度関数(図10-6を参照)の左側の尾(0からx)で示す領域をdoubleとして返します。

図10-6 cern.jet.stat.Probability chiSquare

この関数は次の引数を使用します(すべての引数は正の値であることが必要です)。

- double1: 自由度v。

- double2: 積分終了点x。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#chiSquare(double,%20double)を参照してください。

例

例10-28は問合せqColt39を示しています。例10-29はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-30に示すリレーションを返します。

例10-28 chiSquare関数の問合せ

<query id="qColt39"><![CDATA[
select chiSquare(c2,c2) from SColtFunc
]]></query>

例10-29 chiSquare関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-30 chiSquare関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

chiSquareComplemented

構文

目的

chiSquareComplementedは、cern.jet.stat.Probabilityに基づいています。自由度がvのカイ2乗確率密度関数(図10-6を参照)の右側の尾(xから無限大)で示す領域をdoubleとして返します。

この関数は次の引数を使用します(すべての引数は正の値であることが必要です)。

- double1: 自由度v。

- double2: 積分終了点x。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#chiSquareComplemented(double,%20double)を参照してください。

例

例10-31は問合せqColt40を示しています。例10-32はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-33に示すリレーションを返します。

例10-31 chiSquareComplemented関数の問合せ

<query id="qColt40"><![CDATA[
select chiSquareComplemented(c2,c2) from SColtFunc
]]></query>

例10-32 chiSquareComplemented関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-33 chiSquareComplemented関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

errorFunction

構文

目的

errorFunctionは、cern.jet.stat.Probabilityに基づいています。図10-7に示す積分を使用して、doubleの引数の正規分布のエラー関数をdoubleとして返します。

図10-7 cern.jet.stat.Probability errorFunction

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#errorFunction(double)を参照してください。

例

例10-34は問合せqColt41を示しています。例10-35はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-36に示すリレーションを返します。

例10-34 errorFunction関数の問合せ

<query id="qColt41"><![CDATA[
select errorFunction(c2) from SColtFunc
]]></query>

例10-35 errorFunction関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-36 errorFunction関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5204999
1000:       +           0.6778012
1200:       +           0.79184324
2000:       +           0.42839235

errorFunctionComplemented

構文

目的

errorFunctionComplementedは、cern.jet.stat.Probabilityに基づいています。図10-8に示す積分を使用して、doubleの引数の正規分布の相補エラー関数をdoubleとして返します。

図10-8 cern.jet.stat.Probability errorfunctioncompelemented

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#errorFunctionComplemented(double)を参照してください。

例

例10-37は問合せqColt42を示しています。例10-38はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-39に示すリレーションを返します。

例10-37 errorFunctionComplemented関数の問合せ

<query id="qColt42"><![CDATA[
select errorFunctionComplemented(c2) from SColtFunc
]]></query>

例10-38 errorFunctionComplemented関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-39 errorFunctionComplemented関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.47950011
1000:       +           0.3221988
1200:       +           0.20815676
2000:       +           0.57160765

factorial

構文

目的

factorialは、cern.jet.math.Arithmeticに基づいています。integerの正の引数の階乗をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#factorial(int)を参照してください。

例

例10-40は問合せqColt8を示しています。例10-41はスキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-42に示すリレーションを返します。

例10-40 factorial関数の問合せ

<query id="qColt8"><![CDATA[
select factorial(c1) from SColtFunc
]]></query>

例10-41 factorial関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-42 factorial関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +               1.0
1000:       +              24.0
1200:       +               6.0
2000:       +           40320.0

floor

構文

目的

floorは、cern.jet.math.Arithmeticに基づいています。doubleの引数以下の最大のlongの値を返します。

丸めエラーが発生する可能性があるため、このメソッドは(double) java.lang.Math.floor(double)を使用する場合よりも安全です。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#floor(double)

- 「floor1」

例

例10-43は問合せqColt2を示しています。例10-44はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-45に示すリレーションを返します。

例10-43 floor関数の問合せ

<query id="qColt2"><![CDATA[
select floor(c2) from SColtFunc
]]></query>

例10-44 floor関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-45 floor関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0
1000:       +           0
1200:       +           0
2000:       +           0

gamma

構文

目的

gammaは、cern.jet.stat.Gammaに基づいています。doubleの引数のガンマ関数をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Gamma.html#gamma(double)を参照してください。

例

例10-46は問合せqColt29を示しています。例10-47はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-48に示すリレーションを返します。

例10-46 gamma関数の問合せ

<query id="qColt29"><![CDATA[
select gamma(c2) from SColtFunc
]]></query>

例10-47 gamma関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-48 gamma関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1.7724539
1000:       +           1.2980554
1200:       +           1.0768307
2000:       +           2.2181594

gamma1

構文

目的

gamma1は、cern.jet.stat.Probabilityに基づいています。ガンマ確率密度関数(図10-9を参照)の積分(0からx)をdoubleとして返します。

図10-9 cern.jet.stat.Probability gamma1

この関数は次の引数を使用します。

- double1: ガンマ分布のアルファ値a

- double2: ガンマ分布のベータ値またはラムダ値b

- double3: 積分終了点x

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#gamma(double,%20double,%20double)を参照してください。

例

例10-49は問合せqColt36を示しています。例10-50はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-51に示すリレーションを返します。

例10-49 gamma1関数の問合せ

<query id="qColt36"><![CDATA[
select gamma1(c2,c2,c2) from SColtFunc
]]></query>

例10-50 gamma1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-51 gamma1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5204999
1000:       +           0.55171627
1200:       +           0.59975785
2000:       +           0.51785487

gammaComplemented

構文

目的

gammaComplementedは、cern.jet.stat.Probabilityに基づいています。ガンマ確率密度関数(図10-10を参照)の積分(xから無限大)をdoubleとして返します。

図10-10 cern.jet.stat.Probability gammaComplemented

この関数は次の引数を使用します。

- double1: ガンマ分布のアルファ値a

- double2: ガンマ分布のベータ値またはラムダ値b

- double3: 積分終了点x

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#gammaComplemented(double,%20double,%20double)を参照してください。

例

例10-52は問合せqColt43を示しています。例10-53はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-54に示すリレーションを返します。

例10-52 gammaComplemented関数の問合せ

<query id="qColt43"><![CDATA[
select gammaComplemented(c2,c2,c2) from SColtFunc
]]></query>

例10-53 gammaComplemented関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-54 gammaComplemented関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.47950011
1000:       +           0.44828376
1200:       +           0.40024218
2000:       +           0.48214513

getSeedAtRowColumn

構文

目的

getSeedAtRowColumnは、cern.jet.random.engine.RandomSeedTableに基づいています。あらかじめ定義されているシードの(外見上は膨大な)マトリックスから決定論的なシードをintegerとして返します。

この関数は次の引数を使用します。

- integer1: rowの値。[0,Integer.MAX_VALUE]の形式が望ましいですが、そうでなくてもかまいません。

- integer2: columnの値。[0,1]の形式が望ましいですが、そうでなくてもかまいません。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/random/engine/RandomSeedTable.html#getSeedAtRowColumn(int,%20int)を参照してください。

例

例10-55は問合せqColt27を示しています。例10-56はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-57に示すリレーションを返します。

例10-55 getSeedAtRowColumn関数の問合せ

<query id="qColt27"><![CDATA[
select getSeedAtRowColumn(c1,c1) from SColtFunc
]]></query>

例10-56 getSeedAtRowColumn関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-57 getSeedAtRowColumn関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           253987020
1000:       +           1289741558
1200:       +           417696270
2000:       +           350557787

hash

構文

目的

hashは、cern.colt.map.HashFunctionsに基づいています。指定されたdoubleの値に対してintegerのハッシュコードを返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/colt/map/HashFunctions.html#hash(double)を参照してください。

例

例10-58は問合せqColt56を示しています。例10-59はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-60に示すリレーションを返します。

例10-58 hash関数の問合せ

<query id="qColt56"><![CDATA[
select hash(c2) from SColtFunc
]]></query>

例10-59 hash関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-60 hash関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +            1071644672
1000:       +            1608935014
1200:       +            2146204385
2000:       +           -1613129319

hash1

構文

目的

hash1は、cern.colt.map.HashFunctionsに基づいています。指定されたfloatの値に対してintegerのハッシュコードを返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/colt/map/HashFunctions.html#hash(float)を参照してください。

例

例10-61は問合せqColt57を示しています。例10-62はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-63に示すリレーションを返します。

例10-61 hash1関数の問合せ

<query id="qColt57"><![CDATA[
select hash1(c2) from SColtFunc
]]></query>

例10-62 hash1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-63 hash1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1302214522
1000:       +           1306362078
1200:       +           1309462552
2000:       +           1300047248

hash2

構文

目的

hash2は、cern.colt.map.HashFunctionsに基づいています。指定されたintegerの値に対してintegerのハッシュコードを返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/colt/map/HashFunctions.html#hash(int)を参照してください。

例

例10-64は問合せqColt58を示しています。例10-65はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-66に示すリレーションを返します。

例10-64 hash2関数の問合せ

<query id="qColt58"><![CDATA[
select hash2(c1) from SColtFunc
]]></query>

例10-65 hash2関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-66 hash2関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           4
1200:       +           3
2000:       +           8

hash3

構文

目的

hash3は、cern.colt.map.HashFunctionsに基づいています。指定されたlongの値に対してintegerのハッシュコードを返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/colt/map/HashFunctions.html#hash(long)を参照してください。

例

例10-67は問合せqColt59を示しています。例10-68はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-69に示すリレーションを返します。

例10-67 hash3関数の問合せ

<query id="qColt59"><![CDATA[
select hash3(c3) from SColtFunc
]]></query>

例10-68 hash3関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-69 hash3関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           8
1000:       +           6
1200:       +           12
2000:       +           4

i0

構文

目的

i0は、cern.jet.math.Besselに基づいています。doubleの引数の階数0の変更済のベッセル関数をdoubleとして返します。

この関数は、i0(x) = j0(ix)と定義されます。

範囲は[0,8]と(8,infinity)の2つの区間に分けられます。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#i0(double)

- 「j0」

例

例10-70は問合せqColt12を示しています。例10-71はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-72に示すリレーションを返します。

例10-70 i0関数の問合せ

<query id="qColt12"><![CDATA[
select i0(c2) from SColtFunc
]]></query>

例10-71 i0関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-72 i0関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1.0634834
1000:       +           1.126303
1200:       +           1.2080469
2000:       +           1.0404018

i0e

構文

目的

i0eは、cern.jet.math.Besselに基づいています。doubleの引数の階数0の指数スケールが適用された変更済のベッセル関数をdoubleとして返します。

この関数は、i0e(x) = exp(-|x|) j0(ix)と定義されます。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#i0e(double)

- 「j0」

例

例10-73は問合せqColt13を示しています。例10-74はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-75に示すリレーションを返します。

例10-73 i0e関数の問合せ

<query id="qColt13"><![CDATA[
select i0e(c2) from SColtFunc
]]></query>

例10-74 i0e関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-75 i0e関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.64503527
1000:       +           0.55930555
1200:       +           0.4960914
2000:       +           0.6974022

i1

構文

目的

i1は、cern.jet.math.Besselに基づいています。doubleの引数の階数1の変更済のベッセル関数をdoubleとして返します。

この関数は、i1(x) = -i j1(ix)と定義されます。

範囲は[0,8]と(8,infinity)の2つの区間に分けられます。各区間では、チェビシェフ多項式展開が使用されます。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#i1(double)

- 「j1」

例

例10-76は問合せqColt14を示しています。例10-77はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-78に示すリレーションを返します。

例10-76 i1関数の問合せ

<query id="qColt14"><![CDATA[
select i1(c2) from SColtFunc
]]></query>

例10-77 i1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-78 i1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.2578943
1000:       +           0.37187967
1200:       +           0.49053898
2000:       +           0.20402676

i1e

構文

目的

i1eは、cern.jet.math.Besselに基づいています。doubleの引数の階数1の指数スケールが適用された変更済のベッセル関数をdoubleとして返します。

この関数は、i1(x) = -i exp(-|x|) j1(ix)と定義されます。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#i1e(double)

- 「j1」

例

例10-79は問合せqColt15を示しています。例10-80はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-81に示すリレーションを返します。

例10-79 i1e関数の問合せ

<query id="qColt15"><![CDATA[
select i1e(c2) from SColtFunc
]]></query>

例10-80 i1e関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-81 i1e関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.1564208
1000:       +           0.18466999
1200:       +           0.20144266
2000:       +           0.13676323

incompleteBeta

構文

目的

incompleteBetaは、cern.jet.stat.Gammaに基づいています。0からxまで評価される不完全ベータ関数をdoubleとして返します。

この関数は次の引数を使用します。

- double1: ベータ分布のアルファ値a

- double2: ベータ分布のベータ値b

- double3: 積分終了点x

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Gamma.html#incompleteBeta(double,%20double,%20double)を参照してください。

例

例10-82は問合せqColt30を示しています。例10-83はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-84に示すリレーションを返します。

例10-82 incompleteBeta関数の問合せ

<query id="qColt30"><![CDATA[
select incompleteBeta(c2,c2,c2) from SColtFunc
]]></query>

例10-83 incompleteBeta関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-84 incompleteBeta関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.66235894
1200:       +           0.873397
2000:       +           0.44519535

incompleteGamma

構文

目的

incompleteGammaは、cern.jet.stat.Gammaに基づいています。引数の不完全ガンマ関数をdoubleとして返します。

この関数は次の引数を使用します。

- double1: ガンマ分布のアルファ値a。

- double2: 積分終了点x。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Gamma.html#incompleteGamma(double,%20double)を参照してください。

例

例10-85は問合せqColt31を示しています。例10-86はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-87に示すリレーションを返します。

例10-85 incompleteGamma関数の問合せ

<query id="qColt31"><![CDATA[
select incompleteGamma(c2,c2) from SColtFunc
]]></query>

例10-86 incompleteGamma関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-87 incompleteGamma関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.6826895
1000:       +           0.6565891
1200:       +           0.6397422
2000:       +           0.7014413

incompleteGammaComplement

構文

目的

incompleteGammaComplementは、cern.jet.stat.Gammaに基づいています。引数の補足の不完全ガンマ関数をdoubleとして返します。

この関数は次の引数を使用します。

- double1: ガンマ分布のアルファ値a。

- double2: 積分開始点x。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Gamma.html#incompleteGammaComplement(double,%20double)を参照してください。

例

例10-88は問合せqColt32を示しています。例10-89はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-90に示すリレーションを返します。

例10-88 incompleteGammaComplement関数の問合せ

<query id="qColt32"><![CDATA[
select incompleteGammaComplement(c2,c2) from SColtFunc
]]></query>

例10-89 incompleteGammaComplement関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-90 incompleteGammaComplement関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.3173105
1000:       +           0.34341094
1200:       +           0.3602578
2000:       +           0.29855874

j0

構文

目的

j0は、cern.jet.math.Besselに基づいています。doubleの引数の階数0の第1種ベッセル関数をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#j0(double)を参照してください。

例

例10-91は問合せqColt16を示しています。例10-92はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-93に示すリレーションを返します。

例10-91 j0関数の問合せ

<query id="qColt16"><![CDATA[
select j0(c2) from SColtFunc
]]></query>

例10-92 j0関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-93 j0関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.9384698
1000:       +           0.8812009
1200:       +           0.8115654
2000:       +           0.9603982

j1

構文

目的

j1は、cern.jet.math.Besselに基づいています。doubleの引数の階数1の第1種ベッセル関数をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#j1(double)を参照してください。

例

例10-94は問合せqColt17を示しています。例10-95はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-96に示すリレーションを返します。

例10-94 j1関数の問合せ

<query id="qColt17"><![CDATA[
select j1(c2) from SColtFunc
]]></query>

例10-95 j1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-96 j1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.24226846
1000:       +           0.32899573
1200:       +           0.40236986
2000:       +           0.19602658

jn

構文

目的

jnは、cern.jet.math.Besselに基づいています。引数の階数nの第1種ベッセル関数をdoubleとして返します。

この関数は次の引数を使用します。

- integer1: ベッセル関数の階層n。

- double2: ベッセル関数を計算する値x。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#jn(int,%20double)を参照してください。

例

例10-97は問合せqColt18を示しています。例10-98はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-99に示すリレーションを返します。

例10-97 jn関数の問合せ

<query id="qColt18"><![CDATA[
select jn(c1,c2) from SColtFunc
]]></query>

例10-98 jn関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-99 jn関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.24226846
1000:       +           6.1009696E-4
1200:       +           0.0139740035
2000:       +           6.321045E-11

k0

構文

目的

k0は、cern.jet.math.Besselに基づいています。doubleの引数の階数0の変更済の第3種ベッセル関数をdoubleとして返します。

範囲は[0,8]と(8, infinity)の2つの区間に分けられます。各区間では、チェビシェフ多項式展開が使用されます。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#k0(double)を参照してください。

例

例10-100は問合せqColt19を示しています。例10-101はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-102に示すリレーションを返します。

例10-100 k0関数の問合せ

<query id="qColt19"><![CDATA[
select k0(c2) from SColtFunc
]]></query>

例10-101 k0関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-102 k0関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.92441905
1000:       +           0.6605199
1200:       +           0.49396032
2000:       +           1.1145291

k0e

構文

目的

k0eは、cern.jet.math.Besselに基づいています。doubleの引数の階数0の指数スケールが適用された変更済の第3種ベッセル関数をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#k0e(double)を参照してください。

例

例10-103は問合せqColt20を示しています。例10-104はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-105に示すリレーションを返します。

例10-103 k0e関数の問合せ

<query id="qColt20"><![CDATA[
select k0e(c2) from SColtFunc
]]></query>

例10-104 k0e関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-105 k0e関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1.5241094
1000:       +           1.3301237
1200:       +           1.2028574
2000:       +           1.662682

k1

構文

目的

k1は、cern.jet.math.Besselに基づいています。doubleの引数の階数1の変更済の第3種ベッセル関数をdoubleとして返します。

範囲は[0,2]と(2, infinity)の2つの区間に分けられます。各区間では、チェビシェフ多項式展開が使用されます。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#k1(double)を参照してください。

例

例10-106は問合せqColt21を示しています。例10-107はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-108に示すリレーションを返します。

例10-106 k1関数の問合せ

<query id="qColt21"><![CDATA[
select k1(c2) from SColtFunc
]]></query>

例10-107 k1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-108 k1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1.6564411
1000:       +           1.0502836
1200:       +           0.7295154
2000:       +           2.1843543

k1e

構文

目的

k1eは、cern.jet.math.Besselに基づいています。doubleの引数の階数1の指数スケールが適用された変更済の第3種ベッセル関数をdoubleとして返します。

この関数は、k1e(x) = exp(x) * k1(x)と定義されます。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#k1e(double)

- 「k1」

例

例10-109は問合せqColt22を示しています。例10-110はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-111に示すリレーションを返します。

例10-109 k1e関数の問合せ

<query id="qColt22"><![CDATA[
select k1e(c2) from SColtFunc
]]></query>

例10-110 k1e関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-111 k1e関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           2.7310097
1000:       +           2.1150115
1200:       +           1.7764645
2000:       +           3.258674

kn

構文

目的

knは、cern.jet.math.Besselに基づいています。引数の階数nの変更済の第3種ベッセル関数をdoubleとして返します。

この関数は次の引数を使用します。

- integer1: ベッセル関数の階層の値n。

- double2: ベッセル関数を計算する値x。

範囲は[0,9.55]と(9.55, infinity)の2つの区間に分けられます。低域では昇べき級数が使用され、高域では漸近展開が使用されます。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#kn(int,%20double)を参照してください。

例

例10-112は問合せqColt23を示しています。例10-113はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-114に示すリレーションを返します。

例10-112 kn関数の問合せ

<query id="qColt23"><![CDATA[
select kn(c1,c2) from SColtFunc
]]></query>

例10-113 kn関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-114 kn関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +             1.6564411
1000:       +           191.99422
1200:       +            10.317473
2000:       +             9.7876858E8

leastSignificantBit

構文

目的

leastSignificantBitは、cern.colt.bitvector.QuickBitVectorに基づいています。integerの引数の状態がtrueの最下位ビットの索引を(integerとして)返します。状態がtrueのビットがない場合は、32を返します。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/colt/bitvector/QuickBitVector.html#leastSignificantBit(int)

- "bitMaskWithBitsSetFromTo"

- "mostSignificantBit"

例

例10-115問合せqColt54を示しています。例10-116はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-117に示すリレーションを返します。

例10-115 leastSignificantBit関数の問合せ

<query id="qColt54"><![CDATA[
select leastSignificantBit(c1) from SColtFunc
]]></query>

例10-116 leastSignificantBit関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-117 leastSignificantBit関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0
1000:       +           2
1200:       +           0
2000:       +           3

log

構文

目的

logは、cern.jet.math.Arithmeticに基づいています。図10-11に示す計算の結果をdoubleとして返します。

図10-11 cern.jet.math.Arithmetic log

この関数は次の引数を使用します。

- double1: base。

- double2: value。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#log(double,%20double)を参照してください。

例

例10-118は問合せqColt3を示しています。例10-119はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-120に示すリレーションを返します。

例10-118 log関数の問合せ

<query id="qColt3"><![CDATA[
select log(c2,c2) from SColtFunc
]]></query>

例10-119 log関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-120 log関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           1.0
1200:       +           1.0
2000:       +           1.0

log10

構文

目的

log10は、cern.jet.math.Arithmeticに基づいています。doubleの値の10を底とする対数をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#log10(double)を参照してください。

例

例10-121は問合せqColt4を示しています。例10-122はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-123に示すリレーションを返します。

例10-121 log10関数の問合せ

<query id="qColt4"><![CDATA[
select log10(c2) from SColtFunc
]]></query>

例10-122 log10関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-123 log10関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           -0.30103
1000:       +           -0.15490197
1200:       +           -0.050610002
2000:       +           -0.39794

log2

構文

目的

log2は、cern.jet.math.Arithmeticに基づいています。doubleの値の2を底とする対数をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#log2(double)を参照してください。

例

例10-124は問合せqColt9を示しています。例10-125はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-126に示すリレーションを返します。

例10-124 log2関数の問合せ

<query id="qColt9"><![CDATA[
select log2(c2) from SColtFunc
]]></query>

例10-125 log2関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-126 log2関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           -1.0
1000:       +           -0.5145732
1200:       +           -0.16812278
2000:       +           -1.321928

logFactorial

構文

目的

logFactorialは、cern.jet.math.Arithmeticに基づいています。integerの引数の階乗の自然対数(底はe)をdoubleとして返します。

引数の値がk<30の場合、この関数はO(1)の表内の結果をルックアップします。引数の値がk>=30の場合、この関数はスターリングの近似を使用します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#logFactorial(int)を参照してください。

例

例10-127は問合せqColt10を示しています。例10-128はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-129に示すリレーションを返します。

例10-127 logFactorial関数の問合せ

<query id="qColt10"><![CDATA[
select logFactorial(c1) from SColtFunc
]]></query>

例10-128 logFactorial関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-129 logFactorial関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +            0.0
1000:       +            3.1780539
1200:       +            1.7917595
2000:       +           10.604603

logGamma

構文

目的

logGammaは、cern.jet.stat.Gammaに基づいています。doubleの引数のガンマ関数の自然対数(底はe)をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Gamma.html#logGamma(double)を参照してください。

例

例10-130は問合せqColt33を示しています。例10-131はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-132に示すリレーションを返します。

例10-130 logGamma関数の問合せ

<query id="qColt33"><![CDATA[
select logGamma(c2) from SColtFunc
]]></query>

例10-131 logGamma関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-132 logGamma関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5723649
1000:       +           0.26086727
1200:       +           0.07402218
2000:       +           0.7966778

longFactorial

構文

目的

longFactorialは、cern.jet.math.Arithmeticに基づいています。integerの引数(範囲はk >= 0 && k < 21)の階乗をlongとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#longFactorial(int)を参照してください。

例

例10-133は問合せqColt11を示しています。例10-134はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-135に示すリレーションを返します。

例10-133 longFactorial関数の問合せ

<query id="qColt11"><![CDATA[
select longFactorial(c1) from SColtFunc
]]></query>

例10-134 longFactorial関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-135 longFactorial関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           24
1200:       +           6
2000:       +           40320

mostSignificantBit

構文

目的

mostSignificantBitは、cern.colt.bitvector.QuickBitVectorに基づいています。integerの引数の状態がtrueの最上位ビットの索引を(integerとして)返します。状態がtrueのビットがない場合は、-1を返します。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/colt/bitvector/QuickBitVector.html#mostSignificantBit(int)

- "bitMaskWithBitsSetFromTo"

- "leastSignificantBit"

例

例10-136は問合せqColt55を示しています。例10-137はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-138に示すリレーションを返します。

例10-136 mostSignificantBit関数の問合せ

<query id="qColt55"><![CDATA[
select mostSignificantBit(c1) from SColtFunc
]]></view>

例10-137 mostSignificantBit関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-138 mostSignificantBit関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0
1000:       +           2
1200:       +           1
2000:       +           3

negativeBinomial

構文

目的

negativeBinomialは、cern.jet.stat.Probabilityに基づいています。負の二項分布の項0からkの合計(図10-12を参照)をdoubleとして返します。

図10-12 cern.jet.stat.Probability negativeBinomial

この関数は次の引数を使用します。

- integer1: 末項k。

- integer2: 試行回数n。

- double3: (0.0,1.0)で成功する確率p。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#negativeBinomial(int,%20int,%20double)を参照してください。

例

例10-139は問合せqColt44を示しています。例10-140はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-141に示すリレーションを返します。

例10-139 negativeBinomial関数の問合せ

<query id="qColt44"><![CDATA[
select negativeBinomial(c1,c1,c2) from SColtFunc
]]></query>

例10-140 negativeBinomial関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-141 negativeBinomial関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.75
1000:       +           0.94203234
1200:       +           0.99817264
2000:       +           0.28393665

negativeBinomialComplemented

構文

目的

negativeBinomialComplementedは、cern.jet.stat.Probabilityに基づいています。負の二項分布の項k+1から無限大までの合計(図10-13を参照)をdoubleとして返します。

図10-13 cern.jet.stat.Probability negativeBinomialComplemented

この関数は次の引数を使用します。

- integer1: 末項k。

- integer2: 試行回数n。

- double3: (0.0,1.0)で成功する確率p。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#negativeBinomialComplemented(int,%20int,%20double)を参照してください。

例

例10-142は問合せqColt45を示しています。例10-143はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-144に示すリレーションを返します。

例10-142 negativeBinomialComplemented関数の問合せ

<query id="qColt45"><![CDATA[
select negativeBinomialComplemented(c1,c1,c2) from SColtFunc
]]></query>

例10-143 negativeBinomialComplemented関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-144 negativeBinomialComplemented関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.25
1000:       +           0.05796766
1200:       +           0.0018273441
2000:       +           0.7160633

normal

構文

目的

normalは、cern.jet.stat.Probabilityに基づいています。負の無限大からdoubleの引数xに積分される、正規(ガウス)確率密度関数(図10-14を参照)で示す領域をdoubleとして返します。

図10-14 cern.jet.stat.Probability normal

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#normal(double)を参照してください。

例

例10-145は問合せqColt46を示しています。例10-146はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-147に示すリレーションを返します。

例10-145 normal関数の問合せ

<query id="qColt46"><![CDATA[
select normal(c2) from SColtFunc
]]></query>

例10-146 normal関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-147 normal関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.69146246
1000:       +           0.7580363
1200:       +           0.81326705
2000:       +           0.65542173

normal1

構文

目的

normal1は、cern.jet.stat.Probabilityに基づいています。負の無限大からxに積分される、正規(ガウス)確率密度関数(図10-15を参照)で示す領域をdoubleとして返します。

図10-15 cern.jet.stat.Probability normal1

この関数は次の引数を使用します。

- double1: 正規分布のmean。

- double2: 正規分布の分散v。

- double3: 積分の限界x。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#normal(double,%20double,%20double)を参照してください。

例

例10-148は問合せqColt47を示しています。例10-149はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-150に示すリレーションを返します。

例10-148 normal1関数の問合せ

<query id="qColt47"><![CDATA[
select normal1(c2,c2,c2) from SColtFunc
]]></query>

例10-149 normal1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-150 normal1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.5
1200:       +           0.5
2000:       +           0.5

normalInverse

構文

目的

normalInverseはcern.jet.stat.Probabilityに基づいています。負の無限大からxに積分される、正規(ガウス)確率密度関数で示す領域がdoubleの引数yに等しい場合のdoubleの値xを返します(平均が0、分散が1であることを前提としています)。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#normalInverse(double)を参照してください。

例

例10-151は問合せqColt48を示しています。例10-152はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-153に示すリレーションを返します。

例10-151 normalInverse関数の問合せ

<query id="qColt48"><![CDATA[
select normalInverse(c2) from SColtFunc
]]></view>

例10-152 normalInverse関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-153 normalInverse関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.5244005
1200:       +           1.226528
2000:       +           0.2533471

poisson

構文

目的

poissonは、cern.jet.stat.Probabilityに基づいています。ポアソン分布の初項kの合計(図10-16を参照)をdoubleとして返します。

図10-16 cern.jet.stat.Probability poisson

この関数は次の引数を使用します。

- integer1: 項数k。

- double2: ポアソン分布の平均m。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#poisson(int,%20double)を参照してください。

例

例10-154は問合せqColt49を示しています。例10-155はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-156に示すリレーションを返します。

例10-154 poisson関数の問合せ

<query id="qColt49"><![CDATA[
select poisson(c1,c2) from SColtFunc
]]></query>

例10-155 poisson関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-156 poisson関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.909796
1000:       +           0.9992145
1200:       +           0.9870295
2000:       +           1.0

poissonComplemented

構文

目的

poissonComplementedは、cern.jet.stat.Probabilityに基づいています。ポアソン分布の項k+1から無限大までの合計(図10-17を参照)をdoubleとして返します。

図10-17 cern.jet.stat.Probability poissonComplemented

この関数は次の引数を使用します。

- integer1: 初項k。

- double2: ポアソン分布の平均m。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#poissonComplemented(int,%20double)を参照してください。

例

例10-157は問合せqColt50を示しています。例10-158はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-159に示すリレーションを返します。

例10-157 poissonComplemented関数の問合せ

<query id="qColt50"><![CDATA[
select poissonComplemented(c1,c2) from SColtFunc
]]></query>

例10-158 poissonComplemented関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-159 poissonComplemented関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.09020401
1000:       +           7.855354E-4
1200:       +           0.012970487
2000:       +           5.043364E-10

stirlingCorrection

構文

目的

stirlingCorrectionは、cern.jet.math.Arithmeticに基づいています。integerの引数の階乗の自然対数(底はe)のスターリングの近似の補正項(図10-18を参照)をdoubleとして返します。

図10-18 cern.jet.math.Arithmetic stirlingCorrection

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Arithmetic.html#stirlingCorrection(int)を参照してください。

例

例10-160は問合せqColt5を示しています。例10-161はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-162に示すリレーションを返します。

例10-160 stirlingCorrection関数の問合せ

<query id="qColt5"><![CDATA[
select stirlingCorrection(c1) from SColtFunc
]]></query>

例10-161 stirlingCorrection関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-162 stirlingCorrection関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.08106147
1000:       +           0.020790672
1200:       +           0.027677925
2000:       +           0.010411265

studentT

構文

目的

studentTは、cern.jet.stat.Probabilityに基づいています。自由度がk > 0のスチューデントのt分布の負の無限大からtへの積分(図10-19を参照)をdoubleとして返します。

図10-19 cern.jet.stat.Probability studentT

この関数は次の引数を使用します。

- double1: 自由度k。

- double2: 積分終了点t。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#studentT(double,%20double)を参照してください。

例

例10-163は問合せqColt51を示しています。例10-164はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-165に示すリレーションを返します。

例10-163 studentT関数の問合せ

<query id="qColt51"><![CDATA[
select studentT(c2,c2) from SColtFunc
]]></query>

例10-164 studentT関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-165 studentT関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           0.621341
1000:       +           0.67624015
1200:       +           0.7243568
2000:       +           0.5930112

studentTInverse

構文

目的

studentTInverseはcern.jet.stat.Probabilityに基づいています。負の無限大からtに積分される、スチューデントのt確率密度関数で示す領域が1-alpha/2に等しい場合のdoubleの値tを返します。返される値は、talpha[size]の通常のスチューデントのt分布のルックアップ表に相当します。この関数では、studentt関数を使用して、繰り返し戻り値を確認します。

この関数は次の引数を使用します。

- double1: 確率alpha。

- integer2: データ・セット・サイズ。

詳細は、以下を参照してください。

- http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/stat/Probability.html#studentTInverse(double,%20int)

- 「studentT」

例

例10-166は問合せqColt52を示しています。例10-167はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-168に示すリレーションを返します。

例10-166 studentTInverse関数の問合せ

<query id="qColt52"><![CDATA[
select studentTInverse(c2,c1) from SColtFunc
]]></query>

例10-167 studentTInverse関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-168 studentTInverse関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           0.4141633
1200:       +           0.15038916
2000:       +           0.8888911

y0

構文

目的

y0は、cern.jet.math.Besselに基づいています。doubleの引数の階数0の第2種ベッセル関数をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#y0(double)を参照してください。

例

例10-169は問合せqColt24を示しています。例10-170はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-171に示すリレーションを返します。

例10-169 y0関数の問合せ

<query id="qColt24"><![CDATA[
select y0(c2) from SColtFunc
]]></query>

例10-170 y0関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-171 y0関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           -0.44451874
1000:       +           -0.19066493
1200:       +           -0.0031519707
2000:       +           -0.60602456

y1

構文

目的

y1は、cern.jet.math.Besselに基づいています。floatの引数の階数1の第2種ベッセル関数をdoubleとして返します。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#y1(double)を参照してください。

例

例10-172は問合せqColt25を示しています。例10-173はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-174に示すリレーションを返します。

例10-172 y1関数の問合せ

<query id="qColt25"><![CDATA[
select y1(c2) from SColtFunc
]]></query>

例10-173 y1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-174 y1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           -1.4714724
1000:       +           -1.1032499
1200:       +           -0.88294965
2000:       +           -1.780872

yn

構文

目的

ynは、cern.jet.math.Besselに基づいています。doubleの引数の階数nの第2種ベッセル関数をdoubleとして返します。

この関数は次の引数を使用します。

- integer1: ベッセル関数の階層の値n。

- double2: ベッセル関数を計算する値x。

詳細は、http://dsd.lbl.gov/~hoschek/colt/api/cern/jet/math/Bessel.html#yn(int,%20double)を参照してください。

例

例10-175は問合せqColt26を示しています。例10-176はスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncを示しており、この問合せは例10-177に示すリレーションを返します。

例10-175 yn関数の問合せ

<query id="qColt26"><![CDATA[
select yn(c1,c2) from SColtFunc
]]></query>

例10-176 yn関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例10-177 yn関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +             -1.4714724
1000:       +           -132.63406
1200:       +             -8.020442
2000:       +             -6.3026547E8

11 Colt集計関数

この章では、Oracle Continuous Query Language (Oracle CQL)に含まれるColt集計関数のリファレンスを提供します。Colt集計関数は、高性能な科学技術計算のためのColtオープン・ソース・ライブラリに基づいています。

詳細は、1.1.11項「関数」を参照してください。

11.1 Oracle CQLの組込みの集計Colt関数の概要

表11-1は、Oracle CQLに用意されている組込みの集計Colt関数を示しています。

表11-1 Oracle CQLの組込みの集計Coltベースの関数

Coltパッケージ

関数

cern.jet.stat.Descriptive

一連の基本的な記述統計学関数。

- autoCorrelation

- correlation

- covariance

- geometricMean

- geometricMean1

- harmonicMean

- kurtosis

- lag1

- mean

- meanDeviation

- median

- moment

- pooledMean

- pooledVariance

- product

- quantile

- quantileInverse

- rankInterpolated

- rms

- sampleKurtosis

- sampleKurtosisStandardError

- sampleSkew

- sampleSkewStandardError

- sampleVariance

- skew

- standardDeviation

- standardError

- sumOfInversions

- sumOfLogarithms

- sumOfPowerDeviations

- sumOfPowers

- sumOfSquaredDeviations

- sumOfSquares

- trimmedMean

- variance

- weightedMean

- winsorizedMean

注意:

組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

リレーションの出力例では、最初のタプルの出力は次のようになります。

-9223372036854775808:+

この値は-Long.MIN_VALUE()であり、使用できる最大の負のタイムスタンプを表します。

詳細は、以下を参照してください。

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

- 11.1.2項「Colt集計関数とWhere、Group ByおよびHaving句」

- 1.1.11項「関数」

- 2.1項「データ型」

- http://dsd.lbl.gov/~hoschek/colt/

11.1.1 Oracle CQL Colt集計関数のシグネチャとタプル引数

Oracle CQLの Colt集計関数のシグネチャは、対応するColt集計関数のシグネチャとは一致しません。

次のColt集計関数について考えてみます。

double autoCorrelation(DoubleArrayList data, int lag, double mean, double variance)

このシグネチャでは、dataは集合の計算の対象となるCollectionであり、meanとvarianceはautoCorrelationの計算に必要な他の2つのパラメータの集合です(meanとvarianceの集合はdataで計算されます)。

Oracle CEPでは、dataがCollectionの形式になることはありません。Oracle CQLの関数は、タプルのストリームで入力データを受け取ります。

ここでは、ストリームがS:(double val, integer lag)と定義されているとします。各入力タプルでは、Oracle CQLのautoCorrelation関数が2つの中間的な集合(meanとvariance)を計算し、最終的な1つの集合autoCorrelationを生成します。

この関数では、doubleのdata値とintegerのlag値のみを持つタプルのストリームが必要であるため、Oracle CQLのautoCorrelation関数のシグネチャは次のようになります。

double autoCorrelation (double data, int lag)

11.1.2 Colt集計関数とWhere、Group ByおよびHaving句

Oracle CQLでは、where句はgroup by句およびhaving句の前に適用されます。したがって、例11-1のOracle CQL文は無効です。

例11-1 countの無効な使用

<query id="q1"><![CDATA[
select * from InputChannel[rows 4 slide 4] as ic where geometricMean(c3) > 4
]]></query>

例11-2に示すようなOracle CQL文を使用する必要があります。

例11-2 countの有効な使用

<query id="q1"><![CDATA[
select * from InputChannel[rows 4 slide 4] as ic, myGeoMean = geometricMean(c3) where myGeoMean > 4
]]></query>

詳細は、以下を参照してください。

- 「opt_where_clause::=」

- 「opt_group_by_clause::=」

- 「opt_having_clause::=」

autoCorrelation

構文

目的

autoCorrelationはcern.jet.stat.Descriptive.autoCorrelation(DoubleArrayList data, int lag, double mean, double variance)に基づいています。入力引数のデータ列の自己相関をdoubleとして返します。

注意:

この関数のセマンティクスは「lag1」とは異なります。

この関数は次のタプル引数を使用します。

- double1: データ値。

- int1: ラグ。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#autoCorrelation(cern.colt.list.DoubleArrayList,%20int,%20double,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-3では問合せqColtAggr1を示しています。例11-4ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-5に示すリレーションを返します。

例11-3 autoCorrelation関数の問合せ

<query id="qColtAggr1"><![CDATA[
select autoCorrelation(c3, 0) from SColtAggrFunc
]]></query>

例11-4 autoCorrelation関数のストリーム入力

Timestamp   Tuple
10        5.441341838866902
1000        6.1593756700951054
1200        3.7269733222923676
1400        4.625160266213489
1600        3.490061774090248
1800        3.6354484064421917
2000        5.635401664977703
2200        5.006087562207967
2400        3.632574304861612
2600        7.618087248962962
h 8000
h 200000000

例11-5 autoCorrelation関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           1.0
1200:       -           1.0
1200:       +           1.0
1400:       -           1.0
1400:       +           1.0
1600:       -           1.0
1600:       +           1.000000000000002
1800:       -           1.000000000000002
1800:       +           1.0
2000:       -           1.0
2000:       +           0.9999999999999989
2200:       -           0.9999999999999989
2200:       +           0.999999999999999
2400:       -           0.999999999999999
2400:       +           0.9999999999999991
2600:       -           0.9999999999999991
2600:       +           1.0000000000000013

correlation

構文

目的

correlationはcern.jet.stat.Descriptive.correlation(DoubleArrayList data1, double standardDev1, DoubleArrayList data2, double standardDev2)に基づいています。入力引数の2つのデータ列の相関をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値1。

- double2: データ値2。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#correlation(cern.colt.list.DoubleArrayList,%20double,%20cern.colt.list.DoubleArrayList,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-6では問合せqColtAggr2を示しています。例11-7ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-8に示すリレーションを返します。

例11-6 correlation関数の問合せ

<query id="qColtAggr2"><![CDATA[
select correlation(c3, c3) from SColtAggrFunc
]]></query>

例11-7 correlation関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-8 correlation関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           2.0
1200:       -           2.0
1200:       +           1.5
2000:       -           1.5
2000:       +           1.333333333333333

covariance

構文

目的

covarianceはcern.jet.stat.Descriptive.covariance(DoubleArrayList data1, DoubleArrayList data2)に基づいています。入力引数の2つのデータ列の相関(図11-1を参照)をdoubleとして返します。

図11-1 cern.jet.stat.Descriptive.covariance

この関数は次のタプル引数を使用します。

- double1: データ値1。

- double2: データ値2。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#covariance(cern.colt.list.DoubleArrayList,%20cern.colt.list.DoubleArrayList)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-9では問合せqColtAggr3を示しています。例11-10ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-11に示すリレーションを返します。

例11-9 covariance関数の問合せ

<query id="qColtAggr3"><![CDATA[
select covariance(c3, c3) from SColtAggrFunc
]]></query>

例11-10 covariance関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-11 covariance関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           50.0
1200:       -           50.0
1200:       +           100.0
2000:       -           100.0
2000:       +           166.66666666666666

geometricMean

構文

目的

geometricMeanはcern.jet.stat.Descriptive.geometricMean(DoubleArrayList data)に基づいています。入力引数のデータ列の幾何平均(図11-2を参照)をdoubleとして返します。

図11-2 cern.jet.stat.Descriptive.geometricMean(DoubleArrayList data)

この関数は次のタプル引数を使用します。

- double1: データ値。

幾何平均が意味を成すには、最小のデータ値が0以下にならないようにしてください。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#geometricMean(cern.colt.list.DoubleArrayList)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-12では問合せqColtAggr6を示しています。例11-13ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-14に示すリレーションを返します。

例11-12 geometricMean関数の問合せ

<query id="qColtAggr6"><![CDATA[
select geometricMean(c3) from SColtAggrFunc
]]></query>

例11-13 geometricMean関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-14 geometricMean関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           40.0
1000:       -           40.0
1000:       +           34.64101615137755
1200:       -           34.64101615137755
1200:       +           28.844991406148168
2000:       -           28.844991406148168
2000:       +           22.133638394006436

geometricMean1

構文

目的

geometricMean1はcern.jet.stat.Descriptive.geometricMean(double sumOfLogarithms)に基づいています。入力引数のデータ列の幾何平均(図11-3を参照)をdoubleとして返します。

図11-3 cern.jet.stat.Descriptive.geometricMean1(int size, double sumOfLogarithms)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#geometricMean(cern.colt.list.DoubleArrayList)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-15では問合せqColtAggr7を示しています。例11-16ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-17に示すリレーションを返します。

例11-15 geometricMean1関数の問合せ

<query id="qColtAggr7"><![CDATA[
select geometricMean1(c3) from SColtAggrFunc
]]></query>

例11-16 geometricMean1関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-17 geometricMean1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           Infinity
1000:       -           Infinity
1000:       +           Infinity
1200:       -           Infinity
1200:       +           Infinity
2000:       -           Infinity
2000:       +           Infinity

harmonicMean

構文

目的

harmonicMeanは、cern.jet.stat.Descriptive.harmonicMean(int size, double sumOfInversions)に基づいています。データ列の調和平均をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#harmonicMean(int,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-18では問合せqColtAggr8を示しています。例11-19ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-20に示すリレーションを返します。

例11-18 harmonicMean関数の問合せ

<query id="qColtAggr8"><![CDATA[
select harmonicMean(c3) from SColtAggrFunc
]]></query>

例11-19 harmonicMean関数のストリーム入力

Timestamp   Tuple
10        5.441341838866902
1000        6.1593756700951054
1200        3.7269733222923676
1400        4.625160266213489
1600        3.490061774090248
1800        3.6354484064421917
2000        5.635401664977703
2200        5.006087562207967
2400        3.632574304861612
2600        7.618087248962962
h 8000
h 200000000

例11-20 harmonicMean関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           5.441341876983643
1000:       -           5.441341876983643
1000:       +           5.778137193205395
1200:       -           5.778137193205395
1200:       +           4.882442561720335
1400:       -           4.882442561720335
1400:       +           4.815475325819701
1600:       -           4.815475325819701
1600:       +           4.475541862878903
1800:       -           4.475541862878903
1800:       +           4.309563447664887
2000:       -           4.309563447664887
2000:       +           4.45944509362759
2200:       -           4.45944509362759
2200:       +           4.5211563834502515
2400:       -           4.5211563834502515
2400:       +           4.401525382790638
2600:       -           4.401525382790638
2600:       +           4.595562422157167

kurtosis

構文

目的

kurtosisは、cern.jet.stat.Descriptive.kurtosis(DoubleArrayList data, double mean, double standardDeviation)に基づいています。データ列の尖度(超過係数)(図11-4を参照)をdoubleとして返します。

図11-4 cern.jet.stat.Descriptive.kurtosis(DoubleArrayList data, double mean, double standardDeviation)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#kurtosis(cern.colt.list.DoubleArrayList,%20double,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-21では問合せqColtAggr12を示しています。例11-22ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-23に示すリレーションを返します。

例11-21 kurtosis関数の問合せ

<query id="qColtAggr12"><![CDATA[
select kurtosis(c3) from SColtAggrFunc
]]></query>

例11-22 kurtosis関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-23 kurtosis関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           -2.0
1200:       -           -2.0
1200:       +           -1.5000000000000002
2000:       -           -1.5000000000000002
2000:       +           -1.3600000000000003

lag1

構文

目的

lag1はcern.jet.stat.Descriptive.lag1(DoubleArrayList data, double mean)に基づいています。データ・セットの自己相関lag - 1をdoubleとして返します。

注意:

この関数のセマンティクスは「autoCorrelation」とは異なります。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#lag1(cern.colt.list.DoubleArrayList,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-24では問合せqColtAggr14を示しています。例11-25ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-26に示すリレーションを返します。

例11-24 lag1関数の問合せ

<query id="qColtAggr14"><![CDATA[
select lag1(c3) from SColtAggrFunc
]]></query>

例11-25 lag1関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-26 lag1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           -0.5
1200:       -           -0.5
1200:       +           0.0
2000:       -           0.0
2000:       +           0.25

mean

構文

目的

meanはcern.jet.stat.Descriptive.mean(DoubleArrayList data)に基づいています。データ列の算術平均(図11-5を参照)をdoubleとして返します。

図11-5 cern.jet.stat.Descriptive.mean(DoubleArrayList data)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#mean(cern.colt.list.DoubleArrayList)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-27では問合せqColtAggr16を示しています。例11-28ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-29に示すリレーションを返します。

例11-27 mean関数の問合せ

<query id="qColtAggr16"><![CDATA[
select mean(c3) from SColtAggrFunc
]]></query>

例11-28 mean関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-29 mean関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           40.0
1000:       -           40.0
1000:       +           35.0
1200:       -           35.0
1200:       +           30.0
2000:       -           30.0
2000:       +           25.0

meanDeviation

構文

目的

meanDeviationはcern.jet.stat.Descriptive.meanDeviation(DoubleArrayList data, double mean)に基づいています。データ・セットの平均偏差(図11-6を参照)をdoubleとして返します。

図11-6 cern.jet.stat.Descriptive.meanDeviation(DoubleArrayList data, double mean)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#meanDeviation(cern.colt.list.DoubleArrayList,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-30では問合せqColtAggr17を示しています。例11-31ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-32に示すリレーションを返します。

例11-30 meanDeviation関数の問合せ

<query id="qColtAggr17"><![CDATA[
select meanDeviation(c3) from SColtAggrFunc
]]></query>

例11-31 meanDeviation関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-32 meanDeviation関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           5.0
1200:       -           5.0
1200:       +           6.666666666666667
2000:       -           6.666666666666667
2000:       +           10.0

median

構文

目的

medianは、cern.jet.stat.Descriptive.median(DoubleArrayList sortedData)に基づいています。ソートされたデータ列の中央値をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#median(cern.colt.list.DoubleArrayList)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-33では問合せqColtAggr18を示しています。例11-34ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-35に示すリレーションを返します。

例11-33 median関数の問合せ

<query id="qColtAggr18"><![CDATA[
select median(c3) from SColtAggrFunc
]]></query>

例11-34 median関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-35 median関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           40.0
1000:       -           40.0
1000:       +           35.0
1200:       -           35.0
1200:       +           30.0
2000:       -           30.0
2000:       +           25.0

moment

構文

目的

momentはcern.jet.stat.Descriptive.moment(DoubleArrayList data, int k, double c)に基づいています。データ列の定数cを持つk番目の積率(図11-7を参照)をdoubleとして返します。

図11-7 cern.jet.stat.Descriptive.moment(DoubleArrayList data, int k, double c)

この関数は次のタプル引数を使用します。

- double1: データ値。

- int1: k。

- double2: c。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#moment(cern.colt.list.DoubleArrayList,%20int,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-36では問合せqColtAggr21を示しています。例11-37ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-38に示すリレーションを返します。

例11-36 moment関数の問合せ

<query id="qColtAggr21"><![CDATA[
select moment(c3, c1, c3) from SColtAggrFunc
]]></query>

例11-37 moment関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-38 moment関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           5000.0
1200:       -           5000.0
1200:       +           3000.0
2000:       -           3000.0
2000:       +           1.7045E11

pooledMean

構文

目的

pooledMeanはcern.jet.stat.Descriptive.pooledMean(int size1, double mean1, int size2, double mean2)に基づいています。2つのデータ列の統合平均(図11-8を参照)をdoubleとして返します。

図11-8 cern.jet.stat.Descriptive.pooledMean(int size1, double mean1, int size2, double mean2)

この関数は次のタプル引数を使用します。

- double1: 平均1。

- double2: 平均2。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#pooledMean(int,%20double,%20int,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-39では問合せqColtAggr22を示しています。例11-40ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-41に示すリレーションを返します。

例11-39 pooledMean関数の問合せ

<query id="qColtAggr22"><![CDATA[
select pooledMean(c3, c3) from SColtAggrFunc
]]></query>

例11-40 pooledMean関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-41 pooledMean関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           40.0
1000:       -           40.0
1000:       +           35.0
1200:       -           35.0
1200:       +           30.0
2000:       -           30.0
2000:       +           25.0

pooledVariance

構文

目的

pooledVarianceはcern.jet.stat.Descriptive.pooledVariance(int size1, double variance1, int size2, double variance2)に基づいています。2つのデータ列の統合分散(図11-9を参照)をdoubleとして返します。

図11-9 cern.jet.stat.Descriptive.pooledVariance(int size1, double variance1, int size2, double variance2)

この関数は次のタプル引数を使用します。

- double1: 分散1。

- double2: 分散2。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#pooledVariance(int,%20double,%20int,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-42では問合せqColtAggr23を示しています。例11-43ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-44に示すリレーションを返します。

例11-42 pooledVariance関数の問合せ

<query id="qColtAggr23"><![CDATA[
select pooledVariance(c3, c3) from SColtAggrFunc
]]></query>

例11-43 pooledVariance関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-44 pooledVariance関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           25.0
1200:       -           25.0
1200:       +           66.66666666666667
2000:       -           66.66666666666667
2000:       +           125.0

product

構文

目的

productはcern.jet.stat.Descriptive.product(DoubleArrayList data)に基づいています。データ列の積(図11-10を参照)をdoubleとして返します。

図11-10 cern.jet.stat.Descriptive.product(DoubleArrayList data)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#product(cern.colt.list.DoubleArrayList)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-45では問合せqColtAggr24を示しています。例11-46ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-47に示すリレーションを返します。

例11-45 product関数の問合せ

<query id="qColtAggr24"><![CDATA[
select product(c3) from SColtAggrFunc
]]></query>

例11-46 product関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-47 product関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           40.0
1000:       -           40.0
1000:       +           1200.0
1200:       -           1200.0
1200:       +           24000.0
2000:       -           24000.0
2000:       +           240000.0

quantile

構文

目的

quantileは、cern.jet.stat.Descriptive.quantile(DoubleArrayList sortedData, double phi)に基づいています。ファイの変位値、つまり、データ要素のファイ・パーセントがelem未満である場合のelem要素をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

- double2: ファイ。割合を示します。0 <= phi <= 1を満たす必要があります。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#quantile(cern.colt.list.DoubleArrayList,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-48では問合せqColtAggr26を示しています。例11-49ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-50に示すリレーションを返します。

例11-48 quantile関数の問合せ

<query id="qColtAggr26"><![CDATA[
select quantile(c3, c2) from SColtAggrFunc
]]></query>

例11-49 quantile関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-50 quantile関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:         -
10:         +         40.0
1000:         -         40.0
1000:         +         36.99999988079071
1200:         -         36.99999988079071
1200:         +         37.799999713897705
2000:         -         37.799999713897705
2000:         +         22.000000178813934

quantileInverse

構文

目的

quantileInverseは、cern.jet.stat.Descriptive.quantileInverse(DoubleArrayList sortedList, double element)に基づいています。<= element(0.0 <= phi <= 1.0)である要素の割合ファイをdoubleとして返します。elementが包含されておらず、包含される2つの要素間に存在する場合、この関数は線形補間を実行します。

この関数は次のタプル引数を使用します。

- double1: データ。

- double2: element。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#quantileInverse(cern.colt.list.DoubleArrayList,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-51では問合せqColtAggr27を示しています。例11-52ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-53に示すリレーションを返します。

例11-51 quantileInverse関数の問合せ

<query id="qColtAggr27"><![CDATA[
select quantileInverse(c3, c3) from SColtAggrFunc
]]></query>

例11-52 quantileInverse関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-53 quantileInverse関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           1.0
1000:       -           1.0
1000:       +           0.5
1200:       -           0.5
1200:       +           0.3333333333333333
2000:       -           0.3333333333333333
2000:       +           0.25

rankInterpolated

構文

目的

rankInterpolatedはcern.jet.stat.Descriptive.rankInterpolated(DoubleArrayList sortedList, double element)に基づいています。指定されたelement以下である、リスト内の線形補間された要素数をdoubleとして返します。

階数は<= elementである要素数です。階数の形式は{0, 1, 2,..., sortedList.size()}です。<= elementである要素が存在しない場合、階数は0です。包含される2つの要素間に要素が存在する場合は、線形補間が使用され、整数以外の値が返されます。

この関数は次のタプル引数を使用します。

- double1: データ値。

- double2: element。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#rankInterpolated(cern.colt.list.DoubleArrayList,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-54では問合せqColtAggr29を示しています。例11-55ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-56に示すリレーションを返します。

例11-54 rankInterpolated関数の問合せ

<query id="qColtAggr29"><![CDATA[
select rankInterpolated(c3, c3) from SColtAggrFunc
]]></query>

例11-55 rankInterpolated関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-56 rankInterpolated関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           1.0
1000:       -           1.0
1000:       +           1.0
1200:       -           1.0
1200:       +           1.0
2000:       -           1.0
2000:       +           1.0

rms

構文

目的

rmsはcern.jet.stat.Descriptive.rms(int size, double sumOfSquares)に基づいています。データ列の2乗平均平方根(RMS)(図11-11を参照)をdoubleとして返します。

図11-11 cern.jet.stat.Descriptive.rms(int size, double sumOfSquares)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#rms(int,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-57では問合せqColtAggr30を示しています。例11-58ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-59に示すリレーションを返します。

例11-57 rms関数の問合せ

<query id="qColtAggr30"><![CDATA[
select rms(c3) from SColtAggrFunc
]]></query>

例11-58 rms関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-59 rms関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           40.0
1000:       -           40.0
1000:       +           35.35533905932738
1200:       -           35.35533905932738
1200:       +           31.09126351029605
2000:       -           31.09126351029605
2000:       +           27.386127875258307

sampleKurtosis

構文

目的

sampleKurtosisは、cern.jet.stat.Descriptive.sampleKurtosis(DoubleArrayList data, double mean, double sampleVariance)に基づいています。データ列の標本尖度(超過係数)をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sampleKurtosis(cern.colt.list.DoubleArrayList,%20double,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-60では問合せqColtAggr31を示しています。例11-61ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-62に示すリレーションを返します。

例11-60 sampleKurtosis関数の問合せ

<query id="qColtAggr31"><![CDATA[
select sampleKurtosis(c3) from SColtAggrFunc
]]></query>

例11-61 sampleKurtosis関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-62 sampleKurtosis関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           NaN
1200:       -           NaN
1200:       +           NaN
2000:       -           NaN
2000:       +           -1.1999999999999993

sampleKurtosisStandardError

構文

目的

sampleKurtosisStandardErrorは、cern.jet.stat.Descriptive.sampleKurtosisStandardError(int size)に基づいています。標本尖度の標準誤差をdoubleとして返します。

この関数は次のタプル引数を使用します。

- int1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sampleKurtosisStandardError(int)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-63では問合せqColtAggr33を示しています。例11-64ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-65に示すリレーションを返します。

例11-63 sampleKurtosisStandardError関数の問合せ

<query id="qColtAggr33"><![CDATA[
select sampleKurtosisStandardError(c1) from SColtAggrFunc
]]></query>

例11-64 sampleKurtosisStandardError関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-65 sampleKurtosisStandardError関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           Infinity
1200:       -           Infinity
1200:       +           Infinity
2000:       -           Infinity
2000:       +           2.6186146828319083

sampleSkew

構文

目的

sampleSkewは、cern.jet.stat.Descriptive.sampleSkew(DoubleArrayList data, double mean, double sampleVariance)に基づいています。データ列の標本歪度をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sampleSkew(cern.colt.list.DoubleArrayList,%20double,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-66では問合せqColtAggr34を示しています。例11-67ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-68に示すリレーションを返します。

例11-66 sampleSkew関数の問合せ

<query id="qColtAggr34"><![CDATA[
select sampleSkew(c3) from SColtAggrFunc
]]></query>

例11-67 sampleSkew関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-68 sampleSkew関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           NaN
1200:       -           NaN
1200:       +           0.0
2000:       -           0.0
2000:       +           0.0

sampleSkewStandardError

構文

目的

sampleSkewStandardErrorは、cern.jet.stat.Descriptive.sampleSkewStandardError(int size)に基づいています。標本歪度の標準誤差をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sampleSkewStandardError(int)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-69では問合せqColtAggr36を示しています。例11-70ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-71に示すリレーションを返します。

例11-69 sampleSkewStandardError関数の問合せ

<query id="qColtAggr36"><![CDATA[
select sampleSkewStandardError(c1) from SColtAggrFunc
]]></query>

例11-70 sampleSkewStandardError関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-71 sampleSkewStandardError関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           -0.0
1000:       -           -0.0
1000:       +           Infinity
1200:       -           Infinity
1200:       +           1.224744871391589
2000:       -           1.224744871391589
2000:       +           1.01418510567422

sampleVariance

構文

目的

sampleVarianceはcern.jet.stat.Descriptive.sampleVariance(DoubleArrayList data, double mean)に基づいています。データ列の標本分散(図11-12を参照)をdoubleとして返します。

図11-12 cern.jet.stat.Descriptive.sampleVariance(DoubleArrayList data, double mean)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sampleVariance(cern.colt.list.DoubleArrayList,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-72では問合せqColtAggr38を示しています。例11-73ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-74に示すリレーションを返します。

例11-72 sampleVariance関数の問合せ

<query id="qColtAggr38"><![CDATA[
select sampleVariance(c3) from SColtAggrFunc
]]></query>

例11-73 sampleVariance関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-74 sampleVariance関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           50.0
1200:       -           50.0
1200:       +           100.0
2000:       -           100.0
2000:       +           166.66666666666666

skew

構文

目的

skewはcern.jet.stat.Descriptive.skew(DoubleArrayList data, double mean, double standardDeviation)に基づいています。データ列の歪度(図11-13を参照)をdoubleとして返します。

図11-13 cern.jet.stat.Descriptive.skew(DoubleArrayList data, double mean, double standardDeviation)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#skew(cern.colt.list.DoubleArrayList,%20double,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-75では問合せqColtAggr41を示しています。例11-76ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-77に示すリレーションを返します。

例11-75 skew関数の問合せ

<query id="qColtAggr41"><![CDATA[
select skew(c3) from SColtAggrFunc
]]></query>

例11-76 skew関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-77 skew関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           0.0
1200:       -           0.0
1200:       +           0.0
2000:       -           0.0
2000:       +           0.0

standardDeviation

構文

目的

standardDeviationは、cern.jet.stat.Descriptive.standardDeviation(double variance)に基づいています。分散からの標準偏差をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#standardDeviation(double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-78では問合せqColtAggr44を示しています。例11-79ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-80に示すリレーションを返します。

例11-78 standardDeviation関数の問合せ

<query id="qColtAggr44"><![CDATA[
select standardDeviation(c3) from SColtAggrFunc
]]></query>

例11-79 standardDeviation関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-80 standardDeviation関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           5.0
1200:       -           5.0
1200:       +           8.16496580927726
2000:       -           8.16496580927726
2000:       +           11.180339887498949

standardError

構文

目的

standardErrorはcern.jet.stat.Descriptive.standardError(int size, double variance)に基づいています。データ列の標準誤差(図11-14を参照)をdoubleとして返します。

図11-14 cern.jet.stat.Descriptive.cern.jet.stat.Descriptive.standardError(int size, double variance)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#standardError(int,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-81では問合せqColtAggr45を示しています。例11-82ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-83に示すリレーションを返します。

例11-81 standardError関数の問合せ

<query id="qColtAggr45"><![CDATA[
select standardError(c3) from SColtAggrFunc
]]></query>

例11-82 standardError関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-83 standardError関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           3.5355339059327378
1200:       -           3.5355339059327378
1200:       +           4.714045207910317
2000:       -           4.714045207910317
2000:       +           5.5901699437494745

sumOfInversions

構文

目的

sumOfInversionsはcern.jet.stat.Descriptive.sumOfInversions(DoubleArrayList data, int from, int to)に基づいています。データ列の反転の合計(図11-15を参照)をdoubleとして返します。

図11-15 cern.jet.stat.Descriptive.sumOfInversions(DoubleArrayList data, int from, int to)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sumOfInversions(cern.colt.list.DoubleArrayList,%20int,%20int)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-84では問合せqColtAggr48を示しています。例11-85ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-86に示すリレーションを返します。

例11-84 sumOfInversions関数の問合せ

<query id="qColtAggr48"><![CDATA[
select sumOfInversions(c3) from SColtAggrFunc
]]></query>

例11-85 sumOfInversions関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-86 sumOfInversions関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           Infinity
1000:       -           Infinity
1000:       +           Infinity
1200:       -           Infinity
1200:       +           Infinity
2000:       -           Infinity
2000:       +           Infinity

sumOfLogarithms

構文

目的

sumOfLogarithmsはcern.jet.stat.Descriptive.sumOfLogarithms(DoubleArrayList data, int from, int to)に基づいています。データ列の対数の合計(図11-16を参照)をdoubleとして返します。

図11-16 cern.jet.stat.Descriptive.sumOfLogarithms(DoubleArrayList data, int from, int to)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sumOfLogarithms(cern.colt.list.DoubleArrayList,%20int,%20int)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-87では問合せqColtAggr49を示しています。例11-88ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-89に示すリレーションを返します。

例11-87 sumOfLogarithms関数の問合せ

<query id="qColtAggr49"><![CDATA[
select sumOfLogarithms(c3) from SColtAggrFunc
]]></query>

例11-88 sumOfLogarithms関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-89 sumOfLogarithms関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           -Infinity
1000:       -           -Infinity
1000:       +           -Infinity
1200:       -           -Infinity
1200:       +           -Infinity
2000:       -           -Infinity
2000:       +           -Infinity

sumOfPowerDeviations

構文

目的

sumOfPowerDeviationsはcern.jet.stat.Descriptive.sumOfPowerDeviations(DoubleArrayList data, int k, double c)に基づいています。データ列の累乗の偏差の合計(図11-17を参照)をdoubleとして返します。

図11-17 cern.jet.stat.Descriptive.sumOfPowerDeviations(DoubleArrayList data, int k, double c)

この関数は、c == 0.0、k == -2 .. 4またはその両方などの一般的なパラメータ用に最適化されます。

この関数は次のタプル引数を使用します。

- double1: データ値。

- int1: k。

- double2: c。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sumOfPowerDeviations(cern.colt.list.DoubleArrayList,%20int,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-90では問合せqColtAggr50を示しています。例11-91ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-92に示すリレーションを返します。

例11-90 sumOfPowerDeviations関数の問合せ

<query id="qColtAggr50"><![CDATA[
select sumOfPowerDeviations(c3, c1, c3) from SColtAggrFunc
]]></query>

例11-91 sumOfPowerDeviations関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-92 sumOfPowerDeviations関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           10000.0
1200:       -           10000.0
1200:       +           9000.0
2000:       -           9000.0
2000:       +           6.818E11

sumOfPowers

構文

目的

sumOfPowersはcern.jet.stat.Descriptive.sumOfPowers(DoubleArrayList data, int k)に基づいています。データ列の累乗の合計(図11-18を参照)をdoubleとして返します。

図11-18 cern.jet.stat.Descriptive.sumOfPowers(DoubleArrayList data, int k)

この関数は次のタプル引数を使用します。

- double1: データ値。

- int1: k。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sumOfPowers(cern.colt.list.DoubleArrayList,%20int)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-93では問合せqColtAggr52を示しています。例11-94ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-95に示すリレーションを返します。

例11-93 sumOfPowers関数の問合せ

<query id="qColtAggr52"><![CDATA[
select sumOfPowers(c3, c1) from SColtAggrFunc
]]></query>

例11-94 sumOfPowers関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-95 sumOfPowers関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           40.0
1000:       -           40.0
1000:       +           3370000.0
1200:       -           3370000.0
1200:       +           99000.0
2000:       -           99000.0
2000:       +           7.2354E12

sumOfSquaredDeviations

構文

目的

sumOfSquaredDeviationsはcern.jet.stat.Descriptive.sumOfSquaredDeviations(int size, double variance)に基づいています。データ列の2乗平均偏差の合計(図11-19を参照)をdoubleとして返します。

図11-19 cern.jet.stat.Descriptive.sumOfSquaredDeviations(int size, double variance)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sumOfSquaredDeviations(int,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-96では問合せqColtAggr53を示しています。例11-97ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-98に示すリレーションを返します。

例11-96 sumOfSquaredDeviations関数の問合せ

<query id="qColtAggr53"><![CDATA[
select sumOfSquaredDeviations(c3) from SColtAggrFunc
]]></query>

例11-97 sumOfSquaredDeviations関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-98 sumOfSquaredDeviations関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           25.0
1200:       -           25.0
1200:       +           133.33333333333334
2000:       -           133.33333333333334
2000:       +           375.0

sumOfSquares

構文

目的

sumOfSquaresはcern.jet.stat.Descriptive.sumOfSquares(DoubleArrayList data)に基づいています。データ列の平方の合計(図11-20を参照)をdoubleとして返します。

図11-20 cern.jet.stat.Descriptive.sumOfSquares(DoubleArrayList data)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#sumOfSquares(cern.colt.list.DoubleArrayList)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-99では問合せqColtAggr54を示しています。例11-100ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-101に示すリレーションを返します。

例11-99 sumOfSquares関数の問合せ

<query id="qColtAggr54"><![CDATA[
select sumOfSquares(c3) from SColtAggrFunc
]]></query>

例11-100 sumOfSquares関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-101 sumOfSquares関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           1600.0
1000:       -           1600.0
1000:       +           2500.0
1200:       -           2500.0
1200:       +           2900.0
2000:       -           2900.0
2000:       +           3000.0

trimmedMean

構文

目的

trimmedMeanは、cern.jet.stat.Descriptive.trimmedMean(DoubleArrayList sortedData, double mean, int left, int right)に基づいています。昇順にソートされたデータ列のトリム平均をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

- int1: left。

- int2: right。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#trimmedMean(cern.colt.list.DoubleArrayList,%20double,%20int,%20int)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-102では問合せqColtAggr55を示しています。例11-103ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-104に示すリレーションを返します。

例11-102 trimmedMean関数の問合せ

<query id="qColtAggr55"><![CDATA[
select trimmedMean(c3, c1, c1) from SColtAggrFunc
]]></query>

例11-103 trimmedMean関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-104 trimmedMean関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+

variance

構文

目的

varianceはcern.jet.stat.Descriptive.variance(int size, double sum, double sumOfSquares)に基づいています。データ列の分散(図11-21を参照)をdoubleとして返します。

図11-21 cern.jet.stat.Descriptive.variance(int size, double sum, double sumOfSquares)

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#variance(int,%20double,%20double)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-105では問合せqColtAggr57を示しています。例11-106ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-107に示すリレーションを返します。

例11-105 variance関数の問合せ

<query id="qColtAggr57"><![CDATA[
select variance(c3) from SColtAggrFunc
]]></query>

例11-106 variance関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-107 variance関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           25.0
1200:       -           25.0
1200:       +           66.66666666666667
2000:       -           66.66666666666667
2000:       +           125.0

weightedMean

構文

目的

weightedMeanはcern.jet.stat.Descriptive.weightedMean(DoubleArrayList data, DoubleArrayList weights)に基づいています。データ列の加重平均(図11-22を参照)をdoubleとして返します。

図11-22 cern.jet.stat.Descriptive.weightedMean(DoubleArrayList data, DoubleArrayList weights)

この関数は次のタプル引数を使用します。

- double1: データ値。

- double2: 加重値。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#weightedMean(cern.colt.list.DoubleArrayList,%20cern.colt.list.DoubleArrayList)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-108では問合せqColtAggr58を示しています。例11-109ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-110に示すリレーションを返します。

例11-108 weightedMean関数の問合せ

<query id="qColtAggr58"><![CDATA[
select weightedMean(c3, c3) from SColtAggrFunc
]]></query>

例11-109 weightedMean関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-110 weightedMean関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           40.0
1000:       -           40.0
1000:       +           35.714285714285715
1200:       -           35.714285714285715
1200:       +           32.22222222222222
2000:       -           32.22222222222222
2000:       +           30.0

winsorizedMean

構文

目的

winsorizedMeanは、cern.jet.stat.Descriptive.winsorizedMean(DoubleArrayList sortedData, double mean, int left, int right)に基づいています。ソートされたデータ列のウィンザライズド平均をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

- int1: left。

- int2: right。

詳細は、以下を参照してください。

- http://acs.lbl.gov/~hoschek/colt/api/cern/jet/stat/Descriptive.html#winsorizedMean(cern.colt.list.DoubleArrayList,%20double,%20int,%20int)

- 11.1.1項「Oracle CQL Colt集計関数のシグネチャとタプル引数」

例

例11-111では問合せqColtAggr60を示しています。例11-112ではスキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncを示しており、この問合せは例11-113に示すリレーションを返します。

例11-111 winsorizedMean関数の問合せ

<query id="qColtAggr60"><![CDATA[
select winsorizedMean(c3, c1, c1) from SColtAggrFunc
]]></query>

例11-112 winsorizedMean関数のストリーム入力

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        4, 0.7, 30.0, 6
1200        3, 0.89, 20.0, 12
2000        8, 0.4, 10.0, 4
h 8000
h 200000000

例11-113 winsorizedMean関数のリレーション出力

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+

12 java.lang.Math関数

この章では、Oracle Continuous Query Language (Oracle CQL)に含まれるjava.lang.Math関数のリファレンスを提供します。

詳細は、1.1.11項「関数」を参照してください。

12.1 Oracle CQLの組込みのjava.lang.Math関数の概要

表12-1に、Oracle CQLに用意されている組込みのjava.lang.Math関数を示します。

表12-1 Oracle CQLの組込みのjava.lang.Math関数

型

関数

三角

- sin

- cos

- tan

- asin

- acos

- atan

- atan2

- cosh

- sinh

- tanh

対数

- log1

- log101

- log1p

オイラー数

- exp

- expm1

ルート

- cbrt

- sqrt

- hypot

符号関数

- signum

- signum1

最終桁単位

- ulp

- ulp1

その他

- abs

- abs1

- abs2

- abs3

- ceil1

- floor1

- IEEERemainder

- pow

- rint

- round

- round1

- todegrees

- toradians

注意:

組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

詳細は、以下を参照してください。

- 1.1.11項「関数」

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html

abs

構文

目的

absは、integerの入力引数の絶対値をintegerとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#abs(int)を参照してください。

例

例12-1では問合せq66を示しています。例12-2ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-3に示すストリームを返します。

例12-1 abs関数の問合せ

<query id="q66"><![CDATA[
select abs(c1) from SFunc
]]></query>

例12-2 abs関数のストリーム入力

Timestamp   Tuple
10         1,0.5,8
1000        -4,0.7,6
1200        -3,0.89,12
2000         8,0.4,4

例12-3 abs関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           4
1200:       +           3
2000:       +           8

abs1

構文

目的

absは、longの入力引数の絶対値をlongとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#abs(long)を参照してください。

例

例12-4では問合せq67を示しています。例12-5ではスキーマ(c1 integer, c2 float, c3 long)を持つデータ・ストリームSFuncを示しており、この問合せは例12-6に示すストリームを返します。

例12-4 abs1関数の問合せ

<query id="q67"><![CDATA[
select abs1(c3) from SFunc
]]></query>

例12-5 abs1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,-6
1200        3,0.89,-12
2000        8,0.4,4

例12-6 abs1関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           8
1000:       +           6
1200:       +           12
2000:       +           4

abs2

構文

目的

abs2は、floatの入力引数の絶対値をfloatとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#abs(float)を参照してください。

例

例12-7では問合せq68を示しています。例12-8ではスキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-9に示すストリームを返します。

例12-7 abs2関数の問合せ

<query id="q68"><![CDATA[
select abs2(c2) from SFunc
]]></query>

例12-8 abs2関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,-0.7,6
1200        3,-0.89,12
2000        8,0.4,4

例12-9 abs2関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.7
1200:       +           0.89
2000:       +           0.4

abs3

構文

目的

abs3は、doubleの入力引数の絶対値をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#abs(double)を参照してください。

例

例12-10では問合せq69を示しています。例12-11ではスキーマ(c1 integer, c2 float, c3 bigint, c4 double)を持つデータ・ストリームSFuncを示しており、この問合せは例12-12に示すストリームを返します。

例12-10 abs3関数の問合せ

<query id="q69"><![CDATA[
select abs3(c4) from SFunc
]]></query>

例12-11 abs3関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8,0.25334
1000        4,0.7,6,-4.64322
1200        3,0.89,12,-1.4672272
2000        8,0.4,4,2.66777

例12-12 abs3関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.25334
1000:       +           4.64322
1200:       +           1.4672272
2000:       +           2.66777

acos

構文

目的

acosは、0.0からpiの範囲の、doubleの角度の逆余弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#acos(double)を参照してください。

例

例12-13では問合せq73を示しています。例12-14ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-15に示すストリームを返します。

例12-13 acos関数の問合せ

<query id="q73"><![CDATA[
select acos(c2) from SFunc
]]></query>

例12-14 acos関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-15 acos関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           1.0471976
1000:       +           0.79539883
1200:       +           0.4734512
2000:       +           1.1592795

asin

構文

目的

asinは、-pi/2からpi/2の範囲の、doubleの角度の逆正弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#asin(double)を参照してください。

例

例12-16では問合せq74を示しています。例12-17ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-18に示すストリームを返します。

例12-16 asin関数の問合せ

<query id="q74"><![CDATA[
select asin(c2) from SFunc
]]></query>

例12-17 asin関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-18 asin関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5235988
1000:       +           0.7753975
1200:       +           1.0973451
2000:       +           0.41151685

atan

構文

目的

atanは、-pi/2からpi/2の範囲の、doubleの角度の逆正接をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#atan(double)を参照してください。

例

例12-19では問合せq75を示しています。例12-20ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-21に示すストリームを返します。

例12-19 atan関数の問合せ

<query id="q75"><![CDATA[
select atan(c2) from SFunc
]]></query>

例12-20 atan関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-21 atan関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.4636476
1000:       +           0.61072594
1200:       +           0.7272627
2000:       +           0.3805064

atan2

構文

目的

atan2は、直交座標(x,y)を極座標(r,theta)に変換します。

この関数は次の引数を使用します。

- double1: 縦座標。

- double2: 横座標。

この関数は、デカルト座標の点(x,y)に対応する極座標の点(r,theta)のシータ成分をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#atan2(double,%20double)を参照してください。

例

例12-22では問合せq63を示しています。例12-23ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-24に示すストリームを返します。

例12-22 atan2関数の問合せ

<query id="q63"><![CDATA[
select atan2(c2,c2) from SFunc
]]></query>

例12-23 atan2関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-24 atan2関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.7853982
1000:       +           0.7853982
1200:       +           0.7853982
2000:       +           0.7853982

cbrt

構文

目的

cbrtは、doubleの引数の立方根をdoubleとして返します。

正の有限のaの場合は、cbrt(-a) == -cbrt(a)になります。つまり、負の値の立方根は、その値の大きさの立方根の負量です。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#cbrt(double)を参照してください。

例

例12-25では問合せq76を示しています。例12-26ではスキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-27に示すストリームを返します。

例12-25 cbrt関数の問合せ

<query id="q76"><![CDATA[
select cbrt(c2) from SFunc
]]></query>

例12-26 cbrt関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-27 cbrt関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.7937005
1000:       +           0.887904
1200:       +           0.9619002
2000:       +           0.73680633

ceil1

構文

目的

ceil1は、doubleの引数以上であり、数学的整数に等しいdoubleの最小(負の無限大に最も近い)値を返します。

丸めエラーの発生を回避するには、(long) cern.jet.math.Arithmetic.ceil(double)の使用を検討してください。

詳細は、以下を参照してください。

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html#ceil(double)

- 「ceil」

例

例12-28では問合せq77を示しています。例12-29ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-30に示すストリームを返します。

例12-28 ceil1関数の問合せ

<query id="q77"><![CDATA[
select ceil1(c2) from SFunc
]]></query>

例12-29 ceil1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-30 ceil1関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           1.0
1200:       +           1.0
2000:       +           1.0

cos

構文

目的

cosは、doubleの角度の三角法の余弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#cos(double)を参照してください。

例

例12-31では問合せq61を示しています。例12-32ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-33に示すストリームを返します。

例12-31 cos関数の問合せ

<query id="q61"><![CDATA[
select cos(c2) from SFunc
]]></query>

例12-32 cos関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-33 cos関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.87758255
1000:       +           0.7648422
1200:       +           0.62941206
2000:       +           0.921061

cosh

構文

目的

coshは、doubleの値の双曲線余弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#cosh(double)を参照してください。

例

例12-34では問合せq78を示しています。例12-35ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-36に示すストリームを返します。

例12-34 cosh関数の問合せ

<query id="q78"><![CDATA[
select cosh(c2) from SFunc
]]></query>

例12-35 cosh関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-36 cosh関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           1.127626
1000:       +           1.255169
1200:       +           1.4228927
2000:       +           1.0810723

exp

構文

目的

expは、オイラー数eのdouble引数を指数とする累乗をdoubleとして返します。

0に近い値xの場合、EXP(x)よりもEXPM1(x) + 1の厳密な合計の方が、xを指数として累乗するオイラー数eの実際の結果にはるかに近くなります。

詳細は、以下を参照してください。

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html#exp(double)

- 「expm1」

例

例12-37では問合せq79を示しています。例12-38ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-39に示すストリームを返します。

例12-37 exp関数の問合せ

<query id="q79"><![CDATA[
select exp(c2) from SFunc
]]></query>

例12-38 exp関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-39 exp関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           1.6487212
1000:       +           2.0137527
1200:       +           2.4351296
2000:       +           1.4918247

expm1

構文

目的

expm1は、図12-1に示す計算をdoubleとして返します。xはdoubleの引数、eはオイラー数です。

図12-1 java.lang.Math Expm1

0に近い値xの場合、EXP(x)よりもEXPM1(x) + 1の厳密な合計の方が、xを指数として累乗するオイラー数eの実際の結果にはるかに近くなります。

詳細は、以下を参照してください。

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html#expm1(double)

- 「exp」

例

例12-40では問合せq80を示しています。例12-41ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-42に示すストリームを返します。

例12-40 expm1関数の問合せ

<query id="q80"><![CDATA[
select expm1(c2) from SFunc
]]></query>

例12-41 expm1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-42 expm1関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.6487213
1000:       +           1.0137527
1200:       +           1.4351296
2000:       +           0.49182472

floor1

構文

目的

floor1は、doubleの引数以下であり、数学的整数に等しいdoubleの最大(正の無限大に最も近い)値を返します。

丸めエラーの発生を回避するには、(long) cern.jet.math.Arithmetic.floor(double)の使用を検討してください。

詳細は、以下を参照してください。

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html#floor(double)

- 「floor」

例

例12-43では問合せq81を示しています。例12-44ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-45に示すストリームを返します。

例12-43 floor1関数の問合せ

<query id="q81"><![CDATA[
select floor1(c2) from SFunc
]]></query>

例12-44 floor1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-45 floor1関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

hypot

構文

目的

hypotは、doubleの引数の斜辺(図12-2を参照)をdoubleとして返します。

図12-2 java.lang.Math hypot

この関数は次の引数を使用します。

- double1: xの値。

- double2: yの値。

斜辺の計算は、中間のオーバーフローまたはアンダーフローなく行われます。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#hypot(double,%20double)を参照してください。

例

例12-46では問合せq82を示しています。例12-47ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-48に示すストリームを返します。

例12-46 hypot関数の問合せ

<query id="q82"><![CDATA[
select hypot(c2,c2) from SFunc
]]></query>

例12-47 hypot関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-48 hypot関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.70710677
1000:       +           0.98994946
1200:       +           1.2586501
2000:       +           0.56568545

IEEERemainder

構文

目的

IEEERemainderは、IEEE 754標準の規定に従って2つのdoubleの引数の剰余演算を行い、その結果をdoubleとして返します。

この関数は次の引数を使用します。

- double1: 被除数。

- double2: 除数。

剰余値は、数学的にf1 - f2 × nに等しくなります。nは、f1/f2の商の数学的厳密値に最も近い数学的整数です。2つの数学的整数がどちらもf1/f2に等しく近い場合、nは偶数の整数になります。剰余が0の場合、その符号は第1引数の符号と同じになります。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#IEEEremainder(double,%20double)を参照してください。

例

例12-49では問合せq72を示しています。例12-50ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-51に示すストリームを返します。

例12-49 IEEERemainder関数の問合せ

<query id="q72"><![CDATA[
select IEEERemainder(c2,c2) from SFunc
]]></query>

例12-50 IEEERemainder関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-51 IEEERemainder関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

log1

構文

目的

log1は、doubleの値の自然対数(底はe)をdoubleとして返します。

値xが小さい場合、log(1.0+x)の浮動小数点評価よりもlog1p(x)の結果の方が、ln(1 + x)の実際の結果にはるかに近くなります。

詳細は、以下を参照してください。

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html#log(double)

- 「log1p」

例

例12-52では問合せq83を示しています。例12-53ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-54に示すストリームを返します。

例12-52 log1関数の問合せ

<query id="q83"><![CDATA[
select log1(c2) from SFunc
]]></query>

例12-53 log1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-54 log1関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           -0.6931472
1000:       +           -0.35667497
1200:       +           -0.11653383
2000:       +           -0.9162907

log101

構文

目的

log101は、doubleの値の10を底とする対数をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#log10(double)を参照してください。

例

例12-55では問合せq84を示しています。例12-56ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-57に示すストリームを返します。

例12-55 log101関数の問合せ

<query id="q84"><![CDATA[
select log101(c2) from SFunc
]]></query>

例12-56 log101関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-57 log101関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           -0.30103
1000:       +           -0.15490197
1200:       +           -0.050610002
2000:       +           -0.39794

log1p

構文

目的

log1pは、doubleの引数と1の合計の自然対数をdoubleとして返します。

値xが小さい場合、log(1.0+x)の浮動小数点評価よりもlog1p(x)の結果の方が、ln(1 + x)の実際の結果にはるかに近くなります。

詳細は、以下を参照してください。

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html#log1p(double)

- 「log1」

例

例12-58では問合せq85を示しています。例12-59ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-60に示すストリームを返します。

例12-58 log1p関数の問合せ

<query id="q85"><![CDATA[
select log1p(c2) from SFunc
]]></query>

例12-59 log1p関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-60 log1p関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.4054651
1000:       +           0.53062826
1200:       +           0.63657683
2000:       +           0.33647224

pow

構文

目的

powは、2番目のdoubleの引数を指数として累乗する最初のdoubleの引数(底)の値をdoubleとして返します。

この関数は次の引数を使用します。

- double1: 底。

- double2: 累乗の指数。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#pow(double,%20double)を参照してください。

例

例12-61では問合せq65を示しています。例12-62ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-63に示すストリームを返します。

例12-61 pow関数の問合せ

<query id="q65"><![CDATA[
select pow(c2,c2) from SFunc
]]></query>

例12-62 pow関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-63 pow関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.70710677
1000:       +           0.7790559
1200:       +           0.9014821
2000:       +           0.69314486

rint

構文

目的

rintは、doubleの引数に最も近く、数学的整数に等しいdoubleの値を返します。数学的整数である2つのdoubleの値がどちらも等しく近い場合、結果は同等の整数値になります。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#rint(double)を参照してください。

例

例12-64では問合せq86を示しています。例12-65ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-66に示すストリームを返します。

例12-64 rint関数の問合せ

<query id="q86"><![CDATA[
select rint(c2) from SFunc
]]></query>

例12-65 rint関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-66 rint関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           1.0
1200:       +           1.0
2000:       +           0.0

round

構文

目的

roundは、floatの引数に最も近いintegerを返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#round(float)を参照してください。

例

例12-67では問合せq87を示しています。例12-68ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-69に示すストリームを返します。

例12-67 round関数の問合せ

<query id="q87"><![CDATA[
select round(c2) from SFunc
]]></query>

例12-68 round関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-69 round関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           1
1200:       +           1
2000:       +           0

round1

構文

目的

round1は、floatの引数に最も近いintegerを返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#round(float)を参照してください。

例

例12-70では問合せq88を示しています。例12-71ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-72に示すストリームを返します。

例12-70 round1関数の問合せ

<query id="q88"><![CDATA[
select round1(c2) from SFunc
]]></query>

例12-71 round1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-72 round1関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           1
1200:       +           1
2000:       +           0

signum

構文

目的

signumは、doubleの引数の符号関数をdoubleとして返します。

- 引数が0の場合は0です

- 引数が0より大きい場合は1.0です

- 引数が0より小さい場合は-1.0です

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#signum(double)を参照してください。

例

例12-73では問合せq70を示しています。例12-74ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-75に示すストリームを返します。

例12-73 signum関数の問合せ

<query id="q70"><![CDATA[
select signum(c2) from SFunc
]]></query>

例12-74 signum関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,-0.7,6
1200        3,-0.89,12
2000        8,0.4,4

例12-75 signum関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           -1.0
1200:       +           -1.0
2000:       +           1.0

signum1

構文

目的

signum1は、floatの引数の符号関数をfloatとして返します。

- 引数が0の場合は0です

- 引数が0より大きい場合は1.0です

- 引数が0より小さい場合は-1.0です

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#signum(float)を参照してください。

例

例12-76では問合せq71を示しています。例12-77ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-78に示すリレーションを返します。

例12-76 signum1関数の問合せ

<query id="q71"><![CDATA[
select signum1(c2) from SFunc
]]></query>

例12-77 signum1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,-0.7,6
1200        3,-0.89,12
2000        8,0.4,4

例12-78 signum1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           -1.0
1200:       +           -1.0
2000:       +           1.0

sin

構文

目的

sinは、doubleの角度の三角法の正弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#sin(double)を参照してください。

例

例12-79では問合せq60を示しています。例12-80ではスキーマ(c1 integer、c2 float、c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-81に示すストリームを返します。

例12-79 sin関数の問合せ

<query id="q60"><![CDATA[
select sin(c2) from SFunc
]]></query>

例12-80 sin関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-81 sin関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.47942555
1000:       +           0.64421767
1200:       +           0.7770717
2000:       +           0.38941833

sinh

構文

目的

sinhは、doubleの値の双曲線正弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#sinh(double)を参照してください。

例

例12-82では問合せq89を示しています。例12-83ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-84に示すストリームを返します。

例12-82 sinh関数の問合せ

<query id="q89"><![CDATA[
select sinh(c2) from SFunc
]]></query>

例12-83 sinh関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-84 sinh関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5210953
1000:       +           0.75858366
1200:       +           1.012237
2000:       +           0.41075233

sqrt

構文

目的

sqrtは、doubleの値の正しく丸められた正の平方根をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#sqrt(double)を参照してください。

例

例12-85では問合せq64を示しています。例12-86ではスキーマ(c1 integer、c2 float、c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-87に示すストリームを返します。

例12-85 sqrt関数の問合せ

<query id="q64"><![CDATA[
select sqrt(c2) from SFunc
]]></query>

例12-86 sqrt関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-87 sqrt関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.70710677
1000:       +           0.83666
1200:       +           0.9433981
2000:       +           0.6324555

tan

構文

目的

tanは、doubleの角度の三角法の正接をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#tan(double)を参照してください。

例

例12-88では問合せq62を示しています。例12-89ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-90に示すストリームを返します。

例12-88 tan関数の問合せ

<query id="q62"><![CDATA[
select tan(c2) from SFunc
]]></query>

例12-89 tan関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-90 tan関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.5463025
1000:       +           0.8422884
1200:       +           1.2345995
2000:       +           0.42279324

tanh

構文

目的

tanhは、doubleの値の双曲線正接をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#tanh(double)を参照してください。

例

例12-91では問合せq90を示しています。例12-92ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-93に示すストリームを返します。

例12-91 tanh関数の問合せ

<query id="q90"><![CDATA[
select tanh(c2) from SFunc
]]></query>

例12-92 tanh関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-93 tanh関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.46211717
1000:       +           0.6043678
1200:       +           0.7113937
2000:       +           0.37994897

todegrees

構文

目的

todegreesは、ラジアン単位で測定されるdoubleの角度を、度数で測定されるほぼ等しいdoubleの角度に変換します。

一般に、ラジアンから度数への変換は厳密ではありません。COS(TORADIANS(90.0))が0.0に等しいと見なさないようにしてください。

詳細は、以下を参照してください。

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html#toDegrees(double)

- 「toradians」

- 「cos」

例

例12-94では問合せq91を示しています。例12-95ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-96に示すストリームを返します。

例12-94 todegrees関数の問合せ

<query id="q91"><![CDATA[
select todegrees(c2) from SFunc
]]></query>

例12-95 todegrees関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-96 todegrees関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           28.64789
1000:       +           40.107044
1200:       +           50.993244
2000:       +           22.918312

toradians

構文

目的

toradiansは、度数で測定されるdoubleの角度を、ラジアン単位で測定されるほぼ等しいdoubleの角度に変換します。

詳細は、以下を参照してください。

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html#toRadians(double)

- 「todegrees」

- 「cos」

例

例12-97では問合せq92を示しています。例12-98ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-99に示すストリームを返します。

例12-97 toradians関数の問合せ

<query id="q92"><![CDATA[
select toradians(c2) from SFunc
]]></query>

例12-98 toradians関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-99 toradians関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           0.008726646
1000:       +           0.012217305
1200:       +           0.0155334305
2000:       +           0.006981317

ulp

構文

目的

ulpは、doubleの引数のULPの大きさをdoubleとして返します。この場合、引数値のULPは、この浮動小数点値と次に大きいdoubleの値との間の正の距離です。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#ulp(double)を参照してください。

例

例12-100では問合せq93を示しています。例12-101ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-102に示すストリームを返します。

例12-100 ulp関数の問合せ

<query id="q93"><![CDATA[
select ulp(c2) from SFunc
]]></query>

例12-101 ulp関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-102 ulp関数のストリーム出力

Timestamp   Tuple Kind  Tuple
10:       +           1.110223E-16
1000:       +           1.110223E-16
1200:       +           1.110223E-16
2000:       +           5.551115E-17

ulp1

構文

目的

ulp1は、floatの引数のULPの大きさをfloatとして返します。floatの値のULPは、この浮動小数点値と次に大きいfloatの値との間の正の距離です。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#ulp(float)を参照してください。

例

例12-103では問合せq94を示しています。例12-104ではスキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncを示しており、この問合せは例12-105に示すリレーションを返します。

例12-103 ulp1関数の問合せ

<query id="q94"><![CDATA[
select ulp1(c2) from SFunc
]]></query>

例12-104 ulp1関数のストリーム入力

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

例12-105 ulp1関数のリレーション出力

Timestamp   Tuple Kind  Tuple
10:       +           5.9604645E-8
1000:       +           5.9604645E-8
1200:       +           5.9604645E-8
2000:       +           2.9802322E-8

13 ユーザー定義関数

この章では、Oracle Continuous Query Language (Oracle CQL)で使用するユーザー定義関数を記述して、組込み関数を使用する場合よりも高度な操作やアプリケーション固有の操作をストリーム・データに対して実行する方法について説明します。

詳細は、1.1.11項「関数」を参照してください。

13.1 Oracle CQLのユーザー定義関数の概要

ユーザー定義関数をJavaで作成し、Oracle CQLやOracle CQL組み込み関数には用意されていない機能を提供できます。集計値または単一値(非集計)を返すユーザー定義関数を作成できます。

たとえば、次の場所でユーザー定義関数を使用できます。

- SELECT文のselectリスト

- WHERE句の条件

ユーザー定義関数をOracle CQL問合せで使用できるようにするには、ユーザー定義関数の実装クラスが含まれたJARファイルをOracle CEPサーバー・クラスパスに配置するか、JARファイルを含めるようにOracle CEPサーバー・クラスパスを変更する必要があります。

詳細は、以下を参照してください。

- 13.1.1項「ユーザー定義関数の種類」

- 13.1.2項「ユーザー定義関数のデータ型」

- 13.1.3項「ユーザー定義関数とOracle CEPサーバー・キャッシュ」

- 13.2項「ユーザー定義関数の実装」

- 1.1.11項「関数」

13.1.1 ユーザー定義関数の種類

oracle.cep.extensibility.functionsパッケージのクラスを使用すると、次の種類のユーザー定義関数を作成できます。

- 13.1.1.1項「ユーザー定義単一行関数」

- 13.1.1.2項「ユーザー定義集計関数」

オーバーロード関数の作成、および組込み関数のオーバーライドができます。

13.1.1.1 ユーザー定義単一行関数

単一行ユーザー定義関数は、問合せのストリームまたはビューの各行ごとに単一の結果行を返す関数(たとえば、concat組込み関数のような動作です)。

詳細は、「ユーザー定義の単一行関数の実装方法」を参照してください。

13.1.1.2 ユーザー定義集計関数

ユーザー定義集計は、com.bea.wlevs.processor.AggregationFunctionFactoryを実装し、単一のタプルのかわりにタプルのグループに基づいて単一の集計結果を返す関数(たとえば、sum組込み関数のような動作です)。

可能な場合は、増分処理を行うように集計関数を実装することを検討します。これにより、新しいイベントの到着時の(再)計算コストがこれまでのイベントの合計数ではなく新しいイベントの数に比例するようになるため、スケーラビリティとパフォーマンスが向上します。

詳細は、「ユーザー定義の集計関数の実装方法」を参照してください。

13.1.2 ユーザー定義関数のデータ型

表13-1に、ユーザー定義関数の実装および登録で指定できるデータ型を示します。

表13-1 ユーザー定義関数のデータ型

Oracle CQLデータ型

同等のJavaデータ型

bigint

java.lang.Long

char

java.lang.String

double

java.lang.Double

float

java.lang.Float

int

java.lang.Integer

Object

java.lang.Object

Oracle CQLデータ型の列は、ユーザー定義関数の登録に使用するOracle CQL文で指定できるデータ型を示します。同等のJavaデータ型の列は、ユーザー定義関数の実装で使用できる同等のJavaデータ型を示します。

実行時、Oracle CEPではOracle CQLデータ型とJavaデータ型の間のマッピングを行います。ユーザー定義関数でリストにないデータ型が返された場合は、Oracle CEPでClassCastExceptionがスローされます。

データ変換の詳細は、2.2.4項「データ型変換」を参照してください。

13.1.3 ユーザー定義関数とOracle CEPサーバー・キャッシュ

Oracle CQL文またはユーザー定義関数からOracle CEPキャッシュにアクセスできます。

詳細は、以下を参照してください。

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPキャッシュの構成に関する項

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CQL文からのキャッシュへのアクセスに関する項

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CQLユーザー定義関数からのキャッシュへのアクセスに関する項

13.2 ユーザー定義関数の実装

この項では、次の内容について説明します。

- 13.2.1項「ユーザー定義の単一行関数の実装方法」

- 13.2.2項「ユーザー定義の集計関数の実装方法」

詳細は、13.1項「Oracle CQLのユーザー定義関数の概要」を参照してください。

13.2.1 ユーザー定義の単一行関数の実装方法

ユーザー定義の単一行関数を実装するには、関数を実行するために呼び出すpublicコンストラクタとpublicメソッドを提供するJavaクラスを実装します。

ユーザー定義の単一行関数を実装するには:

1. 例13-1に示すように、Javaクラスを実装します。
13.1.2項「ユーザー定義関数のデータ型」に説明されているように、戻り値のデータ型がサポートされているデータ型に対応していることを確認します。

ユーザー定義関数からのOracle CEPキャッシュへのアクセスの詳細は、13.1.3項「ユーザー定義関数とOracle CEPサーバー・キャッシュ」を参照してください。

例13-1 MyMod.javaユーザー定義単一行関数

package com.bea.wlevs.example.function;

public class MyMod {
public Object execute(int arg0, int arg1) {
return new Integer(arg0 % arg1);
}
}

2. ユーザー定義関数のJava実装クラスをコンパイルし、例13-2に示すように、Oracle CEPアプリケーション・アセンブリ・ファイルでクラスを登録します。

例13-2 Oracle CQLプロセッサのための単一行ユーザー定義関数

<wlevs:processor id="testProcessor">
<wlevs:listener ref="providerCache"/>
<wlevs:listener ref="outputCache"/>
<wlevs:cache-source ref="testCache"/>
<wlevs:function function-name="mymod" exec-method=”execute” />
<bean class="com.bea.wlevs.example.function.MyMod"/>
</wlevs:function>
</wlevs:processor>

wlevs:function要素のexec-method属性を使用して、関数を実行するために呼び出すメソッドを指定します。このメソッドはpublicで、名前によって一意に識別できる必要があります(メソッドがオーバーライドされないように)。

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のwlevs:functionに関する項を参照してください。

3. 例13-3に示すように、SELECT文のselectリストまたはWHERE句の条件でユーザー定義関数を呼び出します。

例13-3 Oracle CQLでのユーザー定義単一行関数へのアクセス

...
<view id="v1" schema="c1 c2 c3 c4"><![CDATA[
select
mymod(c1, 100), c2, c3, c4
from
S1
]]></view>
...
<query id="q1"><![CDATA[
select * from v1 [partition by c1 rows 1] where c4 - c3 = 2.3
]]></query>
...

13.2.2 ユーザー定義の集計関数の実装方法

ユーザー定義の集計関数を実装するには、com.bea.wlevs.processor.AggregationFunctionFactoryインタフェースを実装するJavaクラスを実装します。

ユーザー定義の集計関数を実装するには:

1. 例13-4に示すように、Javaクラスを実装します。
可能な場合は、増分処理を行うように集計関数を実装することを検討します。これにより、新しいイベントの到着時の(再)計算コストがこれまでのイベントの合計数ではなく新しいイベントの数に比例するようになるため、スケーラビリティとパフォーマンスが向上します。例13-4のユーザー定義集計関数では増分処理がサポートされています。

13.1.2項「ユーザー定義関数のデータ型」に説明されているように、戻り値のデータ型がサポートされているデータ型に対応していることを確認します。

ユーザー定義関数からのOracle CEPキャッシュへのアクセスの詳細は、13.1.3項「ユーザー定義関数とOracle CEPサーバー・キャッシュ」を参照してください。

例13-4 Variance.javaユーザー定義集計関数

package com.bea.wlevs.test.functions;

import com.bea.wlevs.processor.AggregationFunction;
import com.bea.wlevs.processor.AggregationFunctionFactory;

public class Variance implements AggregationFunctionFactory, AggregationFunction {

private int count;
private float sum;
private float sumSquare;

public Class<?>[] getArgumentTypes() {
return new Class<?>[] {Integer.class};
}

public Class<?> getReturnType() {
return Float.class;
}

public AggregationFunction newAggregationFunction() {
return new Variance();
}

public void releaseAggregationFunction(AggregationFunction function) {
}

public Object handleMinus(Object[] params) {
if (params != null && params.length == 1) {
Integer param = (Integer) params[0];
count--;
sum -= param;
sumSquare -= (param * param);
}

if (count == 0) {
return null;
} else {
return getVariance();
}
}

public Object handlePlus(Object[] params) {
if (params != null && params.length == 1) {
Integer param = (Integer) params[0];
count++;
sum += param;
sumSquare += (param * param);
}

if (count == 0) {
return null;
} else {
return getVariance();
}
}

public Float getVariance() {
float avg = sum / (float) count;
float avgSqr = avg * avg;
float var = sumSquare / (float)count - avgSqr;
return var;
}

public void initialize() {
count = 0;
sum = 0.0F;
sumSquare = 0.0F;
}

}

2. ユーザー定義関数のJava実装クラスをコンパイルし、例13-5に示すように、Oracle CEPアプリケーション・アセンブリ・ファイルでクラスを登録します。

例13-5 Oracle CQLプロセッサのための集計ユーザー定義関数

<wlevs:processor id="testProcessor">
<wlevs:listener ref="providerCache"/>
<wlevs:listener ref="outputCache"/>
<wlevs:cache-source ref="testCache"/>
<wlevs:function function-name="var">
<bean class="com.bea.wlevs.test.functions.Variance"/>
</wlevs:function>
</wlevs:processor>

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のwlevs:functionに関する項を参照してください。

3. 例13-6に示すように、SELECT文のselectリストまたはWHERE句の条件でユーザー定義関数を呼び出します。

例13-6 Oracle CQLでのユーザー定義集計関数へのアクセス

...
<query id="uda6"><![CDATA[
select var(c2) from S4[range 3]
]]></query>
...

実行時、ユーザー定義の集計が実行され、該当するウィンドウで新しいイベントがアクティブになった場合は集計を再計算する必要があります(集計が定義されているセットに新しいメンバーが追加されたため)。これを行うため、Oracle CEPでは適切なhandlePlus*メソッドを呼び出して、(アクティブなセット全体のかわりに)新しいイベントのみを適切なハンドラ・コンテキストに渡します(例13-4を参照)。新しいイベントを含めるようにこの状態を更新できるようになります。このようにして、増分的な方法で集計が再計算されます。

同様に、該当するウィンドウのイベントが期限切れになった場合は集計を再計算する必要があります(集計が定義されているセットからメンバーが失われたため)。これを行うため、Oracle CEPでは適切なhandleMinusメソッドを呼び出して、(アクティブなセット全体のかわりに)期限切れのイベントのみを適切なハンドラ・コンテキストに渡します(例13-4を参照)。ここでも、増分的な方法でイベントの期限切れに対応するように、ハンドラ・コンテキストの状態を増分的に更新できます。

第III部

データ・カートリッジ

この部は、次の章で構成されています。

- 第14章「データ・カートリッジの概要」

- 第15章「Oracle Javaデータ・カートリッジ」

- 第16章「Oracle Spatial」

- 第17章「Oracle CEP JDBCデータ・カートリッジ」

14 データ・カートリッジの概要

この章では、Oracle Complex Event Processing (Oracle CEP)のデータ・カートリッジの概要について説明します。データ・カートリッジは、ドメイン固有の抽象データ型(単純型、複合型、配列型)およびドメイン固有の関数をサポートするようにOracle Continuous Query Language (Oracle CQL)を拡張します。

この章の内容は、次のとおりです。

- 14.1項「データ・カートリッジについて」

- 14.2項「Oracle CQLデータ・カートリッジの型」

14.1 データ・カートリッジについて

Oracle CQLデータ・カートリッジ・フレームワークにより、任意のドメイン・データ型および関数とOracle CQL言語が密接に統合され、これらの拡張をOracle CQL問合せ内でOracle CQLネイティブ型および組込み関数と同じように使用できるようになります。

このフレームワークでは単純型と複合型の両方のデータ型をサポートしており、後者によりオブジェクト指向プログラミングの使用が可能になります。

Oracle CQLデータ・カートリッジを使用することで、ネイティブのOracle CQL組込み型の拡張およびこれとの相互運用が可能なドメイン固有型によって、Oracle CQLエンジンを拡張できます。

14.1.1 データ・カートリッジ名

各データ・カートリッジは、データ・カートリッジ実装のネームスペースを定義する一意のカートリッジ名で識別されます。必要に応じて、このデータ・カートリッジ名を使用して、型、メソッド、フィールドおよびコンストラクタへの参照の曖昧性を解消します(link::=を参照)。

14.1.2 データ・カートリッジのアプリケーション・コンテキスト

データ・カートリッジ実装に応じて、Oracle CEPサーバーからデータ・カートリッジのインスタンスが提供する関数や型に伝播されるアプリケーション・コンテキストを定義できます。

たとえば、Oracle CEPサーバー・リソースやデフォルトのデータ・カートリッジ・オプションを構成し、このアプリケーション・コンテキスト情報を特定のデータ・カートリッジ・インスタンスに関連付けることができます。

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のデータ・カートリッジのアプリケーション・コンテキストの理解に関する項を参照してください。

14.2 Oracle CQLデータ・カートリッジの型

Oracle CQLを使用してデータ・カートリッジの型、メソッド、フィールドおよびコンストラクタにアクセスする方法は、すべてのデータ・カートリッジ実装で同じです。

データ・カートリッジ関数は、オプションでリンク名を使用できるfunc_exprを使用して参照できます。

複合型のメンバーを参照するために、Oracle CQLにはobject_exprが用意されています。

詳細は、以下を参照してください。

- func_expr::=

- object_expr::=

アクセス対象は、各データ・カートリッジで一意です。詳細は、以下を参照してください。

- 第15章「Oracle Javaデータ・カートリッジ」

- 第16章「Oracle Spatial」

- 第17章「Oracle CEP JDBCデータ・カートリッジ」

注意:

Oracleデータ・カートリッジの型名を簡易化するために、2.7.2項「Aliases要素を使用した別名の定義」に示すように別名を使用できます。

15 Oracle Javaデータ・カートリッジ

この章では、Oracle Continuous Query Language (Oracle CQL)の拡張であるOracle Javaデータ・カートリッジの使用方法について説明します。このデータ・カートリッジによって、Oracle CEPアプリケーションのJavaクラスとシームレスに対話するCQLコードを記述できます。

この章では、Oracle Javaデータ・カートリッジが公開する型、メソッド、フィールドおよびコンストラクタについて説明します。これらの型、メソッド、フィールドおよびコンストラクタを、Oracle CQLのネイティブ型と同様に、Oracle CQLの問合せおよびビューで使用できます。

この章の内容は、次のとおりです。

- 15.1項「Oracle Javaデータ・カートリッジについて」

- 15.2項「Oracle Javaデータ・カートリッジの使用」

詳細は、以下を参照してください。

- 14.1項「データ・カートリッジについて」

- 14.2項「Oracle CQLデータ・カートリッジの型」

15.1 Oracle Javaデータ・カートリッジについて

Oracle Javaデータ・カートリッジは、Oracle CEPアプリケーションでJavaクラスとシームレスに対話するOracle CQLの問合せおよびビューを記述するための、組込みのJavaカートリッジです。

この項の内容は、次のとおりです。

- 15.1.1項「データ・カートリッジ名」

- 15.1.2項「クラスのロード」

- 15.1.3項「メソッドの解決」

- 15.1.4項「データ型マッピング」

- 15.1.5項「Oracle Javaデータ・カートリッジのOracle CQL問合せサポート」

15.1.1 データ・カートリッジ名

Oracle Javaデータ・カートリッジでは、カートリッジID com.oracle.cep.cartrdiges.javaを使用します。

Oracle Javaデータ・カートリッジは、Oracle CEPのデフォルトのデータ・カートリッジです。

デフォルトのJavaパッケージ名の下の型、またはjava.langシステム・パッケージの下の型について、Oracle CQL問合せでパッケージ名またはデータ・カートリッジ名で修飾されていないJava型を参照できます。

<query id="q1"><![CDATA[
select String(“foo”) …
]]></query>

注意:

Oracle Javaデータ・カートリッジの型名を簡易化するために、2.7.2項「Aliases要素を使用した別名の定義」に示すように別名を使用できます。

詳細は、以下を参照してください。

- 15.1.2項「クラスのロード」

- 「View」

- 第13章「ユーザー定義関数」

15.1.2 クラスのロード

Oracle Javaデータ・カートリッジでは、Oracle CQL問合せが参照するJavaクラスのロードについて、次のポリシーをサポートしています。

- 15.1.2.1項「アプリケーション・クラス・スペース・ポリシー」

- 15.1.2.2項「自動インポートなしクラス・スペース・ポリシー」

- 15.1.2.3項「サーバー・クラス・スペース・ポリシー」

詳細は、以下を参照してください。

- 15.1.2.4項「クラスのロード例」

- 15.1.3項「メソッドの解決」

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のパッケージのエクスポート方法に関する項

15.1.2.1 アプリケーション・クラス・スペース・ポリシー

これは、デフォルトのクラス・ローディング・ポリシーです。

このモードでは、Oracle Javaデータ・カートリッジはJavaクラスの検索時に、有効範囲内のアプリケーションのクラス・スペースを使用します。

これは、型がローカル名によってのみ指定されている場合、すなわち識別子が1つで、他の識別子がパッケージで使用されていない場合にのみ適用できます。次のような場合です。

select String(“foo”) …

次の場合には適用できません。

select java.lang.String(“foo”) …

この場合、手順は次のようになります。

- 通常どおりに、アプリケーションのクラス・スペースを使用して、1つの識別子(ID1と呼びます)で定義されたクラスをロードします。これに失敗した場合、

- アプリケーションで、パッケージとは関係なく、バンドルの内部クラス・パス内で名前がID1と一致するクラスが定義されているかどうかを確認します。これに失敗した場合、

- アプリケーションでImport-Package MANIFESTヘッダー文が指定されているかどうかを確認します。これとID1を使用して、Javaクラスをロードできます。

例については、15.1.2.4項「クラスのロード例」を参照してください。

15.1.2.2 自動インポートなしクラス・スペース・ポリシー

これは、オプションのクラス・ローディング・ポリシーです。このポリシーを使用するには、Oracle CEPアプリケーションに次のMANIFESTヘッダー・エントリを含める必要があります。

OCEP_JAVA_CARTRIDGE_CLASS_SPACE: APPLICATION_NO_AUTO_IMPORT_CLASS_SPACE

このモードは、パッケージが指定されていない場合に、Oracle CEPがパッケージの自動インポートを試行しない点を除いて、アプリケーション・クラス・スペース・ポリシーとほぼ同じです。

詳細は、15.1.2.1項「アプリケーション・クラス・スペース・ポリシー」を参照してください。

15.1.2.3 サーバー・クラス・スペース・ポリシー

これは、オプションのクラス・ローディング・ポリシーです。このポリシーを使用するには、Oracle CEPアプリケーションに次のMANIFESTヘッダー・エントリを含める必要があります。

OCEP_JAVA_CARTRIDGE_CLASS_SPACE: SERVER_CLASS_SPACE

このモードでも、Oracle CEPはアプリケーションのクラス・スペースを使用しますが、パッケージが指定されていない場合はパッケージの自動インポートを試行しません。

Oracle CQL問合せでは、エクスポートしているアプリケーションやモジュールに関係なく、エクスポートされたすべてのJavaクラスを参照できます。

また、問合せでは、ランタイムJDKクラスを含む、OSGiフレームワークの親クラス・ローダーに表示されるすべてのクラスにアクセスできます。

すなわち、Oracle CQLアプリケーションには、他のOracle CEPアプリケーションで定義されたクラスを参照するOracle CQL問合せを含めることができます(エクスポートされているかぎり)。これにより、新しいJavaライブラリを提供することが唯一の目的であるJavaベース・カートリッジの作成が容易になります。

注意:

Oracle CEPアプリケーション内のプロセッサがOracle CQL問合せを定義する場合であっても、Oracle CEPアプリケーションの内部クラス・パスの一部であるJavaクラスを参照できるのは、これがエクスポートされている場合のみです。

例については、15.1.2.4項「クラスのロード例」を参照してください。

15.1.2.4 クラスのロード例

図15-1に示す例があるとします。アプリケーションB1は、アプリケーションB2がエクスポートするパッケージmypackage3をインポートします。

図15-1 Oracle CEPアプリケーションの例

「図15-1 Oracle CEPアプリケーションの例」の説明

表15-1に、アプリケーション・クラス・スペースまたはサーバー・クラス・スペースのどちらで実行されているかによって、これら2つの異なるアプリケーションがアクセスできるクラスを示します。

表15-1 クラス・ローディング・ポリシー別のクラスのアクセシビリティ

クラス・ローディング・ポリシー

アプリケーションB1

アプリケーションB2

アプリケーション・クラス・スペース

- package1.A

- privatepackage1.B

- package2.C

- package2.C

- privatepackage2.D

サーバー・クラス・スペース

- package2.C

- package2.C

アプリケーションB1では、Oracle CQL問合せでJavaクラスA、BおよびCのいずれも使用できます。

select A …
select B …
select C …

しかし、アプリケーションB2では、Oracle CQL問合せでJavaクラスAおよびBは使用できません。JavaクラスCおよびDのみ使用できます。

select C …
select D …

15.1.3 メソッドの解決

JavaメソッドにアクセスするOracle CQL式は、次のアルゴリズムを使用してメソッドを解決します。

1. すべてのパラメータは、15.1.4項「データ型マッピング」に説明されているように、Java型に変換されます。
たとえば、Oracle CQL INTEGERはJavaプリミティブintに変換されます。

2. 標準のJavaメソッド解決ルールが、Java言語仕様の第3版、15.12項「Method Invocation Expressions」に説明されているとおりに適用されます。

注意:

可変arityメソッドはサポートされていません。詳細は、Java言語仕様の第3版、12.12.2.4項を参照してください。

例として、次のOracle CQL式を考えてみます。

attribute.methodA(10)

attributeは、オーバーロードされた次のメソッドを定義する型mypackage.MyTypeです。

- methodA(int)

- methodA(Integer)

- methodA(Object)

- methodA(long)

リテラル10はプリミティブ型intであるため、優先順位は次のとおりです。

- methodA(int)

- methodA(long)

- methodA(Integer)

- methodA(Object)

詳細は、15.1.2項「クラスのロード」を参照してください。

15.1.4 データ型マッピング

Oracle Javaデータ・カートリッジは、Oracle CQLネイティブのデータ型とJavaデータ型の間に、固定の非対称なマッピングを適用します。

- 表15-2に、Oracle CQLネイティブのデータ型とJavaデータ型の間のマッピングを示します。

- 表15-3に、Javaデータ型とOracle CQLネイティブのデータ型の間のマッピングを示します。

表15-2 Oracle Javaデータ・カートリッジ: Oracle CQLからJavaデータ型へのマッピング

Oracle CQLネイティブのデータ型

Javaデータ型

BIGINT

long脚注1

BOOLEAN

boolean脚注 1

BYTE

byte[]脚注 1

CHAR

java.lang.String

DOUBLE

double脚注 1

FLOAT

float脚注 1

INTEGER

int脚注 1

INTERVAL

long脚注 1

XMLTYPE

java.lang.String

脚注 1 プリミティブなJavaデータ型

表15-3 Oracle Javaデータ・カートリッジ: Javaデータ型からOracle CQLへのマッピング

Javaデータ型

Oracle CQLネイティブのデータ型

long脚注 1

BIGINT

boolean脚注 1

BOOLEAN

byte[]脚注 1

BYTE

java.lang.String

CHAR

double脚注 1

DOUBLE

float脚注 1

FLOAT

int脚注 1

INTEGER

java.sql.Date

java.sql.Timestamp

INTERVAL

java.sql.SQLXML

XMLTYPE

脚注 1 プリミティブなJavaデータ型

他のすべてのJavaクラスは、複合型としてマップされます。

これらのデータ型マッピングの詳細は、次の項を参照してください。

- 15.1.4.1項「Javaデータ型文字列とOracle CQLデータ型CHAR」

- 15.1.4.2項「リテラル」

- 15.1.4.3項「配列」

- 15.1.4.4項「コレクション」

Oracle CQLネイティブのデータ型とその暗黙的および明示的なデータ型変換の詳細は、2.1項「データ型」を参照してください。

15.1.4.1 Javaデータ型文字列とOracle CQLデータ型CHAR

Oracle CQLデータ型CHARはjava.lang.Stringにマップされ、java.lang.StringはOracle CQLデータ型CHARにマップされます。すなわち、Oracle CQL CHARとして定義された属性のjava.lang.Stringメンバー・フィールドおよびメソッドにアクセスできます。たとえば、a1がOracle CQL CHAR型として宣言されている場合、次のような問合せを記述できます。

<query id="q1"><![CDATA[
select a1.substring(1,2)
]]></query>

15.1.4.2 リテラル

Oracle CQL CHARリテラルであっても、リテラルのメンバー・フィールドおよびメソッドにはアクセスできません。たとえば、次のような問合せは使用できません。

<query id="q1-forbidden"><![CDATA[
select "hello".substring(1,2)
]]></query>

15.1.4.3 配列

Javaの配列はOracle CQLデータ・カートリッジの配列に変換され、Oracle CQLデータ・カートリッジの配列はJavaの配列に変換されます。これは、複合型と単純型の両方に適用されます。

データ・カートリッジのTABLE句を使用して、Oracle CQL問合せのFROM句内のデータ・カートリッジ関数から返された複数の行にアクセスできます。

詳細は、以下を参照してください。

- 「array_type」

- 18.2.7項「関数TABLEの問合せ」

- 15.1.4.4項「コレクション」

15.1.4.4 コレクション

通常、Oracle Javaデータ・カートリッジはjava.util.Collectionインタフェースを実装するインスタンスをOracle CQL複合型に変換します。

Oracle CQL問合せは、java.util.Collectionのメンバーを介して繰り返すことができます。

データ・カートリッジのTABLE句を使用して、Oracle CQL問合せのFROM句内のデータ・カートリッジ関数から返された複数の行にアクセスできます。

詳細は、以下を参照してください。

- 「complex_type」

- 18.2.7項「関数TABLEの問合せ」

- 15.1.4.3項「配列」

15.1.5 Oracle Javaデータ・カートリッジのOracle CQL問合せサポート

Oracle Javaデータ・カートリッジ型は、SELECTおよびWHERE句内の式で使用できます。

Oracle Javaデータ・カートリッジ型は、ORDER BY句内の式では使用できません。

詳細は、以下を参照してください。

- 15.2項「Oracle Javaデータ・カートリッジの使用」

- 20.1項「Oracle CQL文の概要」

15.2 Oracle Javaデータ・カートリッジの使用

この項では、Oracle CEPアプリケーションでOracle Javaデータ・カートリッジをどのように使用できるかを中心に、一般的な使用例を説明します。内容は次のとおりです。

- 15.2.1項「Java APIを使用する問合せ方法」

- 15.2.2項「エクスポートしたJavaクラスを使用する問合せ方法」

詳細は、以下を参照してください。

- 15.1.5項「Oracle Javaデータ・カートリッジのOracle CQL問合せサポート」

- 20.1項「Oracle CQL文の概要」

15.2.1 Java APIを使用する問合せ方法

この手順では、Javaクラス(Address.java)として定義されたイベント・プロパティ・タイプを持つ、タプル(Student)として定義された1つのイベント・タイプを使用するOracle CEPアプリケーションで、Oracle Javaデータ・カートリッジを使用する方法について説明します。

Javaクラスを使用して問合せするには:

1. Address.javaクラスを、例15-1に示すように実装します。

例15-1 Address.javaクラス

package test;

class Address {
String street;
String state;
String city;
String [] phones;
}

この例では、Address.javaクラスがこのアプリケーションに属すると仮定します。

Address.javaクラスが他のOracle CEPアプリケーションに属する場合、親アプリケーションでエクスポートする必要があります。詳細は、15.2.2項「エクスポートしたJavaクラスを使用する問合せ方法」を参照してください。

2. イベント・タイプ・リポジトリを、例15-2に示すように定義します。

例15-2 イベント・タイプ・リポジトリ

<event-type-repository>
<event-type name="Student">
<properties>
<property name="name" type="char"/>
<property name="address" type="Address"/>
</properties>
</event-type>

<event-type name="Address">
<class-name>test.Address</class-name>
</event-type>
<event-type-repository>

test.Addressクラスは、このアプリケーションに属しているため、イベント・タイプ・リポジトリで宣言できます。これにより、自動的にこのアプリケーション内でクラスに対してグローバルにアクセスできるようになります。パッケージをエクスポートする必要はありません。

3. 例15-3に示すように、アダプタがStudentイベントをチャネルStudentStreamに提供していると仮定します。

例15-3 チャネル

<channel id="StudentStream" event-type="Student"/>

4. 例15-4に示すように、StudentStreamがOracle CQL問合せq1でプロセッサに結び付けられると仮定します。

例15-4 Oracle CQL問合せ

<processor>
<rules>
<query id="q1"><![CDATA[
select
name,
address.street as street,
address.phones[0] as primary_phone
from
StudentStream
]]></query>
</rules>
</processor>

Oracle Javaデータ・カートリッジでは、標準のJava APIを使用してOracle CQL問合せからaddressイベント・プロパティにアクセスできます。

15.2.2 エクスポートしたJavaクラスを使用する問合せ方法

この手順では、Javaクラス(Address.java)として定義されたイベント・プロパティ・タイプを持つ、タプル(Student)として定義された1つのイベント・タイプを使用するOracle CEPアプリケーションで、Oracle Javaデータ・カートリッジを使用する方法について説明します。この手順では、Address.javaクラスは別のOracle CEPアプリケーションに属します。同じOracle CEPサーバーにデプロイされた他のOracle CEPアプリケーションからアクセスできるように、親アプリケーションでエクスポートされます。

Javaクラスを使用して問合せするには:

1. Address.javaクラスを、例15-1に示すように実装します。

例15-5 Address.javaクラス

package test;

class Address {
String street;
String state;
String city;
String [] phones;
}

2. Address.javaクラスを含むtestパッケージをエクスポートします。
詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のパッケージのエクスポート方法に関する項を参照してください。

testパッケージはこのOracle CEPアプリケーションの一部であるか、このアプリケーションと同じOracle CEPサーバーにデプロイされた他のOracle CEPアプリケーションの一部です。

3. イベント・タイプ・リポジトリを、例15-2に示すように定義します。

例15-6 イベント・タイプ・リポジトリ

<event-type-repository>
<event-type name="Student">
<property name="name" type="char"/>
<property name="address" type="Address"/>
</event-type>
<event-type-repository>

4. 例15-3に示すように、アダプタがStudentイベントをチャネルStudentStreamに提供していると仮定します。

例15-7 チャネル

<channel id="StudentStream" event-type="Student"/>

5. 例15-4に示すように、StudentStreamがOracle CQL問合せq1でプロセッサに結び付けられると仮定します。

例15-8 Oracle CQL問合せ

<processor>
<rules>
<query id="q1"><![CDATA[
select
name,
address.street as street,
address.phones[0] as primary_phone
from
StudentStream
]]></query>
</rules>
</processor>

Oracle Javaデータ・カートリッジでは、標準のJava APIを使用してOracle CQL問合せからaddressイベント・プロパティにアクセスできます。

16 Oracle Spatial

この章では、Oracle Continuous Query Language (Oracle CQL)を拡張して位置情報対応型のアプリケーションに高度な空間機能を提供するOracle Spatialカートリッジを使用する場合のリファレンスとガイドを提供します。

Oracle Spatialの型、メソッド、フィールドおよびコンストラクタを、Oracle CQLのネイティブ型と同様に、Oracle CEPアプリケーションの作成時にOracle CQLの問合せおよびビューで使用できます。

この章の内容は、次のとおりです。

- 16.1項「Oracle Spatialについて」

- 16.2項「Oracle Spatialの使用」

詳細は、以下を参照してください。

- 14.1項「データ・カートリッジについて」

- 14.2項「Oracle CQLデータ・カートリッジの型」

16.1 Oracle Spatialについて

Oracle Spatialは、高度な空間機能を提供するOracle Databaseのオプションで、ハイエンドな地理情報システム(GIS)および位置情報対応型のビジネス・インテリジェンス・ソリューション(LBS)をサポートします。

Oracle Spatialは、Oracle CEPアプリケーションでOracle Spatialクラスとシームレスに対話するOracle CQLの問合せおよびビューを記述するための、オプションのデータ・カートリッジです。

Oracle Spatialを使用すると、空間データの索引作成が可能になり、空間データの格納、空間データでの近接および重複比較の実行、空間データとOracle CQLサーバーの統合など、重要な地理ドメイン操作を実行するOracle CQL問合せを構成できます。

Oracle Spatialを使用するには、Oracle Spatial APIに関する実用的な知識が必要です。Oracle Spatialの詳細は、次の資料を参照してください。

- 製品概要: http://www.oracle.com/technology/products/spatial/index.html

- Oracle Spatialのドキュメント: http://www.oracle.com/pls/db112/portal.portal_db?selected=7&frame=#oracle_spatial_and_location_information

- Oracle Spatial Java APIリファレンス: http://download.oracle.com/docs/cd/E11882_01/appdev.112/e11829/toc.htm

この項の内容は、次のとおりです。

- 16.1.1項「データ・カートリッジ名」

- 16.1.2項「有効範囲」

- 16.1.3項「データ型マッピング」

- 16.1.4項「Oracle Spatialアプリケーション・コンテキスト」

16.1.1 データ・カートリッジ名

Oracle Spatialでは、カートリッジID com.oracle.cep.cartrdiges.spatialを使用してサーバー・スコープ予約済リンク名spatialを登録します。

spatialリンク名を使用して、Oracle Spatialのメソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付けます。

詳細は、以下を参照してください。

- 16.1.4項「Oracle Spatialアプリケーション・コンテキスト」

- 16.1.2.7項「ジオメトリAPI」

16.1.2 有効範囲

Oracle SpatialはOracle Spatial Java APIに基づいています。Oracle SpatialはOracle Spatial機能をcom.oracle.cep.cartridge.spatial.Geometryクラスに公開します。Oracle Spatial Java APIにないOracle Spatial機能に、Oracle Spatialからアクセスすることはできません。

Oracle CQL問合せでは、Oracle Spatialを使用して、表16-1に示すOracle Spatial機能にアクセスできます。

表16-1 Oracle Spatialの有効範囲

Oracle Spatialの機能

有効範囲

ジオメトリ・タイプ

Oracle Spatial Java APIの次のジオメトリ・タイプ:

- 2Dの点

- 2Dの単純ポリゴン

- 2Dの矩形

次のジオメトリ操作:

- ジオメトリ・タイプの作成

- ジオメトリ・タイプのpublicメンバー関数およびpublicフィールドへのアクセス

詳細は、以下を参照してください。

- 16.1.2.1項「ジオメトリ・タイプ」

- 16.1.2.2項「要素情報配列」

座標系

- デカルトおよびWGS84測地座標(デフォルト)

- SRIDによるデフォルト座標系の指定

- 他の測地座標の使用

詳細は、16.1.2.3項「縦座標および座標系とSDO_SRID」を参照してください。

ジオメトリ索引

- Rツリー

詳細は、16.1.2.4項「ジオメトリ索引」を参照してください。

ジオメトリ関係演算子

- ANYINTERACT

- CONTAIN

- INSIDE

- WITHINDISTANCE

詳細は、16.1.2.5項「ジオメトリ関係演算子」を参照してください。

ジオメトリ・フィルタ演算子

- FILTER

- NN

詳細は、16.1.2.6項「ジオメトリ・フィルタ演算子」を参照してください。

ジオメトリAPI

com.oracle.cep.cartridge.spatial.Geometryで提供されているメソッドの完全なリストは、16.1.2.7項「ジオメトリAPI」を参照してください。

Oracle Spatialを使用してこれらのOracle Spatial機能にアクセスする方法の詳細は、16.2項「Oracle Spatialの使用」を参照してください。

16.1.2.1 ジオメトリ・タイプ

Oracle Spatialのデータ・モデルはジオメトリで構成されます。ジオメトリは、順序の付いた一連の頂点です。ジオメトリのセマンティクスは、そのタイプによって決まります。

Oracle Spatialを使用すると、Oracle CQLの問合せとビューで次のOracle Spatialタイプに直接アクセスできます。

- SDO_GTYPES: Oracle Spatialは次のジオメトリ・タイプをサポートしています。

- 2Dの点

- 2Dの単純ポリゴン

- 2Dの矩形

表16-2は、使用可能なcom.oracle.cep.cartridge.spatial.Geometryクラスのジオメトリ・タイプを示しています。

表16-2 Oracle Spatialジオメトリ・タイプ

ジオメトリ・タイプ

説明

GTYPE_POINT

1つの点を含む点ジオメトリ・タイプ。

GTYPE_POLYGON

1つのポリゴンを含むポリゴン・ジオメトリ・タイプ。

- SDO_ELEMENT_INFO: 次の項目を使用して、要素情報配列を作成できます。

- com.oracle.cep.cartridge.spatial.Geometry.createElemInfo静的メソッド

- einfogenerator関数

詳細は、16.1.2.2項「要素情報配列」を参照してください。

- ORDINATES: Oracle Spatialのordsgenerator関数を使用して、縦座標を作成できます。
詳細は、16.1.2.3項「縦座標および座標系とSDO_SRID」を参照してください。

詳細は、以下を参照してください。

- 16.2.1項「Oracle Spatial Java APIでサポートされているジオメトリ・タイプへのアクセス方法」

- 16.2.2項「ジオメトリの作成方法」

- 16.2.3項「ジオメトリ・タイプのpublicメソッドおよびフィールドへのアクセス方法」

16.1.2.2 要素情報配列

Element Info属性は、可変長の数値配列を使用して定義されます。この属性は、Ordinates属性に格納されている縦座標を解釈する方法を指定します。

Oracle Spatialには、Element Info属性値を生成するために、次のヘルパー関数が用意されています。

com.oracle.cep.cartridge.spatial.Geometry.createElemInfo(int SDO_STARTING_OFFSET, int SDO_ETYPE , int SDO_INTERPRETATION)

einfogenerator関数を使用することもできます。

詳細は、以下を参照してください。

- 「createElemInfo」

- 「einfogenerator」

- 『Oracle Spatial開発者ガイド』のSDO_ELEM_INFOに関する項

16.1.2.3 縦座標および座標系とSDO_SRID

表16-3は、Oracle Spatialでデフォルトでサポートされる座標系、および各座標系を識別するSDO_SRID値を示しています。

表16-3 Oracle Spatialの座標系

座標系

SDO_SRID

説明

デカルト

0

デカルト座標は、指定した基点からの点の位置を、空間の直交する軸を関連付けて測定する座標です。

測地(WGS84)

8307

測地座標(地理座標)は、角度を持つ座標(経度および緯度)で、球体の極点の座標と密接に関連しており、地球上の特定の測地データに関連付けて定義されます。

これは、Oracle Spatialのデフォルトの座標系です。

SDO_SRIDの値は、呼び出すOracle Spatialのメソッドおよびコンストラクタのそれぞれに引数として指定できます。または、SDO_SRIDをOracle Spatialのアプリケーション・コンテキストに一度だけ構成し、毎回引数としてSDO_SRIDを設定することなくcom.oracle.cep.cartridge.spatial.Geometryメソッドを使用できます。アプリケーション・コンテキストを使用する場合、Oracle Spatialでサポートされる任意の座標系も指定できます。

注意:

SDO_SRID値を使用しないcom.oracle.cep.cartridge.spatial.Geometryメソッドを使用する場合、Oracle Spatialのアプリケーション・コンテキストを使用する必要があります。たとえば、次のメソッド呼出しを行うとランタイム例外が発生します。

com.oracle.cep.cartridge.spatial.Geometry.createPoint(lng, lat)

かわりに、spatialリンク名を使用して、メソッド呼出しをOracle Spatialのアプリケーション・コンテキストと関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)

SDO_SRID値を使用するGeometryメソッドを使用する場合、spatialリンク名の使用はオプションです。たとえば、次のメソッド呼出しは両方とも有効です。

com.oracle.cep.cartridge.spatial.Geometry.createPoint(8307, lng, lat)
com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)

詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。

縦座標は、ダブル配列を使用してジオメトリの座標の配列を定義します。Oracle Spatialには、座標の配列を生成するためにordsgeneratorヘルパー関数が用意されています。構文については、「ordsgenerator」を参照してください。

詳細は、以下を参照してください。

- 『Oracle Spatial開発者ガイド』のSDO_SRIDに関する項

- 『Oracle Spatial開発者ガイド』の座標系(空間参照システム)に関する項

- 16.2.6項「デフォルトの測地座標の使用方法」

- 16.2.7項「他の測地座標の使用方法」

16.1.2.4 ジオメトリ索引

Oracle Spatialでは空間索引を使用して、1次フィルタを実装します。空間索引の目的は、データのサブセットを迅速に作成し、2次フィルタでの処理の負荷を軽減することです。

空間索引は他の索引と同様、検索対象を限定するメカニズムを提供しますが、この場合は、メカニズムは交差や包含のような空間基準に基づきます。

Oracle Spatialでは、デフォルトの索引作成メカニズムにRツリー索引を使用しています。空間Rツリー索引では、最大4次元の空間データの索引を作成できます。Rツリー索引では、ジオメトリを囲む最小の矩形(最小境界矩形(MBR))によって各ジオメトリを近似させます。

詳細は、以下を参照してください。

- 『Oracle Spatial開発者ガイド』の空間データの索引作成に関する項

- 16.1.2.6項「ジオメトリ・フィルタ演算子」

16.1.2.5 ジオメトリ関係演算子

Oracle Spatialでは、次のOracle Spatialジオメトリ関係演算子がサポートされます。

- ANYINTERACT

- CONTAIN

- INSIDE

- WITHINDISTANCE

これらの操作はすべて、Oracle CQL問合せのprojection句またはwhere句のいずれかに使用できます。

Oracle CQL問合せのwhere句でジオメトリ関係演算子を使用する場合、Oracle Spatialで、where句で指定された関係に対してRツリー索引を作成できます。

Oracle Spatialでは、点と他のジオメトリ・タイプ間のジオメトリ関係のみがサポートされます。

詳細は、16.2.4項「ジオメトリ関係演算子の使用方法」を参照してください。

16.1.2.6 ジオメトリ・フィルタ演算子

Oracle Spatialでは、次のOracle Spatialジオメトリ・フィルタ演算子がサポートされます。

- FILTER

- NN

これらのフィルタ演算子では一時フィルタが実行されるので、Oracle CQL問合せのwhere句でのみ使用されます。

これらのフィルタ演算子では空間索引を使用して、指定するオブジェクトと空間的に対話する可能性がある一連の空間オブジェクトが識別されます。

詳細は、以下を参照してください。

- 16.1.2.4項「ジオメトリック索引」

- 16.2.5項「ジオメトリ・フィルタ演算子の使用方法」

16.1.2.7 ジオメトリAPI

Oracle SpatialはOracle Spatial Java APIに基づいています。Oracle SpatialはOracle Spatial機能をcom.oracle.cep.cartridge.spatial.Geometryクラスに公開します。このGeometryクラスにより、oracle.spatial.geometry.J3D_Geometryも拡張されます。

Oracle Spatialでサポートされるは2Dのジオメトリのみですが、効率の向上のために、Geometryクラスでは一部のJ3D_Geometryメソッドも使用されます。Geometryクラスでは、J3D_GeometryメソッドのためにZ座標に自動的にゼロが埋め込まれます。

Geometryクラスからアクセスできない(またはOracle Spatialがサポートする有効範囲およびジオメトリ・タイプに準拠していない)Oracle Spatial機能に、Oracle Spatialからアクセスすることはできません。

この項の内容は、次のとおりです。

- 16.1.2.7.1項「com.oracle.cep.cartridge.spatial.Geometryメソッド」

- 16.1.2.7.2項「oracle.spatial.geometry.JGeometryメソッド」

詳細は、以下を参照してください。

- 16.1.2項「有効範囲」

- 「ordsgenerator」

注意:

Oracle Spatialの型名を簡易化するために、2.7.2項「Aliases要素を使用した別名の定義」に示すように別名を使用できます。

16.1.2.7.1 com.oracle.cep.cartridge.spatial.Geometryメソッド

表16-4は、Geometryクラスで提供されるパブリック・メソッドを示しています。

表16-4 Oracle Spatialジオメトリ・メソッド

型

メソッド

バッファ

- bufferPolygon

距離

- distance

要素情報

- createElemInfo

ジオメトリ

- createGeometry

線形ポリゴン

- createLinearPolygon

最小境界矩形(MBR)

- get2dMbr

点

- createPoint

矩形

- createRectangle

型および型変換

- to_Geometry

- to_JGeometry

注意:

Geometryクラスでは大文字と小文字が区別されるため、表示されている方を使用してください。

注意:

SDO_SRID値を使用しないcom.oracle.cep.cartridge.spatial.Geometryメソッドを使用する場合、Oracle Spatialのアプリケーション・コンテキストを使用する必要があります。たとえば、次のメソッド呼出しを行うとランタイム例外が発生します。

com.oracle.cep.cartridge.spatial.Geometry.createPoint(lng, lat)

かわりに、spatialリンク名を使用して、メソッド呼出しをOracle Spatialのアプリケーション・コンテキストと関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)

SDO_SRID値を使用するGeometryメソッドを使用する場合、spatialリンク名の使用はオプションです。たとえば、次のメソッド呼出しは両方とも有効です。

com.oracle.cep.cartridge.spatial.Geometry.createPoint(8307, lng, lat)
com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)

詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。

16.1.2.7.2 oracle.spatial.geometry.JGeometryメソッド

次のJGeometryパブリック・メソッドを、Oracle Spatialに適用できます。

- double area(double tolerance): 2Dジオメトリの平面の表面積合計を返します。

- double length(double tolerance): 2Dジオメトリの周辺の長さを返します。すべての辺の長さが加えられます。

- double[] getMBR(): このジオメトリの最小境界矩形(MBR)を返します。2DのMBRのminX、minY、maxXおよびmaxY値を含むダブル配列を返します。

詳細は、以下を参照してください。

- http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28401/oracle/spatial/geometry/JGeometry.html

16.1.3 データ型マッピング

Oracle Spatialカートリッジは、1つのデータ型com.oracle.cep.cartridge.spatial.Geometryをサポートしています。

com.oracle.cep.cartridge.spatial.Geometryで提供されているメソッドの完全なリストは、16.1.2.7項「ジオメトリAPI」を参照してください。

16.1.4 Oracle Spatialのアプリケーション・コンテキスト

Oracle Spatialのインスタンスにアプリケーション・コンテキストを定義し、このアプリケーション・コンテキストをランタイム時に伝播できます。これにより、特定のOracle Spatialアプリケーション・デフォルト(SDO_SRIDなど)を特定のOracle Spatialインスタンスに関連付けることができます。

Oracle Spatialのアプリケーション・コンテキストを定義する前に、例16-1に示すように、必須のネームスペースおよびスキーマの場所のエントリを追加するように、Oracle CEPアプリケーションEPNアセンブリ・ファイルを編集します。

例16-1 EPNアセンブリ・ファイル: Oracle Spatialネームスペースおよびスキーマの場所

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
xmlns:spatial="http://www.oracle.com/ns/ocep/spatial"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.bea.com/ns/wlevs/spring
http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_1_1_6.xsd"
http://www.oracle.com/ns/ocep/spatial
http://www.oracle.com/ns/ocep/spatial/ocep-spatial.xsd">

例16-2は、測地参照システム1980 (GRS80)座標系を使用して、SpatialGRS80という空間コンテキストをEPNアセンブリ・ファイルに作成する方法を示しています。

例16-2 EPNアセンブリ・ファイルのspatial:context要素

<spatial:context id="SpatialGRS80" srid="4269" sma="6378137" rof="298.25722101" />

例16-3は、Oracle CQL問合せでspatial:contextを参照する方法を示しています。この例では、問合せは(例16-2で定義された)リンク名SpatialGRS80を使用して、このアプリケーション・コンテキストをOracle Spatialに伝播しています。SpatialGRS80のspatial:context属性設定は、createPointメソッド呼出しに適用されます。

例16-3 Oracle CQL問合せでのspatial:contextの参照

<view  id="createPoint">
select com.oracle.cep.cartridge.spatial.Geometry.createPoint@SpatialGRS80(
lng, lat)
from CustomerPos[NOW]
</view>

詳細は(すべてのspatial:context属性の完全なリストなど)、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle Spatialのアプリケーション・コンテキストの構成方法に関する項を参照してください。

注意:

SDO_SRID値を使用しないcom.oracle.cep.cartridge.spatial.Geometryメソッドを使用する場合、Oracle Spatialのアプリケーション・コンテキストを使用する必要があります。たとえば、次のメソッド呼出しを行うとランタイム例外が発生します。

com.oracle.cep.cartridge.spatial.Geometry.createPoint(lng, lat)

かわりに、spatialリンク名を使用して、メソッド呼出しをOracle Spatialのアプリケーション・コンテキストと関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)

SDO_SRID値を使用するGeometryメソッドを使用する場合、spatialリンク名の使用はオプションです。たとえば、次のメソッド呼出しは両方とも有効です。

com.oracle.cep.cartridge.spatial.Geometry.createPoint(8307, lng, lat)
com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)

詳細は、16.1.2.7項「ジオメトリAPI」を参照してください。

16.2 Oracle Spatialの使用

この項では、Oracle CEPアプリケーションでOracle Spatialをどのように使用できるかを中心に、一般的な使用例を説明します。内容は次のとおりです。

- 16.2.1項「Oracle Spatial Java APIでサポートされているジオメトリ・タイプへのアクセス方法」

- 16.2.2項「ジオメトリの作成方法」

- 16.2.3項「ジオメトリ・タイプのpublicメソッドおよびフィールドへのアクセス方法」

- 16.2.4項「ジオメトリ関係演算子の使用方法」

- 16.2.5項「ジオメトリ・フィルタ演算子の使用方法」

- 16.2.6項「デフォルトの測地座標の使用方法」

- 16.2.7項「他の測地座標の使用方法」

詳細は、16.1.2.7項「ジオメトリAPI」を参照してください。

16.2.1 Oracle Spatial Java APIでサポートされているジオメトリ・タイプへのアクセス方法

次の手順では、Oracle CQL問合せでOracle Spatialを使用してOracle Spatialジオメトリ・タイプSDO_GTYPE、SDO_ELEMENT_INFOおよびORDINATESにアクセスする方法について説明します。

Oracle Spatial Java APIでサポートされているジオメトリ・タイプにアクセスするには:

1. パッケージcom.oracle.cep.cartridge.spatialをお使いのOracle CEPアプリケーションのMANIFEST.MFファイルにインポートします。
詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のパッケージのインポート方法に関する項を参照してください。

2. 適切なOracle Spatialデータ型を使用して、Oracle CEPアプリケーションのイベント・タイプを定義します。
例16-4に、com.oracle.cep.cartridge.spatial.Geometry型の2つのイベント・プロパティxおよびyを使用して、イベント・タイプMySpatialEventを定義する方法を示します。

例16-4 Oracle Spatial型を使用したOracle CEPイベント

<wlevs:event-type-repository>
<wlevs:event-type type-name="MySpatialEvent">
<wlevs:properties>
<wlevs:property name="x" type="com.oracle.cep.cartridge.spatial.Geometry"/>
<wlevs:property name="y" type="com.oracle.cep.cartridge.spatial.Geometry"/>
</wlevs:properties>
</wlevs:event-type>
</wlevs:event-type-repository>

次のように、Oracle CQL問合せでこれらのイベント・プロパティを使用できます。

CONTAIN@spatial(x, y, 20.0d)

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPイベントの概要に関する項を参照してください。

3. GTYPE_POLYGONなどのSDO_GTYPEを選択します。
詳細は、16.1.2.1項「ジオメトリ・タイプ」を参照してください。

4. 縦座標に適した要素情報を選択します。
詳細は、16.1.2.2項「要素情報配列」を参照してください。

5. 座標の値を指定します。
詳細は、16.1.2.3項「縦座標および座標系とSDO_SRID」を参照してください。

6. 例16-5に示すように、Oracle CQL問合せを作成します。

例16-5 Oracle Spatialジオメトリ・タイプを使用したOracle CQL問合せ

view id="ShopGeom">
select  com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(
com.oracle.cep.cartridge.spatial.Geometry.GTYPE_POLYGON,
com.oracle.cep.cartridge.spatial.Geometry.createElemInfo(1, 1003, 1),
ordsgenerator@spatial(
lng1, lat1, lng2, lat2, lng3, lat3,
lng4, lat4, lng5, lat5, lng6, lat6
)
) as geom
from ShopDesc
</view>

16.2.2 ジオメトリの作成方法

次のメソッドを呼び出すことで、Oracle Spatialを使用してOracle CQL問合せでジオメトリを作成できます。

- com.oracle.cartridge.spatial.Geometryの静的メソッド

- Oracle Spatialがサポートする有効範囲およびジオメトリ・タイプに準拠している、oracle.spatial.geometry.JGeometryのメソッド。

詳細は、16.1.2.7項「ジオメトリAPI」を参照してください。

Oracle Spatialジオメトリ・クラスでの静的メソッドの使用

例16-6は、com.oracle.cartridge.spatial.Geometryの静的メソッドを使用して点ジオメトリを作成する方法を示しています。この例では、リンク(@spatial)を使用して、このクラスを提供するデータ・カートリッジを識別する必要があります。この方法の利点は、デフォルトで、または構成したアプリケーション・コンテキストに基づいて、Oracle Spatialのアプリケーション・コンテキストが適用され、SRIDおよび他のOracle Spatialオプションが設定される点です(16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照)。

例16-6 ジオメトリ静的メソッドを使用した点ジオメトリの作成

<view  id="CustomerPosGeom">
select com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(
lng, lat) as geom
from CustomerPos[NOW]
</view>

詳細は、16.1.2.1項「ジオメトリ・タイプ」を参照してください。

16.2.3 ジオメトリ・タイプのpublicメソッドおよびフィールドへのアクセス方法

Oracle Spatialを使用すると、Oracle CQLでOracle Spatialクラスのpublicメンバー関数およびpublicメンバー・フィールドに直接アクセスできます。

Geometryクラスからアクセスできない(またはOracle Spatialがサポートする有効範囲およびジオメトリ・タイプに準拠していない)Oracle Spatial機能に、Oracle Spatialからアクセスすることはできません。

例16-7では、ビューShopGeomはgeomというOracle Spatialジオメトリを作成しています。ビューshopMBRはJGeometry静的メソッドgetMBRを呼び出し、double[]がストリーム要素mbrとして返されています。問合せqshopMBRは標準Java APIを使用してこのdouble[]にアクセスしています。

例16-7 ジオメトリ・タイプのpublicメソッドおよびフィールドへのアクセス

<view id="ShopGeom">
select  com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(
com.oracle.cep.cartridge.spatial.Geometry.GTYPE_POLYGON,
com.oracle.cep.cartridge.spatial.Geometry.createElemInfo(1, 1003, 1),
ordsgenerator@spatial(
lng1, lat1, lng2, lat2, lng3, lat3,
lng4, lat4, lng5, lat5, lng6, lat6
)
) as geom
from ShopDesc
</view>
<view  id=”shopMBR”>
select geom.getMBR() as mbr
from ShopGeom
</view>
<query  id=”qshopMBR”>
select mbr[0], mbr[1], mbr[2], mbr[3]
from shopMBR
</query>

詳細は、以下を参照してください。

- 16.1.2.1項「ジオメトリ・タイプ」

- 第15章「Oracle Javaデータ・カートリッジ」

16.2.4 ジオメトリ関係演算子の使用方法

Oracle Spatialを使用すると、Oracle CQL問合せのWHERE句またはSELECT句で、次のOracle Spatialジオメトリ関係演算子にアクセスできます。

- ANYINTERACT

- CONTAIN

- INSIDE

- WITHINDISTANCE

例16-8において、ビューop_in_whereでは、WHERE句でCONTAINジオメトリ関係演算子を使用しています。この場合、Oracle SpatialではRツリー索引を使用します。ビューop_in_projでは、SELECT句でCONTAINを使用しています。

例16-8 ジオメトリ関係演算子の使用

<view id="op_in_where">
RStream(
select
loc.customerId,
shop.shopId
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
where
CONTAIN@spatial(shop.geom, loc.curLoc, 5.0d) = true
)
</view>
<view id="op_in_proj">
RStream(
select
loc.customerId,
shop.shopId,
CONTAIN@spatial(shop.geom, loc.curLoc, 5.0d)
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
)
</view>

詳細は、16.1.2.5項「ジオメトリ関係演算子」を参照してください。

16.2.5 ジオメトリ・フィルタ演算子の使用方法

Oracle Spatialを使用すると、Oracle CQL問合せのWHERE句で、次のOracle Spatialジオメトリ・フィルタ演算子にアクセスできます。

- FILTER

- NN

例16-9では、ビューfilterはWHEREでFILTERジオメトリ・フィルタ演算子を使用しています。

例16-9 ジオメトリ・フィルタ演算子の使用

<view id="filter">
RStream(
select loc.customerId, shop.shopId
from LocGeomStream[NOW] as loc, ShopGeomRelation as shop
where FILTER@spatial(shop.geom, loc.curLoc, 5.0d) = true
)
</view>

詳細は、16.1.2.6項「ジオメトリ・フィルタ演算子」を参照してください。

16.2.6 デフォルトの測地座標の使用方法

Oracle Spatialのデフォルトのアプリケーション・コンテキストを使用してOracle CQL問合せを作成すると、デフォルトのSRIDがCARTESIANに設定されます。

例16-10に示すように、createPointメソッド呼出しはデフォルトのリンク(@spatial)を使用します。これにより、Oracle Spatialのデフォルトのアプリケーション・コンテキストが適用されるようになります。

例16-10 Oracle CQL問合せでのデフォルトの測地座標の使用

<view  id="createPoint">
select com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(
lng, lat)
from CustomerPos[NOW]
</view>

詳細は、以下を参照してください。

- 16.1.4項「Oracle Spatialアプリケーション・コンテキスト」

- 16.1.2.3項「縦座標および座標系とSDO_SRID」

16.2.7 他の測地座標の使用方法

次の手順では、Oracle Spatialのアプリケーション・コンテキストを使用して、デフォルトのデカルト測地座標系以外の測地座標系をOracle CQL問合せで指定する方法について説明します。

詳細は、以下を参照してください。

- 16.1.4項「Oracle Spatialアプリケーション・コンテキスト」

- 16.1.2.3項「縦座標および座標系とSDO_SRID」

他の測地座標を使用するには:

1. Oracle Spatialのアプリケーション・コンテキストを作成し、使用する測地座標のsrid属性を定義します。
例16-11は、測地参照システム1980 (GRS80)座標系を使用して、SpatialGRS80という空間コンテキストをEPNアセンブリ・ファイルに作成する方法を示しています。

例16-11 EPNアセンブリ・ファイルのspatial:context要素

<spatial:context id="SpatialGRS80" srid="4269" sma="6378137" rof="298.25722101" />

2. Oracle CQL問合せにおいて、リンクでこのspatial:contextのIDを使用します。
例16-12は、Oracle CQL問合せでspatial:contextを参照する方法を示しています。この例では、問合せは(例16-11で定義された)リンク名SpatialGRS80を使用して、このアプリケーション・コンテキストをOracle Spatialに伝播しています。SpatialGRS80のspatial:context属性設定は、createPointメソッド呼出しに適用されます。

例16-12 Oracle CQL問合せでのspatial:contextの参照

<view  id=”createPoint”>
select com.oracle.cep.cartridge.spatial.Geometry.createPoint@SpatialGRS80(
lng, lat)
from CustomerPos[NOW]
</view>

ANYINTERACT

構文

注意:

これは、Oracle Spatialジオメトリ関係演算子であり、com.oracle.cep.cartridge.spatial.Geometryクラスのメソッドではないので、例16-13に示すように、パッケージ接頭辞を指定せずにこの演算子を呼び出すことができます。

ANYINTERACT@spatial

目的

この演算子は、GTYPE_POINTがジオメトリと対話する場合にtrueを返し、それ以外の場合はfalseを返します。

この演算子は次の引数を使用します。

- geom: サポートされるすべてのジオメトリ・タイプ。

- key: GTYPE_POINTジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINTである必要があり、それ以外の場合はRUNTIME_EXCEPTIONが発生します。

- tol: double値としての許容範囲。

詳細は、『Oracle Spatial開発者ガイド』のSDO_ANYINTERACTに関する項を参照してください。

例

例16-27は、Oracle CQL問合せでANYINTERACT Oracle Spatialジオメトリ関係演算子を使用する方法を示します。

例16-13 ジオメトリ関係演算子ANYINTERACTを使用したOracle CQL問合せ

<view id="op_in_where">
RStream(
select
loc.customerId,
shop.shopId
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
where
ANYINTERACT@spatial(shop.geom, loc.curLoc, 5.0d) = true
)
</view>
<view id="op_in_proj">
RStream(
select
loc.customerId,
shop.shopId,
ANYINTERACT@spatial(shop.geom, loc.curLoc, 5.0d)
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
)
</view>

bufferPolygon

構文

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、入力oracle.spatial.geometry.JGeometryポリゴンのバッファされたバージョンである、新規のcom.oracle.cep.cartridge.spatial.Geometryオブジェクトを返します。

このメソッドは次の引数を使用します。

- polygon: oracle.spatial.geometry.JGeometryポリゴン。

- distance: このバッファに使用された、doubleとしての距離値。
この値は、予定ジオメトリの予測単位と同じ単位であると見なされます。ジオメトリが測地の場合、このバッファの幅はメーターになります。

このメソッドは、Oracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatialリンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.bufferPolygon@spatial(geom, 1300)

詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。

例

例16-14は、bufferPolygonメソッドの使用方法を示しています。bufferPolygon呼出しはOracle Spatialのアプリケーション・コンテキストに依存するため、spatialリンク名を使用します。

例16-14 Geometry.bufferPolygonを使用したOracle CQL問合せ

<view id="LocGeomStream" schema="customerId curLoc">
select
customerId,
com.oracle.cep.cartridge.spatial.Geometry.bufferPolygon@spatial(geom, 13)
from
CustomerLocStream
</view>

CONTAIN

構文

注意:

これは、Oracle Spatialジオメトリ関係演算子であり、com.oracle.cep.cartridge.spatial.Geometryクラスのメソッドではないので、例16-13に示すように、パッケージ接頭辞を指定せずにこの演算子を呼び出すことができます。

CONTAIN@spatial

目的

この演算子は、GTYPE_POINTがジオメトリに含まれる場合にtrueを返し、それ以外の場合はfalseを返します。

この演算子は次の引数を使用します。

- geom: サポートされるすべてのジオメトリ・タイプ。

- key: GTYPE_POINTジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINTである必要があり、それ以外の場合はRUNTIME_EXCEPTIONが発生します。

- tol: double値としての許容範囲。

詳細は、『Oracle Spatial開発者ガイド』のSDO_CONTAINSに関する項を参照してください。

例

例16-27は、Oracle CQL問合せでCONTAIN Oracle Spatialジオメトリ関係演算子を使用する方法を示します。

例16-15 ジオメトリ関係演算子CONTAINを使用したOracle CQL問合せ

<view id="op_in_where">
RStream(
select
loc.customerId,
shop.shopId
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
where
CONTAIN@spatial(shop.geom, loc.curLoc, 5.0d) = true
)
</view>
<view id="op_in_proj">
RStream(
select
loc.customerId,
shop.shopId,
CONTAIN@spatial(shop.geom, loc.curLoc, 5.0d)
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
)
</view>

createElemInfo

構文

注意:

関数einfogeneratorを使用することもできます。詳細は、「einfogenerator」を参照してください。

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、所与の引数から1つの要素情報値をint[]として返します。

このメソッドは次の引数を使用します。

- soffset: この要素の第1の縦座標が格納されている縦座標配列内の、intとしてのオフセット。
SDO_STARTING_OFFSET値は0からではなく1から開始します。このため最初の要素の第1の縦座標はSDO_GEOMETRY.Ordinates(1)になります。2つ目の要素がある場合、その要素の第1の縦座標はSDO_GEOMETRY.Ordinates(n * 3 + 2)になり、nはSDO_ORDINATE_ARRAY定義内の位置を示します。

- etype: intとしての要素のタイプ。
Oracle SpatialではSDO_ETYPE値の1、1003および2003をサポートしており、これらは(複合型ではなく)単純な要素と見なされます。これらは、要素情報配列の3つのエントリ1組によって定義されます。タイプは次のとおりです。

- 1: 点。

- 1003: ポリゴンの外部の輪(反時計回りで指定される必要があります)。

- 2003: ポリゴンの内部の輪(時計回りで指定される必要があります)。

これらのタイプは、SDO_INTERPRETATIONによって詳細に修飾されます。

注意:

1桁と4桁のSDO_ETYPE値を単一のジオメトリに混在させることはできません。

- interp: intとしての解釈。
SDO_ETYPEが単純な要素(1、1003または2003)である場合、SDO_INTERPRETATION属性によって、この要素の座標の順序の解釈方法が決定されます。たとえば、ポリゴン境界は、連結された一連の直線セグメントで構成されます。

ジオメトリが複数の要素で構成される場合、ある要素の最後の縦座標は、常に次の要素の先頭のオフセットより1小さくなります。ジオメトリの最後の要素は、その開始オフセットから縦座標可変長配列の最後までの縦座標によって記述されます。

表16-5は、SDO_ETYPEとSDO_INTERPREATION間の関係を示しています。

表16-5 SDO_ETYPEとSDO_INTERPRETATION

SDO_ETYPE

SDO_INTERPRETATION

説明

0

任意の数値

Oracle Spatialによってサポートされないジオメトリ・タイプのモデル化に使用します。

1

1

点のタイプです。

1

0

方向付きの点の方向です。

1003または2003

1

頂点が直線セグメントに連結している単純なポリゴンです。各頂点について点を指定し、ポリゴンを閉じるために、終了点と開始点が一致するように指定する必要があります(許容差内で)。

たとえば、4面のポリゴンの場合は、5番目の点が1番目の点と同じになるような5つの点を指定します。

例

例16-16は、createElemInfoメソッドの使用方法を示しています。

例16-16 Geometry.createElemInfoを使用したOracle CQL問合せ

<view id="ShopGeom">
select  com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(
com.oracle.cep.cartridge.spatial.Geometry.GTYPE_POLYGON,
com.oracle.cep.cartridge.spatial.Geometry.createElemInfo(1, 1003, 1),
ordsgenerator@spatial(
lng1, lat1, lng2, lat2, lng3, lat3,
lng4, lat4, lng5, lat5, lng6, lat6
)
) as geom
from ShopDesc
</view>

createGeometry

構文

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、新規の2D oracle.cep.cartridge.spatial.Geometryオブジェクトを返します。

このメソッドは次の引数を使用します。

- gtype: intとしてのジオメトリ・タイプ。
詳細は、表16-2を参照してください。

- eleminfo: int[]としてのジオメトリ要素情報。
詳細は、「createElemInfo」を参照してください。

- ordinates: double[]としてのジオメトリ縦座標。

- srid: intとしてのジオメトリのオプションのSDO_SRID。
sridパラメータを省略すると、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatialリンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(gtype, eleminfo, ordinates)

詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。

例

例16-17は、createGeometryメソッドの使用方法を示しています。このcreateGeometry呼出しにはsrid引数が含まれていないため、spatialリンク名を使用してメソッド呼出しとOracle Spatialのアプリケーション・コンテキストが関連付けられます。

例16-17 Geometry.createGeometryを使用したOracle CQL問合せ

<view id="ShopGeom">
select  com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(
com.oracle.cep.cartridge.spatial.Geometry.GTYPE_POLYGON,
com.oracle.cep.cartridge.spatial.Geometry.createElemInfo(1, 1003, 1),
ordsgenerator@spatial(
lng1, lat1, lng2, lat2, lng3, lat3,
lng4, lat4, lng5, lat5, lng6, lat6
)
) as geom
from ShopDesc
</view>

createLinearPolygon

構文

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、穴のない単純な2Dの線形ポリゴンである、新規のcom.oracle.cep.cartridge.spatial.Geometryオブジェクトを返します。座標配列が自身では閉じない場合(最初と最後の座標が同じでない場合)、このメソッドは最初の座標をコピーし、この座標値を入力座標配列の最後に追加します。

穴のない単純な線形ポリゴンを作成するには、次の引数を使用します。

- coords: double[]としての線形ポリゴンの座標。

- srid: intとしてのジオメトリのオプションのSRID。
sridパラメータを省略すると、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatialリンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.createLinearPolygon@spatial(coords)

詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。

例

例16-18は、createLinearPolygonメソッドの使用方法を示しています。このcreateLinearPolygonメソッド呼出しにはsrid引数が含まれていないため、spatialリンク名を使用してメソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。

例16-18 Geometry.createLinearPolygonを使用したOracle CQL問合せ

<view id="LocGeomStream" schema="customerId curLoc">
select
customerId,
com.oracle.cep.cartridge.spatial.Geometry.createLinearPolygon@spatial(coords)
from
CustomerLocStream
</view>

createPoint

構文

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、3Dの点である新規のcom.oracle.cep.cartridge.spatial.Geometryオブジェクトを返します。

このメソッドは次の引数を使用します。

- x: doubleとしての左下のx座標。

- y: doubleとしての左下のy座標。

- srid: intとしてのジオメトリのオプションのSRID。
sridパラメータを省略すると、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatialリンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(x, y)

詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。

例

例16-19は、createPointメソッドの使用方法を示しています。このcreatePoint呼出しにはsrid引数が含まれているため、spatialリンク名を使用する必要はありません。

例16-19 Geometry.createPointを使用したOracle CQL問合せ

<view id="LocGeomStream" schema="customerId curLoc">
select
customerId,
com.oracle.cep.cartridge.spatial.Geometry.createPoint@spatial(lng, lat)
from
CustomerLocStream
</view>

createRectangle

構文

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、2Dの矩形である新規のcom.oracle.cep.cartridge.spatial.Geometryオブジェクトを返します。

このメソッドは次の引数を使用します。

- x1: doubleとしての左下のx座標。

- y1: doubleとしての左下のy座標。

- x2: doubleとしての右上のx座標。

- y2: doubleとしての右上のy座標。

- srid: intとしてのジオメトリのオプションのSRID。
sridパラメータを省略すると、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatialリンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.createRectangle@spatial(x1, y1, x2, y2)

詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。

例

例16-20は、createRectangleメソッドの使用方法を示しています。このcreateRectangleメソッド呼出しにはsrid引数が含まれていないため、spatialリンク名を使用してメソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。

例16-20 Geometry.createRectangleを使用したOracle CQL問合せ

<view id="LocGeomStream" schema="customerId curLoc">
select
customerId,
com.oracle.cep.cartridge.spatial.Geometry.createRectangle@spatial(x1, y1, x2, y2)
from
CustomerLocStream
</view>

distance

構文

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、2つのジオメトリ間の距離をdoubleとして計算します。

特定のcom.oracle.cep.cartridge.spatial.Geometryオブジェクトと他との間の距離を計算するには、次の引数を指定して、現在のGeometryオブジェクトの静的でないdistanceメソッドを使用します。

- g: 他のcom.oracle.cep.cartridge.spatial.Geometryオブジェクト。

2つのcom.oracle.cep.cartridge.spatial.Geometryオブジェクト間の距離を計算するには、次の引数を指定して静的なdistanceメソッドを使用します。

- g1: 1つ目のcom.oracle.cep.cartridge.spatial.Geometryオブジェクト。

- g2: 2つ目のcom.oracle.cep.cartridge.spatial.Geometryオブジェクト。

どちらの場合も、このメソッドはOracle Spatialのアプリケーション・コンテキストからパラメータを取得します。このため、spatialリンク名を使用して、メソッド呼出しとOracle Spatialのアプリケーション・コンテキストを関連付ける必要があります。

com.oracle.cep.cartridge.spatial.Geometry.distance@spatial(geom)
com.oracle.cep.cartridge.spatial.Geometry.distance@spatial(geom1, geom2)

詳細は、16.1.4項「Oracle Spatialのアプリケーション・コンテキスト」を参照してください。

例

例16-21は、distanceメソッドの使用方法を示しています。distanceメソッドはOracle Spatialのアプリケーション・コンテキストに依存するため、spatialリンク名を使用する必要があります。

例16-21 Geometry.distanceを使用したOracle CQL問合せ

<view id="LocGeomStream" schema="customerId curLoc">
select
customerId,
com.oracle.cep.cartridge.spatial.Geometry.createRectangle(x1, y1, x2, y2, 8307)
from
CustomerLocStream
where
com.oracle.cep.cartridge.spatial.Geometry.distance@spatial(geom1, geom2) < 5
</view>

einfogenerator

構文

注意:

これはOracle CQL関数で、com.oracle.cep.cartridge.spatial.Geometryクラスのメソッドではないため、この関数は、例16-22のようにパッケージ接頭辞を指定せずに呼び出します。

einfogenerator@spatial

GeometryメソッドcreateElemInfoを使用することもできます。詳細は、「createElemInfo」を参照してください。

目的

この関数は、所与の引数から1つの要素情報値をint[]として返します。

この関数は次の引数を使用します。

- offset: この要素の第1の縦座標が格納されている縦座標配列内の、intとしてのオフセット。
SDO_STARTING_OFFSET値は0からではなく1から開始します。このため最初の要素の第1の縦座標はSDO_GEOMETRY.Ordinates(1)になります。2つ目の要素がある場合、その要素の第1の縦座標はSDO_GEOMETRY.Ordinates(n * 3 + 2)になり、nはSDO_ORDINATE_ARRAY定義内の位置を示します。

- etype: intとしての要素のタイプ。
Oracle SpatialではSDO_ETYPE値の1、1003および2003をサポートしており、これらは(複合型ではなく)単純な要素と見なされます。これらは、要素情報配列の3つのエントリ1組によって定義されます。タイプは次のとおりです。

- 1: 点。

- 1003: ポリゴンの外部の輪(反時計回りで指定される必要があります)。

- 2003: ポリゴンの内部の輪(時計回りで指定される必要があります)。

これらのタイプは、SDO_INTERPRETATIONによって詳細に修飾されます。

注意:

1桁と4桁のSDO_ETYPE値を単一のジオメトリに混在させることはできません。

- interp: intとしての解釈。
SDO_ETYPEが単純な要素(1、1003または2003)である場合、SDO_INTERPRETATION属性によって、この要素の座標の順序の解釈方法が決定されます。たとえば、ポリゴン境界は、連結された一連の直線セグメントで構成されます。

ジオメトリが複数の要素で構成される場合、ある要素の最後の縦座標は、常に次の要素の先頭のオフセットより1小さくなります。ジオメトリの最後の要素は、その開始オフセットから縦座標可変長配列の最後までの縦座標によって記述されます。

表16-6は、SDO_ETYPEとSDO_INTERPREATION間の関係を示しています。

表16-6 SDO_ETYPEとSDO_INTERPRETATION

SDO_ETYPE

SDO_INTERPRETATION

説明

0

任意の数値

Oracle Spatialによってサポートされないジオメトリ・タイプのモデル化に使用します。

1

1

点のタイプです。

1

0

方向付きの点の方向です。

1003または2003

1

頂点が直線セグメントに連結している単純なポリゴンです。各頂点について点を指定し、ポリゴンを閉じるために、終了点と開始点が一致するように指定する必要があります(許容差内で)。

たとえば、4面のポリゴンの場合は、5番目の点が1番目の点と同じになるような5つの点を指定します。

例

例16-22は、oeinfogenerator関数を使用してジオメトリの要素情報を作成する方法を示しています。

例16-22 Oracle Spatialジオメトリ・タイプを使用したOracle CQL問合せ

view id="ShopGeom">
select  com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(
com.oracle.cep.cartridge.spatial.Geometry.GTYPE_POLYGON,
einfogenerator@spatial(1, 1003, 1),
ordsgenerator@spatial(
lng1, lat1, lng2, lat2, lng3, lat3,
lng4, lat4, lng5, lat5, lng6, lat6
)
) as geom
from ShopDesc
</view>

FILTER

構文

注意:

これは、Oracle Spatialジオメトリ・フィルタ演算子であり、com.oracle.cep.cartridge.spatial.Geometryクラスのメソッドではないので、例16-13に示すように、パッケージ接頭辞を指定せずにこの演算子を呼び出すことができます。

FILTER@spatial

目的

この演算子は、切り離されていないオブジェクトのペアの場合はtrueを返し、それ以外の場合はfalseを返します。

この演算子は次の引数を使用します。

- key: GTYPE_POINTジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINTである必要があり、それ以外の場合はRUNTIME_EXCEPTIONが発生します。

- tol: double値としての許容範囲。

詳細は、『Oracle Spatial開発者ガイド』のSDO_FILTERに関する項を参照してください。

例

例16-27は、Oracle CQL問合せでFILTER Oracle Spatialジオメトリ・フィルタ演算子を使用する方法を示します。

例16-23 ジオメトリ関係演算子FILTERを使用したOracle CQL問合せ

<view id="filter">
RStream(
select loc.customerId, shop.shopId
from LocGeomStream[NOW] as loc, ShopGeomRelation as shop
where FILTER@spatial(loc.curLoc, 5.0d) = true
)
</view>

get2dMbr

構文

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、次の値を含む特定のGeometryの最小境界矩形(MBR)をdouble[][]として返します。

- [0][0]: minX

- [0][1]: maxX

- [1][0]: minY

- [1][1]: maxY

このメソッドは次の引数を使用します。

- geom: com.oracle.cep.cartridge.spatial.Geometryオブジェクト。

例

例16-24は、get2dMbrメソッドの使用方法を示しています。

例16-24 Geometry.get2dMbrを使用したOracle CQL問合せ

<view id="LocGeomStream" schema="customerId mbr">
select
customerId,
com.oracle.cep.cartridge.spatial.Geometry.get2dMbr(geom)
from
CustomerLocStream
where
com.oracle.cep.cartridge.spatial.Geometry.distance@spatial(geom1, geom2) < 5
</view>

INSIDE

構文

注意:

これは、Oracle Spatialジオメトリ関係演算子であり、com.oracle.cep.cartridge.spatial.Geometryクラスのメソッドではないので、例16-13に示すように、パッケージ接頭辞を指定せずにこの演算子を呼び出すことができます。

INSIDE@spatial

目的

この演算子は、GTYPE_POINTがジオメトリに含まれる場合にtrueを返し、それ以外の場合はfalseを返します。

この演算子は次の引数を使用します。

- geom: サポートされるすべてのジオメトリ・タイプ。

- key: GTYPE_POINTジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINTである必要があり、それ以外の場合はRUNTIME_EXCEPTIONが発生します。

- tol: double値としての許容範囲。

詳細は、『Oracle Spatial開発者ガイド』のSDO_INSIDEに関する項を参照してください。

例

例16-27は、Oracle CQL問合せでINSIDE Oracle Spatialジオメトリ関係演算子を使用する方法を示します。

例16-25 ジオメトリ関係演算子INSIDEを使用したOracle CQL問合せ

<view id="op_in_where">
RStream(
select
loc.customerId,
shop.shopId
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
where
INSIDE@spatial(shop.geom, loc.curLoc, 5.0d) = true
)
</view>
<view id="op_in_proj">
RStream(
select
loc.customerId,
shop.shopId,
INSIDE@spatial(shop.geom, loc.curLoc, 5.0d)
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
)
</view>

NN

構文

注意:

これは、Oracle Spatialジオメトリ・フィルタ演算子であり、com.oracle.cep.cartridge.spatial.Geometryクラスのメソッドではないので、例16-13に示すように、パッケージ接頭辞を指定せずにこの演算子を呼び出すことができます。

NN@spatial

目的

この演算子は、keyに最も近いgeomからオブジェクト(最も近くにあるネイバー)を返します。2つのジオメトリ・オブジェクトの近さを決定する際、各オブジェクトの表面上の2点間の最短距離が使用されます。

この関数は次の引数を使用します。

- geom: サポートされるすべてのジオメトリ・タイプ。

- key: GTYPE_POINTジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINTである必要があり、それ以外の場合はRUNTIME_EXCEPTIONが発生します。

- tol: double値としての許容範囲。

詳細は、『Oracle Spatial開発者ガイド』のSDO_NNに関する項を参照してください。

例

例16-27は、Oracle CQL問合せでNN Oracle Spatialジオメトリ・フィルタ演算子を使用する方法を示します。

例16-26 ジオメトリ関係演算子NNを使用したOracle CQL問合せ

<view id="filter">
RStream(
select loc.customerId, shop.shopId
from LocGeomStream[NOW] as loc, ShopGeomRelation as shop
where NN@spatial(shop.geom, loc.curLoc, 5.0d) = true
)
</view>

ordsgenerator

構文

注意:

これはOracle CQL関数で、com.oracle.cep.cartridge.spatial.Geometryクラスのメソッドではないため、この関数は、例16-27のようにパッケージ接頭辞を指定せずに呼び出します。

ordsgenerator@spatial

目的

この関数は、Oracle Spatialが要求する2D座標のdouble配列を返します。

この関数は次の引数を使用します。

- x1, y1, ... xN, yN: double座標値のカンマ区切りリスト。

例

例16-27は、ordsgenerator関数を使用して、6つのdouble座標値からOracle Spatialダブル配列を作成する方法を示しています。

例16-27 Oracle Spatialジオメトリ・タイプを使用したOracle CQL問合せ

view id="ShopGeom">
select  com.oracle.cep.cartridge.spatial.Geometry.createGeometry@spatial(
com.oracle.cep.cartridge.spatial.Geometry.GTYPE_POLYGON,
com.oracle.cep.cartridge.spatial.Geometry.createElemInfo(1, 1003, 1),
ordsgenerator@spatial(
lng1, lat1, lng2, lat2, lng3, lat3,
lng4, lat4, lng5, lat5, lng6, lat6
)
) as geom
from ShopDesc
</view>

to_Geometry

構文

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、oracle.spatial.geometry.JGeometryタイプを3Dのcom.oracle.cep.cartridge.spatial.Geometryタイプに変換します。指定されたジオメトリがすでにGeometryタイプおよび3Dジオメトリである場合、変換は行われません。指定されたジオメトリが2Dのジオメトリの場合、z座標を埋め込むことでジオメトリは3Dに変換されます。

このメソッドは次の引数を使用します。

- geom: 変換するoracle.spatial.geometry.JGeometryオブジェクト。

例

例16-28は、to_Geometryメソッドの使用方法を示しています。

例16-28 Geometry.to_Geometryを使用したOracle CQL問合せ

<view id="LocStream" schema="customerId loc">
select
customerId,
com.oracle.cep.cartridge.spatial.Geometry.to_Geometry(geom)
from
CustomerLocStream
</view>

to_JGeometry

構文

目的

このcom.oracle.cep.cartridge.spatial.Geometryメソッドは、com.oracle.cep.cartridge.spatial.Geometryオブジェクトを2Dタイプのoracle.spatial.geometry.JGeometryに変換します。

このメソッドは次の引数を使用します。

- g: 変換するcom.oracle.cep.cartridge.spatial.Geometryオブジェクト。

例

例16-29は、to_JGeometryメソッドの使用方法を示しています。

例16-29 Geometry.to_JGeometryを使用したOracle CQL問合せ

<view id="LocStream" schema="customerId loc">
select
customerId,
com.oracle.cep.cartridge.spatial.Geometry.to_JGeometry(geom)
from
CustomerLocStream
</view>

WITHINDISTANCE

構文

注意:

これは、Oracle Spatialジオメトリ関係演算子であり、com.oracle.cep.cartridge.spatial.Geometryクラスのメソッドではないので、例16-13に示すように、パッケージ接頭辞を指定せずにこの演算子を呼び出すことができます。

WITHINDISTANCE@spatial

目的

この演算子は、GTYPE_POINTがジオメトリの特定の距離内にある場合にtrueを返し、それ以外の場合はfalseを返します。

この演算子は次の引数を使用します。

- geom: サポートされるすべてのジオメトリ・タイプ。

- key: GTYPE_POINTジオメトリ・タイプ。
このジオメトリのジオメトリ・タイプはGTYPE_POINTである必要があり、それ以外の場合はRUNTIME_EXCEPTIONが発生します。

- dist: double値としての距離。

詳細は、『Oracle Spatial開発者ガイド』のSDO_WITHIN_DISTANCEに関する項を参照してください。

例

例16-27は、Oracle CQL問合せでWITHINDISTANCE Oracle Spatialジオメトリ関係演算子を使用する方法を示します。

例16-30 ジオメトリ関係演算子WITHINDISTANCEを使用したOracle CQL問合せ

<view id="op_in_where">
RStream(
select
loc.customerId,
shop.shopId
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
where
WITHINDISTANCE@spatial(shop.geom, loc.curLoc, 5.0d) = true
)
</view>
<view id="op_in_proj">
RStream(
select
loc.customerId,
shop.shopId,
WITHINDISTANCE@spatial(shop.geom, loc.curLoc, 5.0d)
from
LocGeomStream[NOW] as loc,
ShopGeomRelation as shop
)
</view>

17 Oracle CEP JDBCデータ・カートリッジ

この章では、Oracle Continuous Query Language (Oracle CQL)の拡張であるOracle CEP JDBCデータ・カートリッジについて説明します。このデータ・カートリッジによって、データベースに対してSQL問合せを実行し、返された結果をCQL問合せで使用できます。

カートリッジの機能を使用する場合、SQL問合せをJDBCカートリッジ関数の定義と関連付けます。その後、CQL問合せから、関連付けられているSQL問合せをデータベースに対して実行するJDBCカートリッジ関数の呼出しが可能になります。この関数呼出しは、その関数呼出しを行うCQL問合せ内のCQLリレーションとしてSQL問合せの結果を使用できるようにするため、TABLE句内に含める必要があります。

TABLE句の詳細は、17.2.2.2項「TABLE句の使用」を参照してください。

この章の内容は、次のとおりです。

- 17.1項「Oracle CEP JDBCデータ・カートリッジについて」

- 17.2項「Oracle CEP JDBCデータ・カートリッジの使用」

詳細は、以下を参照してください。

- 14.1項「データ・カートリッジについて」

- 14.2項「Oracle CQLデータ・カートリッジの型」

17.1 Oracle CEP JDBCデータ・カートリッジについて

Oracle CEPストリームにはストリーミング・データが含まれ、通常、データベースには履歴データが格納されます。Oracle CEP JDBCデータ・カートリッジを使用して、履歴データ(1つ以上の表内に格納される)をOracle CEPストリームからのストリーミング・データと関連付けます。Oracle CEP JDBCデータ・カートリッジは、データベースに対して任意のSQL問合せを実行し、CQL問合せの結果を使用します。この項では、Oracle CEP JDBCデータ・カートリッジを使用して、ストリーミング・データと履歴データを関連付ける方法について説明します。

この項の内容は、次のとおりです。

- 17.1.1項「データ・カートリッジ名」

- 17.1.2項「有効範囲」

- 17.1.3項「データ型マッピング」

- 17.1.4項「Oracle CEP JDBCデータ・カートリッジのアプリケーション・コンテキスト」

17.1.1 データ・カートリッジ名

Oracle CEP JDBCデータ・カートリッジでは、カートリッジIDcom.oracle.cep.cartrdige.jdbcが使用されます。このIDは予約されるので、他のカートリッジによって使用されません。

詳細は、17.1.4項「Oracle CEP JDBCデータ・カートリッジのアプリケーション・コンテキスト」を参照してください。

17.1.2 有効範囲

Oracle CEP JDBCデータ・カートリッジでは、任意の複雑なSQL文が次の制限下でサポートされます。

- SQL問合せのSELECTリスト内のネイティブSQLタイプのみを使用できます。

- SELECTリスト内のユーザー定義タイプおよび複雑なデータベース・タイプは使用できません。

- SQL問合せ内のすべてのSELECTリスト列に別名を指定する必要があります。

詳細は、17.1.3項「データ型マッピング」を参照してください。

注意:

Oracle CEP JDBCデータ・カートリッジを使用するには、データ・ソースでOracle JDBCのドライバ・バージョン11.2以上が使用される必要があります。

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing管理者ガイド』の異なるデータベース・ドライバまたはドライバ・バージョンへのアクセスの構成に関する項を参照してください。

17.1.3 データ型マッピング

この項では、Oracle CEP JDBCデータ・カートリッジのデータ型マッピングについて説明します。

参考として、例17-1に示すようなOracle CEP JDBCデータ・カートリッジ・コンテキスト関数があるとします。

例17-1 Oracle CEP JDBCデータ・カートリッジのSQL文

...
<jc:jdbc-ctx>
<name>JdbcCartridgeOne</name>
<data-source>StockDS</data-source>
<function name="getDetailsByOrderIdName">
<param name="inpOrderId" type="int" />
<param name="inpName" type="char" />
<return-component-type>
com.oracle.cep.example.jdbc_cartridge.RetEvent
</return-component-type>
<sql><![CDATA[
SELECT
Employee.empName as employeeName,
Employee.empEmail as employeeEmail,
OrderDetails.description as description
FROM
PlacedOrders, OrderDetails , Employee
WHERE
PlacedOrders.empId = Employee.empId AND
PlacedOrders.orderId = OrderDetails.orderId AND
Employee.empName = :inpName AND
PlacedOrders.orderId = :inpOrderId
]]></sql>
</function>
</jc:jdbc-ctx>
...

詳細は、17.1.2項「有効範囲」を参照してください。

17.1.4 Oracle CEP JDBCデータ・カートリッジのアプリケーション・コンテキスト

Oracle CEP JDBCデータ・カートリッジを使用するには、次の手順で説明するように、アプリケーションの開発中に、1つ以上のアプリケーションの有効範囲内にあるJDBCカートリッジ・コンテキストを宣言または構成する必要があります。

- 17.1.4.1項「EPNファイル内でのJDBCカートリッジ・コンテキストの宣言」

- 17.1.4.2項「アプリケーション構成ファイル内でのJDBCカートリッジ・コンテキストの構成」

17.1.4.1 EPNファイル内でのJDBCカートリッジ・コンテキストの宣言

EPNファイル内でのJDBCカートリッジ・コンテキストの宣言手順:

1. 例17-2に示すように、必須のネームスペースおよびスキーマの場所のエントリを追加するように、Oracle CEPアプリケーションEPNアセンブリ・ファイルを編集します。

2. 例17-3に示すように、EPNファイル内でエントリをjdbc-contextタグ付きで追加し、id属性を指定します。idは、このアプリケーションの有効範囲内にあるコンテキストの名前を示し、このコンテキストで定義されている関数を参照するCQL問合せで使用されます。idは、このコンテキストがアプリケーション構成ファイルで構成される際にも使用されます。

例17-2 EPNアセンブリ・ファイル: Oracle CEP JDBCデータ・カートリッジのネームスペースおよびスキーマの場所

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
xmlns:jdbc="http://www.oracle.com/ns/ocep/jdbc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.bea.com/ns/wlevs/spring
http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_1_1_6.xsd"
http://www.oracle.com/ns/ocep/jdbc
http://www.oracle.com/ns/ocep/jdbc/ocep-jdbc.xsd">

例17-3に、EPNアセンブリ・ファイル内に、JdbcCartridgeOneと言う名前のOracle CEP JDBCデータ・カートリッジ・アプリケーション・コンテキストの作成方法を示します。

例17-3 EPNアセンブリ・ファイルのjdbc:jdbc-context要素

<jdbc:jdbc-context id="JdbcCartridgeOne"/>

17.1.4.2 アプリケーション構成ファイル内でのJDBCカートリッジ・コンテキストの構成

JDBCカートリッジ・コンテキストを構成するには、通常、アプリケーションの/wlevsディレクトリ内にあるコンポーネント構成ファイル内に構成の詳細を追加します。この構成は、チャネルおよびプロセッサなどの他のEPNコンポーネントの構成と同様です。

アプリケーション構成ファイル内でのJDBCカートリッジ・コンテキストの構成手順:

1. JDBCコンテキスト構成を追加する前に。次の例で示すように、必須のネームスペース・エントリを構成XMLファイルに追加します。

<?xml version="1.0" encoding="UTF-8"?>
<jdbcctxconfig:config xmlns:jdbcctxconfig="http://www.bea.com/ns/wlevs/config/application"
xmlns:jc="http://www.oracle.com/ns/ocep/config/jdbc">

2. JDBCカートリッジ・コンテキスト構成は、親レベルのタグであるjdbc-ctxの下で行われます。コンテキストでは、1つ以上の関数が定義され、それぞれ、単一のSQL問合せと関連付けられます。構成では、SQL問合せが実行されるデータベースを表すデータ・ソースも指定されます。各関数には、その関数を定義するSQL問合せに引数を渡すのに使用される入力パラメータが含まれ、また、関数によってreturn-component-typeが指定されます。この関数への呼出しは常にTABLE句内に含められるので、関数は常にコレクション型を返します。return-component-typeプロパティでは、そのコレクションのコンポーネントのタイプが指定されます。
例17-3に示すように、nameプロパティの値は、EPNファイル内でid属性に使用される値と一致する必要があります。

例17-4に、Oracle CQL問合せでのjdbc:jbdc-contextへの参照方法を示します。この場合、問合せでは、リンク名JdbcCartridgeOne(例17-3で定義済)を使用して、このアプリケーション・コンテキストがOracle CEP JDBCデータ・カートリッジに伝播されます。例17-4では、Oracle CQL問合せによって、Oracle CEP JDBCデータ・カートリッジ・アプリケーション・コンテキストJdbcCartridgeOneに関連付けられている関数getDetailsByOrderIdNameが呼び出されます。

例17-4 コンポーネント構成ファイル内のjc:jdbc-ctx要素

...
<jc:jdbc-ctx>
<name>JdbcCartridgeOne</name>
<data-source>StockDS</data-source>
<function name="getDetailsByOrderIdName">
<param name="inpOrderId" type="int" />
<param name="inpName" type="char" />
<return-component-type>
com.oracle.cep.example.jdbc_cartridge.RetEvent
</return-component-type>
<sql><![CDATA[
SELECT
Employee.empName as employeeName,
Employee.empEmail as employeeEmail,
OrderDetails.description as description
FROM
PlacedOrders, OrderDetails , Employee
WHERE
PlacedOrders.empId = Employee.empId AND
PlacedOrders.orderId = OrderDetails.orderId AND
Employee.empName = :inpName AND
PlacedOrders.orderId = :inpOrderId
]]></sql>
</function>
</jc:jdbc-ctx>
...
<processor>
<name>Proc</name>
<rules>
<query id="q1"><![CDATA[
RStream(
select
currentOrder.orderId,
details.orderInfo.employeeName,
details.orderInfo.employeeemail,
details.orderInfo.description
from
OrderArrival[now] as currentOrder,
TABLE(getDetailsByOrderIdName@JdbcCartridgeOne(
currentOrder.orderId, currentOrder.empName
) as orderInfo
) as details
)
]]></query>
</rules>
</processor>
...

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEP JDBCデータ・カートリッジのアプリケーション・コンテキストの構成方法に関する項を参照してください。

17.2 Oracle CEP JDBCデータ・カートリッジの使用

一般に、Oracle CEP JDBCデータ・カートリッジは次のように使用します。

1. Oracle CEP JDBCカートリッジ・アプリケーションの有効範囲内にあるコンテキストを宣言および定義します。
詳細は、17.1.4項「Oracle CEP JDBCデータ・カートリッジのアプリケーション・コンテキスト」を参照してください。

2. コンポーネント構成ファイル内のjc:jdbc-ctx要素で、1つ以上のSQL文を定義します。
詳細は、17.2.1,項「SQL文の定義: function要素」を参照してください。

3. function要素のreturn-component-type子要素をJava beanとして指定する場合は、そのbeanを実装し、クラスがOracle CEPアプリケーション・クラスパス上に存在するようにします。
例17-5に、一般的な実装を示します。

例17-5 return-component-typeクラスの例

package com.oracle.cep.example.jdbc_cartridge;

public class RetEvent
{
public String employeeName;
public String employeeEmail;
public String description;

/* Default constructor is mandatory */
public RetEvent1() {}

/* May contain getters and setters for the fields */

public String getEmployeeName() {
return this.employeeName;
}

public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}

...

/* May contain other helper methods */

public int getEmployeeNameLength() {
return employeeName.length();
}
}

フィールドはパブリックとして宣言する必要があります。

JDBCカートリッジ・コンテキスト関数のreturn-component-typeクラスが、SQL問合せのSELECTリスト内のフィールドの1対1マッピングを持つ必要があります。つまり、関数を定義するSQL問合せのSELECTリスト内にあるすべてのフィールドが、その関数のreturn-component-typeであると宣言されるJavaクラス内に対応するフィールド(名前が一致する)を持つ必要があり、持たない場合はOracle CEPでエラーが発生します。たとえば、例17-4に示す関数内のSELECT項目が、どのように例17-5のフィールド名と一致するか確認します。

詳細は、以下を参照してください。

- 17.2.1.2.2項「return-component-type」

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEP IDE for Eclipseのプロジェクトに関する項

4. Oracle CQL TABLE句を使用してjc:jdbc-ctx要素で定義されるSQL文を呼び出し、SQLSELECTリストの別名で返される結果にアクセスする、1つ以上のOracle CQL問合せを定義します。
詳細は、17.2.2項「Oracle CEP JDBCデータ・カートリッジを使用したOracle CQL問合せの定義」を参照してください。

17.2.1 SQL文の定義: function要素

例17-6に示すように、コンポーネント構成ファイルのjc:jdbc-cxt要素内で、function子要素を使用してJDBCカートリッジ・コンテキスト関数を定義できます。

例17-6 Oracle CEP JDBCデータ・カートリッジのSQL文

...
<jc:jdbc-ctx>
<name>JdbcCartridgeOne</name>
<data-source>StockDS</data-source>
<function name="getDetailsByOrderIdName">
<param name="inpOrderId" type="int" />
<param name="inpName" type="char" />
<return-component-type>
com.oracle.cep.example.jdbc_cartridge.RetEvent
</return-component-type>
<sql><![CDATA[
SELECT
Employee.empName as employeeName,
Employee.empEmail as employeeEmail,
OrderDetails.description as description
FROM
PlacedOrders, OrderDetails , Employee
WHERE
PlacedOrders.empId = Employee.empId AND
PlacedOrders.orderId = OrderDetails.orderId AND
Employee.empName = :inpName AND
PlacedOrders.orderId = :inpOrderId
]]></sql>
</function>
</jc:jdbc-ctx>
...

指定するjc:jdbc-cxt要素内で1つ以上のfunction要素を定義できます。

この項の内容は、次のとおりです。

- 17.2.1.1項「function要素の属性」

- 17.2.1.2項「function要素の子要素」

- 17.2.1.3項「function要素の使用法」

17.2.1.1 function要素の属性

各function要素では、表17-1にリストされている属性がサポートされます。

表17-1 function要素の属性

属性

説明

name

JDBCカートリッジ・コンテキスト関数の名前。

名前とシグネチャの組合せは、指定するOracle CEP JDBCデータ・カートリッジ・アプリケーション・コンテキスト内で一意である必要があります。詳細は、17.2.1.3.4項「JDBCカートリッジ・コンテキスト関数のオーバーロード」を参照してください。

17.2.1.2 function要素の子要素

各function要素では、次の子要素がサポートされます。

- param

- return-component-type

- sql

17.2.1.2.1 param

param子要素では、オプションの入力パラメータが指定されます。

SQL文では、ゼロ以上のパラメータを使用できます。各パラメータはparam要素内で定義されます。

各param子要素では、表17-2にリストされている属性がサポートされます。

表17-2 param要素の属性

属性

説明

name

入力パラメータの名前。

有効なパラメータ名は、A-Z、a-z、0-9および_(アンダースコア)の組合せで構成されます。

type

パラメータのデータ型。

データ型サポート: 入力パラメータparam要素のtype属性には、Oracle CQLネイティブのcom.bea.wlevs.ede.api.Typeデータ型のみを指定できます。

注意:

データ型の名前では大/小文字が区別されます。com.bea.wlevs.ede.api.Typeクラスで指定される文字を使用します。

詳細は、表17-3を参照してください。

17.2.1.2.2 return-component-type

return-component-type子要素では、関数の戻り値が指定されます。この子要素は必須です。

JDBCデータ・カートリッジ関数によって返されるコレクション型のコンポーネント・タイプを表します。この関数は常にOracle CQL TABLE句内から呼び出され、常にコレクション型を返します。

詳細は、17.2.2.2項「TABLE句の使用」を参照してください。

データ型サポート: 次のいずれかの型をreturn-component-type要素の値として指定できます。

- Oracle CQLネイティブのcom.bea.wlevs.ede.api.Typeデータ型。

- Java beanなどの、Oracle CQL拡張可能Javaカートリッジ型。

詳細は、以下を参照してください。

- 表17-3

- 第15章「Oracle Javaデータ・カートリッジ」

17.2.1.2.3 sql

sql子要素では、SQL文が指定されます。この子要素は必須です。

各function要素には、単一行のSQL文を1つのみ含めることができます。SQL文自体は<![CDATA[]]>ブロック内で定義します。

例17-6に示すように、SQL文内で、コロン(:)接頭辞を使用して、param要素のname属性により入力パラメータを指定します。

注意:

JDBCカートリッジ・コンテキスト関数内のすべてのSELECTリスト列に別名を指定する必要があります。

データ型サポート: 表17-3に、お使いのOracle CEP JDBCデータ・カートリッジ・コンテキスト関数で使用可能なSQLタイプ、それぞれ対応するOracle CEP Javaタイプおよびcom.bea.wlevs.ede.api.Type型のリストを示します。

表17-3 SQL列タイプおよびOracle CEPタイプの対応するもの

SQLタイプ

Oracle CEP Javaタイプ

com.bea.wlevs.ede.api.Type

NUMBER

java.math.BigDecimal

bigdecimal

NUMBER

long

bigint

RAW

byte[]

byte

CHAR、VARCHAR

java.lang.String

char

NUMBER

double

double

FLOAT、NUMBER

float

float

INTEGER、NUMBER

int

int

TIMESTAMP

java.sql.Timestamp

timestamp

注意:

JavaタイプのサイズがSQLタイプのサイズを超える場合、Oracle CEPアプリケーションで、SQLタイプの最大サイズの値を制限する必要があります。CQL側で使用されるタイプの選択は、データベース列内の値の範囲で決定されるようにします。たとえば、SQL列が、整数の範囲の値が含まれている数値である場合、CQL側で"int"タイプを使用します。誤ったタイプを選択し、値が範囲外となった場合、Oracle CEPで数値オーバーフローのエラーが発生します。

注意:

Oracle CEP JDBCデータ・カートリッジでは、Oracle Spatialデータ型はサポートされません。

詳細は、17.2.1.3項「function要素の使用法」を参照してください。

17.2.1.3 function要素の使用法

この項では、次のように、Oracle CEP JDBCデータ・カートリッジを使用して定義可能な別のJDBCカートリッジ・コンテキスト関数の例を示します。

- 17.2.1.3.1項「複数のパラメータのあるJDBCカートリッジ・コンテキスト関数」

- 17.2.1.3.2項「PL/SQL関数の呼出し」

- 17.2.1.3.3項「複雑なJDBCカートリッジ・コンテキスト関数」

- 17.2.1.3.4項「JDBCカートリッジ・コンテキストのオーバーロード」

17.2.1.3.1 複数のパラメータのあるJDBCカートリッジ・コンテキスト関数

Oracle CEP JDBCデータ・カートリッジを使用して、複数の入力パラメータを使用するJDBCカートリッジ・コンテキスト関数を定義できます。

例17-7に、2つの入力パラメータを使用するJDBCデータ・カートリッジ・コンテキスト関数を定義するOracle CEP JDBCデータ・カートリッジ・アプリケーション・コンテキストを示します。

例17-7 複数のパラメータのあるOracle JDBCデータ・カートリッジ・コンテキスト関数

...
<function name="getDetailsByOrderIdName">
<param name="inpOrderId" type="int" />
<param name="inpName" type="char" />
<return-component-type>
com.oracle.cep.example.jdbc_cartridge.RetEvent
</return-component-type>
<sql><![CDATA[
SELECT
Employee.empName as employeeName,
Employee.empEmail as employeeEmail,
OrderDetails.description as description
FROM
PlacedOrders, OrderDetails , Employee
WHERE
PlacedOrders.empId = Employee.empId AND
PlacedOrders.orderId = OrderDetails.orderId AND
Employee.empName = :inpName AND
PlacedOrders.orderId = :inpOrderId
]]></sql>
</function>
...

17.2.1.3.2 PL/SQL関数の呼出し

Oracle CEP JDBCデータ・カートリッジを使用して、データベースが定義するPL/SQL関数を呼び出すJDBCカートリッジ・コンテキスト関数を定義できます。

例17-8に、PL/SQL関数getOrderAmtを呼び出すJDBCデータ・カートリッジ・コンテキスト関数を定義するOracle CEP JDBCデータ・カートリッジ・アプリケーション・コンテキストを示します。

例17-8 PL/SQL関数を呼び出すOracle JDBCデータ・カートリッジ・コンテキスト関数

...
<function name="getOrderAmount">
<param name="inpId" type="int" />
<return-component-type>
com.oracle.cep.example.jdbc_cartridge.RetEvent
</return-component-type>
<sql><![CDATA[
SELECT getOrderAmt(:inpId) as orderAmt
FROM dual
]]></sql>
</function>
...

17.2.1.3.3 複雑なJDBCカートリッジ・コンテキスト関数

Oracle CEP JDBCデータ・カートリッジを使用して、副問合せ、統計、GROUP BY、ORDER BYおよびHAVINGなど、任意の複雑なJDBCカートリッジ・コンテキスト関数を定義できます。

例17-9に、複雑なJDBCデータ・カートリッジ・コンテキスト関数を定義するOracle CEP JDBCデータ・カートリッジ・アプリケーション・コンテキストを示します。

例17-9 Oracle CEP JDBCデータ・カートリッジの複雑なJDBCカートリッジ・コンテキスト関数

...
<function name="getHighValueOrdersPerEmp">
<param name="limit" type="int"/>
<param name="inpName" type="char"/>
<return-component-type>
com.oracle.cep.example.jdbc_cartridge.RetEvent
</return-component-type>
<sql><![CDATA[
select description as description,  sum(amt) as totalamt, count(*) as numTimes
from  OrderDetails
where orderid in (
select orderid from PlacedOrders where empid in (
select empid from Employee where  empName = :inpName
)
)
group by description
having sum(amt) > :limit
]]></sql>
</function>
...

17.2.1.3.4 JDBCカートリッジ・コンテキスト関数のオーバーロード

Oracle CEP JDBCデータ・カートリッジを使用して、各関数が一意のシグネチャを持つ場合、同じアプリケーション・コンテキスト内に同じ名前のJDBCカートリッジ・コンテキスト関数を定義できます。

例17-10に、getDetailsという名前の2つのJDBCカートリッジ・コンテキスト関数を定義するOracle CEP JDBCデータ・カートリッジ・アプリケーション・コンテキストを示します。各関数は、一意のシグネチャで識別されます。

例17-10 Oracle JDBCデータ・カートリッジ・コンテキスト関数のオーバーロード

<jc:jdbc-ctx>
<name>JdbcCartridgeOne</name>
<data-source>StockDS</data-source>
<function name="getDetails">
<param name="inpName" type="char" />
<return-component-type>
com.oracle.cep.example.jdbc_cartridge.RetEvent
</return-component-type>
<sql><![CDATA[
SELECT
Employee.empName as employeeName,
Employee.empEmail as employeeEmail,
OrderDetails.description as description
FROM
PlacedOrders, OrderDetails , Employee
WHERE
PlacedOrders.empId = Employee.empId AND
PlacedOrders.orderId = OrderDetails.orderId AND
Employee.empName=:inpName
ORDER BY <!—SQL query using ORDER BY -->
description desc
]]></sql>
</function>
<function name="getDetails">
<param name="inpOrderId" type="int" />
<sql><![CDATA[
SELECT
Employee.empName as employeeName,
Employee.empEmail as employeeEmail,
OrderDetails.description as description
FROM
PlacedOrders, OrderDetails , Employee
WHERE
PlacedOrders.empId= Employee.empId AND
PlacedOrders.orderId = OrderDetails.orderId AND
PlacedOrders.orderId = :inpOrderId
]]></sql>
</function>
</jc:jdbc-ctx>

17.2.2 Oracle CEP JDBCデータ・カートリッジを使用したOracle CQL問合せの定義

この項では、次のように、Oracle CEP JDBCデータ・カートリッジを使用しててSQL文を呼び出すOracle CQL問合せの定義方法について説明します。

- 17.2.2.1項「Selectリストの別名の使用」

- 17.2.2.2項「TABLE句の使用」

- 17.2.2.3項「return-component-typeとしてのネイティブCQLタイプの使用」

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CQLプロセッサの構成に関する項を参照してください。

17.2.2.1 Selectリストの別名の使用

例17-11に示すようなOracle CEP JDBCデータ・カートリッジ・コンテキスト関数があるとします。

例17-11 Oracle CEP JDBCデータ・カートリッジ・コンテキスト関数

<jc:jdbc-ctx>
<name>JdbcCartridgeOne</name>
<data-source>StockDS</data-source>
<function name="getDetailsByOrderIdName">
<param name="inpOrderId" type="int" />
<param name="inpName" type="char" />
<return-component-type>
com.oracle.cep.example.jdbc_cartridge.RetEvent
</return-component-type>
<sql><![CDATA[
SELECT
Employee.empName as employeeName,
Employee.empEmail as employeeEmail,
OrderDetails.description as description
FROM
PlacedOrders, OrderDetails , Employee
WHERE
PlacedOrders.empId = Employee.empId AND
PlacedOrders.orderId = OrderDetails.orderId AND
Employee.empName = :inpName AND
PlacedOrders.orderId = :inpOrderId
]]></sql>
</function>
</jc:jdbc-ctx>

SELECTリスト内の各列に別名を指定する必要があります。Oracle CQL問合せ内のJDBCカートリッジ・コンテキスト関数を呼び出す際、これらのSELECTリストの別名で、結果セット内の列にアクセスします。

詳細は、17.2.2.2項「TABLE句の使用」を参照してください。

17.2.2.2 TABLE句の使用

例17-12に示すようなOracle CEP JDBCデータ・カートリッジのSQL文があるとします。

例17-12 Oracle CEP JDBCデータ・カートリッジのSQL文

...
<jc:jdbc-ctx>
<name>JdbcCartridgeOne</name>
<data-source>StockDS</data-source>
<function name="getDetailsByOrderIdName">
<param name="inpOrderId" type="int" />
<param name="inpName" type="char" />
<return-component-type>
com.oracle.cep.example.jdbc_cartridge.RetEvent
</return-component-type>
<sql><![CDATA[
SELECT
Employee.empName as employeeName,
Employee.empEmail as employeeEmail,
OrderDetails.description as description
FROM
PlacedOrders, OrderDetails , Employee
WHERE
PlacedOrders.empId = Employee.empId AND
PlacedOrders.orderId = OrderDetails.orderId AND
Employee.empName = :inpName AND
PlacedOrders.orderId = :inpOrderId
]]></sql>
</function>
</jc:jdbc-ctx>
...

例17-13のOracle CQL問合せにより、例17-12で定義されるJDBCカートリッジ・コンテキスト関数が呼び出されます。

例17-13 Oracle CEP JDBCデータ・カートリッジ・コンテキスト関数を呼び出すOracle CQL問合せ

<processor>
<name>Proc</name>
<rules>
<query id="q1"><![CDATA[
RStream(
select
currentOrder.orderId,
details.orderInfo.employeeName,
details.orderInfo.employeeemail,
details.orderInfo.description
details.orderInfo.getEmployeeNameLength()
from
OrderArrival[now] as currentOrder,
TABLE(getDetailsByOrderIdName@JdbcCartridgeOne(
currentOrder.orderId, currentOrder.empName
) as orderInfo
) as details
)
]]></query>
</rules>
</processor>

Oracle CEP JDBCデータ・カートリッジ・コンテキスト関数の呼出しは、Oracle CQL問合せのTABLE句にラップする必要があります。

次を使用して結果セットにアクセスします。

TABLE_CLAUSE_ALIAS.JDBC_CARTRIDGE_FUNCTION_ALIAS.SQL_SELECT_LIST_ALIAS
or
TABLE_CLAUSE_ALIAS.JDBC_CARTRIDGE_FUNCTION_ALIAS.METHOD_NAME

説明:

- TABLE_CLAUSE_ALIAS: TABLE句の外部のAS別名。
例17-13では、detailsです。

- JDBC_CARTRIDGE_FUNCTION_ALIAS: JDBCカートリッジ・コンテキスト関数の内部のAS別名。
例17-13では、orderInfoです。

- SQL_SELECT_LIST_ALIAS: JDBCカートリッジ・コンテキスト関数のSELECTリストの別名。
例17-12では、employeeName、employeeEmailおよびdescriptionです。

- METHOD_NAME: return-component-typeクラスによって指定されるメソッドの名前。
例17-13では、getEmployeeNameLength()です。

例17-13に示すように、次を使用してOracle CQL問合せ内のJDBCカートリッジ・コンテキスト関数の結果セットにアクセスします。

details.orderInfo.employeeName
details.orderInfo.employeeemail
details.orderInfo.description
details.orderInfo.getEmployeeNameLength()

JDBCデータ・カートリッジ関数によって返されるコレクション型のコンポーネント・タイプは、function要素のreturn-component-type子要素で定義されます。この関数は常にOracle CQL TABLE句内から呼び出され、常にコレクション型を返します。例17-13で呼び出されるgetDetailsByORderIdName JDBCカートリッジ・コンテキスト関数が例17-12に示すように定義される場合、orderInfoはcom.oracle.cep.example.jdbc_cartridge.RetEvent型になります。

return-component-typeのフィールドとメソッドは両方ともOracle CQL問合せでアクセスできます。例17-12では、return-component-typeによって例17-14で示すように実装されるJava beanが指定されています。

例17-14 return-component-typeクラスの例

package com.oracle.cep.example.jdbc_cartridge;

public class RetEvent
{
String employeeName;
String employeeEmail;
String description;

/* Default constructor is mandatory */
public RetEvent1() {}

/* May contain getters and setters for the fields */

public String getEmployeeName() {
return this.employeeName;
}

public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}

...

/* May contain other helper methods */

public int getEmployeeNameLength() {
return employeeName.length();
}
}

このクラスでは、Oracle CQL問合せ内で呼出し可能な、getEmployeeNameLengthなどのヘルパー・メソッドが指定されます。

詳細は、以下を参照してください。

- 17.2.1.2.2項「return-component-type」

- 18.2.7項「関数TABLEの問合せ」

- 「table_clause」

17.2.2.3 return-component-typeとしてのネイティブCQLタイプの使用

次は、ネイティブCQLタイプbigintをreturn-component-typeとして持つ関数を定義するJDBCカートリッジ・コンテキストです。

例17-15 return-component-typeとしてのCQLタイプbigint

<jc:jdbc-ctx>
<name>JdbcCartridgeOne</name>
<data-source>myJdbcDataSource</data-source>
<function name="getOrderAmt">
<param name="inpId" type="int" />
<return-component-type>bigint</return-component-type> <!-- native CQL as return component type -->
<sql><![CDATA[
SELECT
getOrderAmt(:inpId) as orderAmt
FROM (select :inpId as iid from
dual)]]>
</sql>
</function>
</jc:jdbc-ctx>

例17-16に、例17-15のgetOrderAmt関数のCQL問合せ内における使用方法を示します。

例17-16 CQL問合せ内のgetOrderAmt関数

<query id="q1"><![CDATA[
RStream(
select
currentOrder.orderId,
details.orderInfo as orderAmt
from
OrderArrival[now] as currentOrder,
TABLE(getOrderAmt@JdbcCartridgeTwo(currentOrder.orderId) as orderInfo of bigint) as details
)
]]></query>

別名orderInfo自体はbigint型であり、CQL問合せのselectリスト内ではdetails.orderInfo as orderAmtとしてアクセスできます。

TABLEコンストラクト内で使用される"of bigint"句はオプションです。指定される場合、例17-15内のbigintのように、記述されるタイプがreturn-component-typeと一致する必要があります。

第IV部

Oracle CQLの使用

この部は、次の章で構成されています。

- 第18章「Oracle CQLの問合せ、ビューおよび結合」

- 第19章「MATCH_RECOGNIZEを使用したパターン認識」

- 第20章「Oracle CQL文」

18 Oracle CQLの問合せ、ビューおよび結合

この章では、Oracle Continuous Query Language (Oracle CQL)の問合せ、ビューおよび結合のリファレンスと使用法のガイドラインを提供します。 Oracle CQLの問合せおよびビューを使用して、ストリームおよびリレーションからの要素データの選択、処理、フィルタ処理を行います。

QUERY文を使用して作成した最上位のSELECT文は問合せと呼ばれます。

VIEW文を使用して作成した最上位のVIEW文はビューと呼ばれます(Oracle CQLでの副問合せ)。

結合は、複数のストリーム、ビューまたはリレーションから行を結合する問合せです。

この章の内容は、次のとおりです。

- 18.1項「Oracle CQLの問合せ、ビューおよび結合の概要」

- 18.2項「問合せ」

- 18.3項「ビュー」

- 18.4項「結合」

- 18.5項「Oracle CQL問合せとOracle CEPサーバー・キャッシュ」

- 18.6項「Oracle CQL問合せとリレーショナル・データベース表」

- 18.7項「Oracle CQL問合せとOracleデータ・カートリッジ」

詳細は、以下を参照してください。

- 1.2.1項「表記規則」

- 1.2.3項「ドキュメント表記規則」

- 第2章「Oracle CQLの基本要素」

- 第7章「共通のOracle CQL DDL句」

- 第20章「Oracle CQL文」

18.1 Oracle CQLの問合せ、ビューおよび結合の概要

Oracle CQL問合せは、Oracle CQL構文で表され、1つ以上のストリームまたはビューからのデータを取得するためにOracle CEP CQLプロセッサで実行される操作です。詳細は、18.2項「問合せ」を参照してください。

Oracle CQLビューは、ストリームまたはリレーションでの代替の選択項目を表します。Oracle CQLでは、副問合せのかわりにビューを使用します。詳細は、18.3項「ビュー」を参照してください

Oracle CEPでは、問合せのFROM句に複数のストリームがある場合は常に結合が行われます。詳細は、18.4項「結合」を参照してください。

例18-1は、procという名前のOracle CQLプロセッサ・コンポーネントの構成ファイルに定義された一般的なOracle CQL問合せを示します。

例18-1 一般的なOracle CQL問合せ

<?xml version="1.0" encoding="UTF-8"?>
<n1:config
xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd"
xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<processor>
<name>proc</name>
<rules>
<view id="lastEvents" schema="cusip mbid srcId bidQty ask askQty seq"><![CDATA[
select cusip, mod(bid) as mbid, srcId, bidQty, ask, askQty, seq
from filteredStream[partition by srcId, cusip rows 1]
]]></view>
<query id="q1"><![CDATA[
SELECT *
FROM   lastEvents [Range Unbounded]
WHERE  price > 10000
]]></query>
</rules>
</processor>
</n1:config>

例18-1に示すように、rules要素の子要素viewまたはqueryには各Oracle CQL文が含まれています。

- view: Oracle CQLのビュー(Oracle CQLでの副問合せ)の文が含まれます。view要素のid属性はビューの名前を定義します。
例18-1では、view要素で Oracle CQL view文(Oracle CQLでの副問合せ)が指定されています。

- query: Oracle CQLのselect文が含まれます。query要素のid属性は問合せの名前を定義します。
例18-1では、query要素でOracle CQL問合せ文が指定されています。問合せ文ではビューからの選択が行われます。デフォルトでは、問合せの結果が下流のチャネルに出力されます。チャネルの構成でselector要素を使用して、この動作を制御できます。

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のチャネルの構成に関する項を参照してください。

各Oracle CQL文は<![CDATA[ ... ]]>タグで囲み、末尾にセミコロン(;)は付けません。

詳細は、以下を参照してください。

- 18.1.1項「Oracle CQL問合せの作成方法」

- 1.2.1項「表記規則」

- 第20章「Oracle CQL文」

18.1.1 Oracle CQL問合せの作成方法

一般に、Oracle CQLの問合せおよびビューは、Oracle CEP IDE for Eclipseを使用して作成します。デプロイメント後に、Oracle CEP Visualizerを使用してOracle CQLの問合せを追加、変更および削除できます。

Oracle CQL問合せを作成するには:

1. Oracle CEP IDE for Eclipseを使用して、Oracle CEPアプリケーションとイベント処理ネットワーク(EPN)を作成します。
詳細は、以下を参照してください。

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEP IDE for Eclipseのプロジェクトに関する項

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEP IDE for Eclipseとイベント処理ネットワークに関する項

2. EPNエディタでOracle CQLプロセッサを右クリックし、「構成のソースに移動」を選択します(図18-1を参照)。

図18-1 EPNエディタからのプロセッサの構成ソースへの移動

「図18-1 EPNエディタからのプロセッサの構成ソースへの移動」の説明

EPNエディタでこのプロセッサの対応するコンポーネント構成ファイルが開き、該当するprocessor要素にカーソルが置かれます(図18-2を参照)。

図18-2 プロセッサの構成ソースの編集

「図18-2 プロセッサの構成ソースの編集」の説明

3. 問合せとビューを作成し、ユーザー定義の関数とウィンドウを登録します。
例については、次の項を参照してください。

- 18.2項「問合せ」

- 18.3項「ビュー」

- 18.4項「結合」

- 18.7項「Oracle CQL問合せとOracleデータ・カートリッジ」

- 18.5項「Oracle CQL問合せとOracle CEPサーバー・キャッシュ」

- 第4章「演算子」

- 第5章「式」

- 第6章「条件」

- 第8章「組込みの単一行関数」

- 第9章「組込みの集計関数」

- 第10章「Colt単一行関数」

- 第11章「Colt集計関数」

- 第12章「java.lang.Math関数」

- 第13章「ユーザー定義関数」

- 第19章「MATCH_RECOGNIZEを使用したパターン認識」

- 第20章「Oracle CQL文」

- 『Oracle Fusion Middleware Oracle Complex Event Processingスタート・ガイド』

4. Oracle CEP IDE for Eclipseを使用して、Oracle CEPアプリケーションをパッケージ化し、Oracle CEPサーバーにデプロイします。
詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPアプリケーションのアセンブルとデプロイに関する項を参照してください。

5. デプロイメント後、Oracle CEP Visualizerを使用してOracle CEPアプリケーションで問合せを変更、追加および削除します。
詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing Visualizerユーザーズ・ガイド』のOracle CQLルールの管理に関する項を参照してください。

18.2 問合せ

問合せは、データ・ストリームおよびビューからの情報を抽出する主な手段です。

query::=

query句自体は、次のいずれかの部分で構成されます。

- sfw_block: CQL問合せを表すには、このselect-from-where句を使用します。
詳細は、18.2.1.1項「Select、From、Whereブロック」を参照してください。

- idstream_clause: 問合せに適用されるリレーションからストリームへの入力IStreamまたは削除DStream演算子を指定するには、この句を使用します。
詳細は、18.2.1.9項「IDStream Clause句」を参照してください。

- rstream: 問合せに適用されるリレーションからストリームへのRStream演算子を指定するには、この句を使用します。
詳細は、「リレーションからストリームへのRStream演算子」を参照してください。

- binary: 2つの問合せまたはビューで返されるタプルの集合演算を実行するには、この句を使用します。
詳細は、18.2.1.8項「Binary句」を参照してください。

次の項では、作成できる基本的な問合せの種類について説明しています。

- 18.2.2項「単純な問合せ」

- 18.2.3項「組込みウィンドウの問合せ」

- 18.2.4項「MATCH_RECOGNIZEの問合せ」

- 18.2.5項「リレーショナル・データベース表の問合せ」

- 18.2.6項「XMLTableの問合せ」

- 18.2.7項「関数TABLEの問合せ」

- 18.2.8項「キャッシュの問合せ」

詳細は、以下を参照してください。

- 18.2.9項「問合せ結果のソート」

- 18.2.10項「問合せ結果の差分の検出」

- 18.2.11項「パラメータ化された問合せ」

18.2.1 問合せの構成要素

この項では、Oracle CQL問合せの作成に使用する基本的な構成要素について概説します。

- 18.2.1.1項「Select、From、Whereブロック」

- 18.2.1.2項「Select句」

- 18.2.1.3項「From句」

- 18.2.1.4項「Where句」

- 18.2.1.5項「Group By句」

- 18.2.1.6項「Order By句」

- 18.2.1.7項「Having句」

- 18.2.1.8項「Binary句」

- 18.2.1.9項「IDStream句」

18.2.1.1 Select、From、Whereブロック

sfw_blockを使用して、Oracle CQL問合せの select、from、およびオプションのwhere句を指定します。

sfw_block::=

sfw_blockは次の部分で構成されます。

- 18.2.1.2項「Select句」

- 18.2.1.3項「From句」

- 18.2.1.4項「Where句」

- 18.2.1.5項「Group By句」

- 18.2.1.6項「Order By句」

- 18.2.1.7項「Having句」

18.2.1.2 Select句

問合せの結果セットに必要なストリーム要素を指定するには、この句を使用します。select_clauseでは*演算子を使用してすべてのストリーム要素を指定するか、1つ以上のストリーム要素のリストを指定できます。

select_clause::=

SELECTキーワードの後で、from_clauseの前に置かれた式のリストはselectリストと呼ばれます。selectリストでは、1つ以上のストリームまたはビューからOracle CEPによって返される要素のセットで1つ以上のストリーム要素を指定します。ストリーム要素の個数、データ型および長さはselectリストの要素によって決まります。

選択した重複タプルの各セットで1つのコピーのみが返されるようにするには、オプションでdistinctを指定します。重複タプルとはselectリスト内の各式と一致する値を持つタプルです。

詳細は、select_clause::=を参照してください。

18.2.1.3 From句

select_clauseで指定されたストリーム要素を提供するストリームおよびビューを指定するには、この句を使用します(18.2.1.2項「Select句」を参照)。

from_clauseでは、1つ以上のカンマ区切りのrelation_variable句を指定できます。

from_clause::=

詳細は、from_clause::=を参照してください。

relation_variable::=

relation_variable句で指定された任意のデータ・ソースから選択できます。

relation_variable句のAS演算子で別名を定義してselectリストの直前の式にラベルを付け、その名前で結果を参照できます(2.7.1.1項「relation_variable句の別名」を参照)。

共通するストリーム要素名を持つ複数のストリーム、ビューまたはリレーション間で結合を作成する場合は(18.4項「結合」を参照)、各ストリーム、ビューまたはリレーションの名前を使用して、ストリーム要素名を修飾する必要があります。例18-2は、ストリーム名を使用して、OrderStreamのcustomerIDストリーム要素とCustomerStreamのcustomerIDストリーム要素を区別する方法を示します。

例18-2 完全修飾されたストリーム要素名

<query id="q0"><![CDATA[
select * from OrderStream, CustomerStream
where
OrderStream.customerID = CustomerStream.customerID
]]></query>

それ以外の場合、完全修飾されたストリーム要素名はオプションです。ただし、ストリーム名の参照を常に明示的に修飾することをお薦めします。完全修飾されたストリーム要素名によって、多くの場合Oracle CEPでの処理が軽減されます。

詳細は、以下を参照してください。

- 18.2.4項「MATCH_RECOGNIZEの問合せ」

- 18.2.6項「XMLTableの問合せ」

- 18.2.7項「関数TABLEの問合せ」

- relation_variable::=

18.2.1.4 Where句

select_clauseで結果が返される条件を指定するには、このオプションの句を使用します(18.2.1.2項「Select句」を参照)。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

詳細は、以下を参照してください。

- opt_where_clause::=

- 9.1.1項「組込み集計関数とWhere、Group ByおよびHaving句」

- 11.1.2項「Colt集計関数とWhere、Group ByおよびHaving句」

18.2.1.5 Group By句

結果をグループ化(分割)するには、このオプションの句を使用します。この句では、結果セットの順序は保証されません。グループ化を並べ替えるには、order by句を使用します。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

詳細は、以下を参照してください。

- opt_group_by_clause::=

- 18.2.1.5項「Group By句」

- 9.1.1項「組込み集計関数とWhere、Group ByおよびHaving句」

- 11.1.2項「Colt集計関数とWhere、Group ByおよびHaving句」

18.2.1.6 Order By句

すべての結果または上位n個の結果を並べ替えるには、このオプションの句を使用します。

詳細は、以下を参照してください。

- order_by_clause::=

- order_by_top_clause::=

- 18.2.9項「問合せ結果のソート」

18.2.1.7 Having句

返されたストリーム要素のグループを指定されたconditionがTRUEのグループに制限するには、このオプションの句を使用します。この句を省略すると、Oracle CEPではすべてのグループのサマリー結果が返されます。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

詳細は、以下を参照してください。

- opt_having_clause::=

- 9.1.1項「組込み集計関数とWhere、Group ByおよびHaving句」

- 11.1.2項「Colt集計関数とWhere、Group ByおよびHaving句」

18.2.1.8 Binary句

2つの問合せまたはビューで返されるタプルで次の集合演算を実行するには、binary句を使用します。

- EXCEPT

- MINUS

- INTERSECT

- UNIONとUNION ALL

- INとNOT IN

詳細は、binary::=を参照してください。

18.2.1.9 IDStream句

select-from-where句またはbinary句を使用し、その結果をIStreamまたはDStreamのいずれかのリレーションからストリームへの演算子として返すには、この句を使用します。

IStreamまたはDstream演算子とusing_clauseを組み合せることで、問合せ結果の差分を簡単に検出できます。

詳細は、以下を参照してください。

- idstream_clause::=

- 「リレーションからストリームへのIStream演算子」

- 「リレーションからストリームへのDStream演算子」

- 18.2.10項「問合せ結果の差分の検出」

18.2.2 単純な問合せ

例18-3に、単一のストリームからすべてのストリーム要素を選択する単純な問合せを示します。

例18-3 単純な問合せ

<query id="q0"><![CDATA[
select * from OrderStream where orderAmount > 10000.0
]]></query>

詳細は、「Query」を参照してください。

18.2.3 組込みウィンドウの問合せ

例18-4に、組込みのタプルベースのストリームからリレーションへのウィンドウ演算子を使用して、スキーマ(c1 integer, c2 float)を持つストリームS2からすべてのストリーム要素を選択する問合せを示します。

例18-4 組込みウィンドウの問合せ

<query id="BBAQuery"><![CDATA[
select * from S2 [range 5 minutes] where S2.c1 > 10
]]></query>

詳細は、以下を参照してください。

- 1.1.3項「ストリームからリレーションへの演算子(ウィンドウ)」

- window_type::=

18.2.4 MATCH_RECOGNIZEの問合せ

例18-5に、ItemTempStreamのストリーム要素間の複雑な関係を表すMATCH_RECOGNIZE句を使用する問合せを示します。

例18-5 MATCH_RECOGNIZEの問合せ

<query id="detectPerish"><![CDATA[
select its.itemId
from tkrfid_ItemTempStream MATCH_RECOGNIZE (
PARTITION BY itemId
MEASURES A.itemId as itemId
PATTERN (A B* C)
DEFINE
A  AS  (A.temp >= 25),
B  AS  ((B.temp >= 25) and (to_timestamp(B.element_time) - to_timestamp(A.element_time) < INTERVAL "0 00:00:05.00" DAY TO SECOND)),
C  AS  (to_timestamp(C.element_time) - to_timestamp(A.element_time) >= INTERVAL "0 00:00:05.00" DAY TO SECOND)
) as its
]]></query>

詳細は、以下を参照してください。

- 第19章「MATCH_RECOGNIZEを使用したパターン認識」

- pattern_recognition_clause::=

18.2.5 リレーショナル・データベース表の問合せ

Oracle CQLプロセッサを使用すると、リレーショナル・データベース表をイベント・ソースとして指定できます。このイベント・ソースで問合せを実行したり、他のイベント・ソースと結合したりできます。

詳細は、18.6項「Oracle CQL問合せとリレーショナル・データベース表」を参照してください。

18.2.6 XMLTableの問合せ

例18-6は、ビューv1と、そのビューに対する問合せq1を示します。ビューはxmltypeストリーム要素を持つストリームS1から選択します。ビューv1はXMLTABLE句でXPath式を使用して、xmltypeストリーム要素のデータを解析します。ビューのスキーマのデータ型は、COLUMNS句で解析されたデータのデータ型と一致します。問合せq1は他の任意のデータ・ソースの場合と同様に、このビューから選択します。XMLTABLE句はXMLネームスペースもサポートしています。

例18-6 XMLTABLEの問合せ

<view id="v1" schema="orderId LastShares LastPrice"><![CDATA[
select
X.OrderId,
X.LastShares,
X.LastPrice
from
S1
XMLTABLE (
"//FILL"
PASSING BY VALUE
S1.c1 as "."
COLUMNS
OrderId char(16) PATH "fn:data(../@ID)",
LastShares integer PATH "fn:data(@LastShares)",
LastPrice float PATH "fn:data(@LastPx)"
) as X
]]></view>

<query id="q1"><![CDATA[
IStream(
select
orderId,
sum(LastShares * LastPrice),
sum(LastShares * LastPrice) / sum(LastShares)
from
v1[now]
group by orderId
)
]]></query>

詳細は、以下を参照してください。

- 1.1.5項「ストリームからストリームへの演算子」

- xmltable_clause::=

- 「SQL/XML (SQLX)」

18.2.7 関数TABLEの問合せ

TABLE句を使用して、Oracle CQL問合せのFROM句内の組込みまたはユーザー定義関数から返された複数の行にアクセスします。TABLE句は返された複数の行をOracle CQLリレーションに変換します。これは外部リレーションであるため、TABLE関数句とストリームを結合する必要があります。

table_clause::=

(object_expr::=、identifier::=、datatype::=)

次の点に注意してください。

- 関数は、配列型またはCollection型を返す必要があります。

- TABLE関数句とストリームを結合する必要があります。

例18-7は、1つのパラメータ(InputPoints.point)を渡して、Oracle SpatialメソッドgetContainingGeometriesを呼び出すデータ・カートリッジTABLE句を示しています。このメソッドの戻り値Collectionには別名validGeometriesが作成されます。TABLE句が戻すリレーションには別名R2が作成されます。

例18-7 データ・カートリッジTABLEの問合せ

<query id="q1"><![CDATA[
RSTREAM (
SELECT
R2.validGeometries.shape as containingGeometry,
R1.point as inputPoint
FROM
InputPoints[now] as R1,
TABLE (getContainingGeometries@spatial (InputPoints.point) as validGeometries) AS R2
)
]]></query>

例18-8に、パラメータを指定せずに関数getAllGeometries@spatialを呼び出したために、データ・カートリッジTABLE句と別のストリームとの結合に失敗した、無効なデータ・カートリッジTABLEの問合せを示します。Oracle CEPでは、結合ストリームに要素が到着したときにのみデータ・カートリッジ・メソッドを呼び出します。

例18-8 無効なデータ・カートリッジTABLEの問合せ

<query id="q2"><![CDATA[
RSTREAM (
SELECT
R2.validGeometries.shape as containingGeometry
FROM
TABLE (getAllGeometries@spatial () as validGeometries) AS R2
)
]]></query>

その他の例については、次の項を参照してください。

- 「データ・カートリッジTABLEの問合せ例: イテレータ」

- 「データ・カートリッジTABLEの問合せ例: 配列」

- 「データ・カートリッジTABLEの問合せ例: コレクション」

詳細は、以下を参照してください。

- 「table_clause」

- 18.7項「Oracle CQL問合せとOracleデータ・カートリッジ」

- 1.1.11項「関数」

- 15.1.4.3項「配列」

- 15.1.4.4項「コレクション」

18.2.8 キャッシュの問合せ

Oracle CQLプロセッサを使用すると、キャッシュをイベント・ソースとして指定できます。Nowウィンドウを使用する場合にのみ、このイベント・ソースで問合せを実行したり、他のイベント・ソースと結合できます。

Oracle CEPのキャッシュ・イベント・ソースはプル・データ・ソースです。つまり、Oracle CEPは、データ・ストリーム上でのイベントの到着時にイベント・ソースをポーリングします。

詳細は、18.5項「Oracle CQL問合せとOracle CEPサーバー・キャッシュ」を参照してください。

18.2.9 問合せ結果のソート

問合せで選択された行を並べ替えるには、ORDER BY句を使用します。

order_by_clause::=

(order_by_list::=)

次の場合は、位置によるソートが役立ちます。

- selectリストの式が長い場合に並べ替えを行うには、式全体を繰り返すかわりにORDER BY句で位置を指定できます。

- UNION、INTERSECT、MINUSまたはUNION ALLなどの集合演算子を含む複合問合せの場合、ORDER BY句では明示的な式のかわりに位置または別名を指定する必要があります。また、ORDER BY句は最後のコンポーネント問合せでのみ使用できます。ORDER BY句は、複合問合せ全体で返されたすべての行の並べ替えを行います。

Oracle CEPでORDER BY句の値がソートされるメカニズムはJavaロケールで指定されます。

18.2.10 問合せ結果の差分の検出

DIFFERENCE USING句を使用すると、問合せのIStreamまたはDStreamの差分を簡単に検出できます。

using_clause::=

(usinglist::=)

例18-9のような問合せがあるとします。

例18-9 DIFFERENCE USING句

<query id="q0">
ISTREAM (
SELECT c1 FROM S [RANGE 1 NANOSECONDS]
)    DIFFERENCE USING (c1)
</query>

表18-1に、この問合せのサンプル入力を示します。リレーション列にはリレーションS [RANGE 1 NANOSECONDS]の内容を示し、出力列にはDIFFERENCE USINGを適用後の問合せ結果を示します。この句を使用すると、IStream出力の差分のみを簡単に検出できます。

表18-1 DIFFERENCE USING句のIStreamへの作用

入力

リレーション

出力

1000:    +5

{5}

+5

1000:    +6

{5, 6}

+6

1000:    +7

{5, 6, 7}

+7

1001:    +5

{5, 6, 7, 5}

1001:    +6

{5, 6, 7, 5, 6}

1001:    +7

{5, 6, 7, 5, 6, 7}

1001:    +8

{5, 6, 7, 5, 6, 7, 8}

+8

1002:    +5

{5, 6, 7, 5, 6, 7, 8, 5}

1003:    -5

{5, 6, 7, 5, 6, 7, 8}

1003:    -5

{5, 6, 7, 6, 7, 8}

1003:    -5

{6, 7, 6, 7, 8}

1003:    -6

{6, 7, 7, 8}

1003:    -6

{7, 7, 8}

1003:    -7

{7, 8}

1003:    -7

{8}

1003:    -8

{}

1004:    +5

{5}

+5

DIFFERENCE USING句でusinglistを指定する場合、次の項目で列を指定できます。

- 属性名: 属性名で選択する場合に、このオプションを使用します。
例18-10は、DIFFERENCE USING句のusinglistの属性名c1を示しています。

- 別名: 別名が指定されている式の結果を含める場合に、このオプションを使用します。
例18-10は、DIFFERENCE USING句のusinglistの別名logvalを示しています。

- 位置: 別名が指定されていない式の結果を含める場合に、このオプションを使用します。
位置は、左から右に読み取る、1で始まる正の整数の、定数として指定します。

例18-10では、位置(3)によって、DIFFERENCE USING句のusinglistの式の結果funct(c2, c3)を示しています。

例18-10 DIFFERENCE USING句でのusinglistの指定

<query id="q1">
ISTREAM (
SELECT c1, log(c4) as logval, funct(c2, c3) FROM S [RANGE 1 NANOSECONDS]
)    DIFFERENCE USING (c1, logval, 3)
</query>

DIFFERENCE USING句は、IStream演算子とDStream演算子の両方で使用できます。

詳細は、以下を参照してください。

- using_clause::=

- 「リレーションからストリームへのIStream演算子」

- 「リレーションからストリームへのDStream演算子」

18.2.11 パラメータ化された問合せ

Oracle CQL問合せをパラメータ化し、:n文字列をプレースホルダーとして使用して、実行時にパラメータ値をバインドできます。ここで、nは、params要素内の置換値の位置に相当する正の整数です。

注意:

ビューをパラメータ化することはできません。

例18-11に、パラメータ化されたOracle CQL問合せを示します。

例18-11 パラメータ化されたOracle CQL問合せ

<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
<processor>
<name>myProcessor</name>
<rules>
<query id="MarketRule"><![CDATA[
SELECT symbol, AVG(price) AS average, :1 AS market
FROM StockTick [RANGE 5 SECONDS]
WHERE symbol = :2
]]></query>
</rules>
<bindings>
<binding id="MarketRule">
<params id="nasORCL">NASDAQ, ORCL</params>
<params id="nyJPM">NYSE, JPM</params>
<params id="nyWFC">NYSE, WFC</params>
</binding>
</bindings>
</processor>
<processor>
<name>summarizeResults</name>
<rules>
<query id="SummarizeResultsRule"><![CDATA[
select
crossRate1 || crossRate2 as crossRatePair,
count(*) as totalCount,
:1 as averageInternalPrice
from CrossRateStream
group by crossRate1,crossRate2
having :2
]]></query>
</rules>
<bindings>
<binding id="SummarizeResultsRule">
<params id="avgcount">avg(internalPrice), count(*) > 0</params>
</binding>
</bindings>
</processor>
</n1:config>

この例では、以下を想定しています。

- MarketRule問合せでは、SELECT内の3番目の項とWHERE句内のsymbolの値の2つのパラメータが指定されます。

- SummarizeResultsRule問合せでは、SELECT内の3番目の項とHAVING句の値の2つのパラメータが指定されます。

この項の内容は、次のとおりです。

- 18.2.11.1項「Oracle CQL文内のパラメータ化された問合せ」

- 18.2.11.2項「bindings要素」

- 18.2.11.3項「実行時の問合せのネーミング」

- 18.2.11.4項「パラメータ値の表記規則」

- 18.2.11.5項「実行時にパラメータ化された問合せ」

- 18.2.11.6項「プログラム的なパラメータの置換」

18.2.11.1 Oracle CQL文内のパラメータ化された問合せ

Oracle CQL文の中で算術式またはStringリテラルが有効な任意の場所に、プレースホルダーを指定できます。例:

- SELECTリストの項目

- WHERE句の記述

- WINDOWコンストラクト(RANGE、SLIDE、ROWSおよびPARTITION BYなど)

- PATTERN期間句

詳細は、以下を参照してください。

- "arith_expr"

- "Literals"

18.2.11.2 bindings要素

パラメータ値は、bindings要素によって包含されます。processorごとに1つのbindings要素がある場合があります。

各パラメータ化された問合せについて、bindings要素に、問合せと同じidのbinding要素が含まれている必要があります。

binding要素には、1つ以上のparams要素が含まれている必要があります。各params要素には、一意のid、および対応する問合せ内のプレースホルダー文字(:n)の数と等しいパラメータ値のカンマ区切りのリストが含まれている必要があります。

パラメータ値の順序は、:1は最初のパラメータ値、:2は2番目のパラメータ値などというように、パラメータ化された問合せ内のプレースホルダー文字(:n)に相当します。プレースホルダー文字(:n)は任意の順序で使用できます。つまり、:1は、問合せ内で:2の前か後の最初のパラメータ値に相当します。1つのプレースホルダーの番号は問合せ内で1回のみ使用できます。

詳細は、以下を参照してください。

- 18.2.11.4項「パラメータ値の表記規則」

- 18.2.11.5項「実行時にパラメータ化された問合せ」

18.2.11.3 実行時の問合せのネーミング

バインディングによってパラメータ化された問合せがインスタンス化される際、Oracle CEPでは、queryId_paramIdという名前の問合せが実行時に作成されます。たとえば例18-11に示すように、MarketRuleバインディングによってインスタンス化される最初の問合せの実行時の名前はMarketRule_nasORCLになります。

実行時のネーミングの競合を回避するため、問合せのIDおよびパラメータIDの組合せが一意であることを確認してください。

18.2.11.4 パラメータ値の表記規則

params要素には、一意のid、および対応する問合せ内のプレースホルダー文字(:n)の数と等しいパラメータ値のカンマ区切りのリストが含まれている必要があります。

表18-2 パラメータ化された問合せのパラメータ値の表記規則

規則

例

置換値

プリミティブ・タイプ・リテラル

<params id="p1">NASDAQ, 200.0</params>

:1 = NASDAQ

:2 = 200.0

Oracle CQLフラグメント

<params id="p1">count(*), avg(val)</params>

:1 = count(*)

:2 = avg(val)

引用符

<params id="p1">'alert', "Seattle, WA", 'fun' || "house", one "two" 3</params>

:1 = 'alert'

:2 = "Seattle, WA"

:3 = 'fun' || "house"

:4 = one "two" 3

Oracle CQL問合せでは、一重または二重引用符内のプレースホルダーはStringリテラルです。次の問合せはパラメータ化された問合せではありません。

SELECT ":1" as symbol, price FROM StockTick [RANGE 5 SECONDS]

Oracle CEPでは、この問合せはStringリテラル":1"を別名symbolに割り当てるものとして解析されます。この問合せをパラメータ化された問合せにするには、次を使用します。

SELECT :1 as symbol, price FROM StockTick [RANGE :2 SECONDS]

さらに、次のようにparams要素を定義します。

<params id="p1">"ORCL", 5</params>

パラメータ値(ORCL)にはカンマは含まれないので引用符は必要ありません。paramsは次のように指定できます。

<params id="p1">ORCL, 5</params>

ただし、パラメータ値にカンマが含まれる場合は、パラメータ値を引用符で囲む必要があります。次のようなパラメータ化された問合せがあるとします。

SELECT :1 = cityAndState AS cityOfInterest FROM channel1 [RANGE :2 SECONDS]

ここで、cityAndStateには、"Seattle, WA"または"Ottawa, ON"などの値が含まれます。この場合、params要素を次のように指定する必要があります。

<params id="p1">"Seattle, WA", 5</params>
<params id="p1">"Ottawa, ON", 5</params>

カンマは、文字列値を示す引用符で囲まれたパラメータ値内でのみ使用できます。カンマは、引用符で囲まれていないパラメータ値では使用できません。例:

"Seattle, WA"は、カンマが文字列の一部なので有効です。

PARTITION BY fromRate,toRate ROWS 10は無効です。かわりに次の2つのパラメータを作成します。

PARTITION BY fromRate ROWS 10
PARTITION BY toRate ROWS 10

18.2.11.5実行時にパラメータ化された問合せ

各params要素により、新しいパラメータを使用して新しいOracle CQL問合せが効率的に実行されます。ルールの実行時に、Oracle CQLはパラメータ値を左から右に向かってプレースホルダー文字に置換します。例18-11は、例18-12で示されている問合せと効率よく同等になっています。

例18-12 実行時に同等な問合せ

SELECT symbol, AVG(price) AS average, NASDAQ AS market
FROM StockTick [RANGE 5 SECONDS]
WHERE symbol = ORCL

SELECT symbol, AVG(price) AS average, NYSE AS market
FROM StockTick [RANGE 5 SECONDS]
WHERE symbol = JPM

SELECT symbol, AVG(price) AS average, NYSE AS market
FROM StockTick [RANGE 5 SECONDS]
WHERE symbol = WFC

18.2.11.6プログラム的なパラメータの置換

CQLProcessorMBean.replaceAllBoundParameters()メソッドを使用して、パラメータ化された問合せ内のパラメータをプログラム的に置換する場合、メソッドによって置換されない既存のパラメータはすべて問合せから自動的に削除されます。

18.3 ビュー

問合せは、データ・ストリームおよびリレーションからの情報を抽出する主な手段です。ビューは、ストリームまたはリレーションでの代替の選択項目を表し、副問合せの作成に使用できます。

ビューは、同じプロセッサにある問合せからのみアクセス可能で、この範囲を越えて公開することはできません。

ビューの定義で、任意の問合せタイプを指定できます。詳細は、18.2項「問合せ」を参照してください。

view文の詳細は、「View」を参照してください。

例18-13では、問合せBBAQueryはビューMAXBIDMINASKからの選択を行い、このビューはBIDMAXなどの他のビューからの選択を行い、それらのビューはさらに他のビューからの選択を行います。最終的に、lastEventsなどのビューが実際のイベント・ソースであるfilteredStreamからの選択を行います。これらの各ビューは、1つ以上の基本ストリームから派生した個別のストリームを表しています。

例18-13 副問合せのかわりとしてのビューの使用

<view id="lastEvents" schema="cusip bid srcId bidQty ask askQty seq"><![CDATA[
select cusip, bid, srcId, bidQty, ask, askQty, seq
from filteredStream[partition by srcId, cusip rows 1]
]]></view>
<view id="bidask" schema="cusip bid ask"><![CDATA[
select cusip, max(bid), min(ask)
from lastEvents
group by cusip
]]></view>
<view id="bid" schema="cusip bid seq"><![CDATA[
select ba.cusip as cusip, ba.bid as bid, e.seq
from bidask as ba, lastEvents as e
WHERE e.cusip = ba.cusip AND e.bid = ba.bid
]]></view>
<view id="bid1" schema="cusip maxseq"><![CDATA[
select b.cusip, max(seq) as maxseq
from bid as b
group by b.cusip
]]></view>
<view id="BIDMAX" schema="cusip seq srcId bid bidQty"><![CDATA[
select e.cusip, e.seq, e.srcId, e.bid, e.bidQty
from bid1 as b, lastEvents as e
where (e.seq = b.maxseq)
]]></view>
<view id="ask" schema="cusip ask seq"><![CDATA[
select ba.cusip as cusip, ba.ask as ask, e.seq
from bidask as ba, lastEvents as e
WHERE e.cusip = ba.cusip AND e.ask = ba.ask
]]></view>
<view id="ask1" schema="cusip maxseq"><![CDATA[
select a.cusip, max(seq) as maxseq
from ask as a
group by a.cusip
]]></view>
<view id="ASKMIN" schema="cusip seq srcId ask askQty"><![CDATA[
select e.cusip, e.seq, e.srcId, e.ask, e.askQty
from ask1 as a, lastEvents as e
where (e.seq = a.maxseq)
]]></view>
<view id="MAXBIDMINASK" schema="cusip bidseq bidSrcId bid askseq askSrcId ask bidQty askQty"><![CDATA[
select bid.cusip, bid.seq, bid.srcId as bidSrcId, bid.bid, ask.seq, ask.srcId as askSrcId, ask.ask, bid.bidQty, ask.askQty
from BIDMAX as bid, ASKMIN as ask
where bid.cusip = ask.cusip
]]></view>
<query id="BBAQuery"><![CDATA[
ISTREAM(select bba.cusip, bba.bidseq, bba.bidSrcId, bba.bid, bba.askseq, bba.askSrcId, bba.ask, bba.bidQty, bba.askQty, "BBAStrategy" as intermediateStrategy, p.seq as correlationId, 1 as priority
from MAXBIDMINASK as bba, filteredStream[rows 1] as p where bba.cusip = p.cusip)
]]></query>

この方法を使用して、副問合せと同様の結果を得ることができます。ただし、ビューを使用することで、問合せの複雑さをより柔軟に制御でき、名前によって他の問合せでビューを再利用できます。

18.3.1 ビューと結合

共通するストリーム要素名を持つ複数のビューで結合を作成する場合は、ストリームの名前を使用してストリーム要素名を修飾する必要があります。例18-14は、ビュー名を使用して、BIDMAXビューのseqストリーム要素とASKMINビューのseqストリーム要素を区別する方法を示します。

例18-14 ビュー名を使用した同名のストリーム要素の区別

<view id="MAXBIDMINASK" schema="cusip bidseq bidSrcId bid askseq askSrcId ask bidQty askQty"><![CDATA[
select bid.cusip, bid.seq, bid.srcId as bidSrcId, bid.bid, ask.seq, ask.srcId as askSrcId, ask.ask, bid.bidQty, ask.askQty
from BIDMAX as bid, ASKMIN as ask
where bid.cusip = ask.cusip
]]></view>

それ以外の場合、完全修飾されたストリーム要素名はオプションです。ただし、ストリーム要素は常に明示的に参照することをお薦めします。完全修飾されたストリーム要素名によって、多くの場合Oracle CEPでの処理が軽減されます。

詳細は、18.4項「結合」を参照してください。

18.3.2 ビューとスキーマ

イベント属性名のスペース区切りリストを使用して、ビューのオプションのスキーマを定義できます(例18-15を参照)。

例18-15 イベント属性名のみを持つスキーマ

<view id="MAXBIDMINASK" schema="cusip bidseq"><![CDATA[
select ...
]]></view>

18.4 結合

結合とは、複数のストリーム、ビューまたはリレーションからの行を結合する問合せです。Oracle CEPでは、問合せのFROM句に複数のストリームがある場合は常に結合が行われます。問合せのselectリストでは、それらの任意のストリームから任意のストリーム要素を選択できます。いずれか2つのストリームで共通するストリーム要素名がある場合は、ストリーム名を使用して、問合せ全体を通じてそれらのストリーム要素に対するすべての参照を修飾し、曖昧さを避ける必要があります。

共通するストリーム要素名を持つ複数のストリーム、ビューまたはリレーションで結合を作成する場合は、各ストリーム、ビューまたはリレーションの名前を使用して、ストリーム要素名を修飾する必要があります。例18-16は、ストリーム名を使用して、OrderStreamストリームのcustomerIDストリーム要素と CustomerStreamストリームのcustomerIDストリーム要素を区別する方法を示します。

例18-16 完全修飾されたストリーム要素名

<query id="q0"><![CDATA[
select * from OrderStream[range 5] as orders, CustomerStream[range 3] as customers where
orders.customerID = customers.customerID
]]></query>

それ以外の場合、完全修飾されたストリーム要素名はオプションです。ただし、ストリーム名の参照を常に明示的に修飾することをお薦めします。完全修飾されたストリーム要素名によって、多くの場合Oracle CEPでの処理が軽減されます。

Oracle CEPでは、次の種類の結合がサポートされています。

- 内部結合

- 外部結合

注意:

キャッシュに対して結合を行う場合は、18.5.1項「キャッシュに対する結合の作成」に説明されている追加の問合せの制限に従う必要があります。

18.4.1 内部結合

デフォルトでは、Oracle CEPは内部結合(単純結合とも呼ばれる)を実行します。これは、複数のストリームから結合条件を満たすストリーム要素のみを返す結合です。

例18-17は、スキーマ(c1 integer, c2 float)を持つストリームS0とスキーマ(c1 integer, c2 float)を持つストリームS1の間の内部結合を使用する問合せq4を作成する方法を示します。

例18-17 内部結合

<query id="q4"><![CDATA[
select *
from
S0[range 5] as a,
S1[range 3] as b
where
a.c1+a.c2+4.9 = b.c1 + 10
]]></query>

18.4.2 外部結合

外部結合は、単純結合の結果を拡張します。外部結合では、結合条件を満たすすべての行に加えて、他の表に結合条件を満たす行が含まれていなくても表の一部またはすべての行が返されます。

外部結合は、LEFTまたはRIGHT OUTER JOIN ... ON構文を使用して、問合せのFROMで指定します。

from_clause::=

(non_mt_relation_list::=、relation_variable::=、non_mt_cond_list::=)

例18-18は、スキーマ(c1 integer, c2 float)を持つストリームS0とスキーマ(c1 integer, c2 float)を持つストリームS1の間の左外部結合を使用する問合せq5を作成する方法を示します。

例18-18 外部結合

<query id="q5"><![CDATA[
SELECT a.c1+b.c1
FROM S0[range 5] AS a LEFT OUTER JOIN S1[range 3] AS b ON b.c2 = a.c2
WHERE b.c2 > 3
]]></query>

ON句を使用して結合条件を指定します。これにより、WHERE句の検索条件またはフィルタ条件とは別個に結合条件を指定できます。

次の種類の外部結合を実行できます。

- 18.4.2.1項「左外部結合」

- 18.4.2.2項「右外部結合」

- 18.4.2.3項「外部結合の見直し」

18.4.2.1 左外部結合

ストリームAおよびBの外部結合を実行し、Aのすべてのストリーム要素を返す(左外部結合の)問合せを作成するには、例18-19に示すように、FROM句でLEFT OUTER JOIN構文を使用します。Bに一致するストリーム要素がないAのすべてのストリーム要素については、Oracle CEPによってBのストリーム要素を含むselectリスト式でnullが返されます。

例18-19 左外部結合

<query id="q5"><![CDATA[
SELECT a.c1+b.c1
FROM S0[range 5] AS a LEFT OUTER JOIN S1[range 3] AS b  ON b.c2 = a.c2
WHERE b.c2 > 3
]]></query>

18.4.2.2 右外部結合

ストリームAおよびBの外部結合を実行し、Bのすべてのストリーム要素を返す(右外部結合の)問合せを作成するには、例18-20に示すように、FROM句でRIGHT OUTER JOIN構文を使用します。Aに一致するストリーム要素がないBのすべてのストリーム要素については、Oracle CEPによってAのストリーム要素を含むselectリスト式でnullが返されます。

例18-20 右外部結合

<query id="q5"><![CDATA[
SELECT a.c1+b.c1
FROM S0[range 5] AS a RIGHT OUTER JOIN S1[range 3] AS b ON b.c2 = a.c2
WHERE b.c2 > 3
]]></query>

18.4.2.3 外部結合の見直し

前の外部結合を参照する、または見直す外部結合を作成できます(例18-21を参照)。

例18-21 外部結合の見直し

<query id="q5"><![CDATA[
SELECT R1.c1+R2.c1
FROM S0[rows 2] as R1 LEFT OUTER JOIN S1[rows 2] as R2 on R1.c2 = R2.c2 RIGHT OUTER JOIN S2[rows 2] as R3 on R2.c2 = R3.c22
WHERE R2.c2 > 3
]]></query>

18.5 Oracle CQL問合せとOracle CEPサーバー・キャッシュ

Oracle CQL文またはユーザー定義関数からOracle CEPキャッシュにアクセスできます。

この項の内容は、次のとおりです。

- 18.5.1項「キャッシュに対する結合の作成」

詳細は、以下を参照してください。

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CEPキャッシュの構成に関する項

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CQL文からのキャッシュへのアクセスに関する項

- 『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CQLユーザー定義関数からのキャッシュへのアクセスに関する項

- 『Oracle Fusion Middleware Oracle Complex Event Processingスタート・ガイド』のOracle Continuous Query Language (CQL)の例に関する項

18.5.1 キャッシュに対する結合の作成

キャッシュに対して結合を行うOracle CQL問合せを作成する場合、次の制限に従う必要があります。

- 18.5.1.1項「最初のキャッシュ・キーおよび単純な同値」

- 18.5.1.2項「キャッシュ・キーで算術演算は使用できない」

- 18.5.1.3項「全体スキャンは使用できない」

- 18.5.1.4項「複数の条件と非等値」

詳細は、18.4項「結合」を参照してください。

18.5.1.1 最初のキャッシュ・キーおよび単純な同値

キャッシュ・キー属性に対する比較演算を持つ複合述語の(左から)1番目の副句には、単純な同値述語しか使用できません。

述語がキャッシュ属性を参照する(左から)1番目の副句ではないため、次の述語は無効です。

... S.c1 = 5 AND CACHE.C2 = S.C2 AND CACHE.C1 = S.C1 ...

しかし、次の述語は有効です。

... S.c1 = 5 AND CACHE.C1 = S.C1 AND CACHE.C2 = S.C2 ...

18.5.1.2 キャッシュ・キーで算術演算は使用できない

副句で、キャッシュ・キー属性に対する算術演算は使用できません。

キャッシュ・キー属性では算術演算を使用できないため、次の述語は無効です。

... CACHE.C1 + 5 = S.C1 AND CACHE.C2 = S.C2 ...

18.5.1.3 全体スキャンは使用できない

複合述語で、キャッシュの全体スキャンは使用できません。

キャッシュのキャッシュ・キーがC1であるとします。

次の述語は無効です。比較でキャッシュ・キー属性が使用されておらず、キャッシュ全体のスキャンが必要ですが、全体スキャンは許可されていないためです。

... CACHE.C2 = S.C1 ...

... CACHE.C2 > S.C1 ...

... S.C1 = S.C2 ...

... S.C1 = CACHE.C2 AND S.C2 = CACHE.C2 ...

次の述語も無効です。比較でキャッシュ・キー属性が使用されていますが、キャッシュ全体のスキャンが必要な非等値演算が使用されており、全体スキャンは許可されていないためです。

... CACHE.C1 != S.C1 ...

... CACHE.C1 > 5 ...

... CACHE.C1 + 5 = S.C1 ...

次の述語も無効です。比較でキャッシュ・キー属性が使用されていますが、キャッシュ属性を参照している最初の副句がキャッシュ・キー属性(この例ではC1)を参照していません。すなわち、最初の副句はキャッシュ・キーではないC2を参照しており、キャッシュ・キー比較副句(CACHE.C1 = S.C1)が非キー比較副句の後に置かれています。

... CACHE.C2 = S.C2 AND CACHE.C1 = S.C1 ...

18.5.1.4 複数の条件と非等値

複数の条件、非等値(またはその両方)を使用するには、最初の副句をキャッシュ・キー値を比較する同値述語にし、残りの述語副句を1つのAND演算子で区切って指定する必要があります。

次に、有効な述語を示します。

... S.c1 = 5 AND CACHE.C1 = S.C1 AND CACHE.C2 > S.C2 ...

... CACHE.C1 = S.C1 AND CACHE.C2 = S.C2 ...

... S.c1 = 5 AND CACHE.C1 = S.C1 AND CACHE.C2 != S.C2 ...

18.6 Oracle CQL問合せとリレーショナル・データベース表

リレーショナル・データベース表には、次を使用してOracle CQL問合せからアクセスできます。

- 表ソース: 表ソースを使用して、NOWウィンドウのあるストリームのみを単一のデータベース表のみに結合できます。

注意:

表ソースの変更とストリーム・データはすぐには連係されないため、表ソースはNowウィンドウを使用してイベント・ストリームにのみ結合でき、また単一のデータベース表にのみ結合できます。詳細は、「S[now]「を参照してください。

任意の複雑なSQL問合せおよび複数の表をOracle CQL問合せに統合する場合は、かわりにOracle JDBCデータ・カートリッジを使用することを検討してください。

詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing開発者ガイド for Eclipse』のOracle CQLプロセッサの表ソースの構成に関する項を参照してください。

- Oracle JDBCデータ・カートリッジ: Oracle JDBCデータ・カートリッジを使用して、任意の複雑なSQL問合せおよび複数の表とデータソースをOracle CQL問合せに統合できます。
詳細は、17.1項「Oracle CEP JDBCデータ・カートリッジについて」を参照してください。

注意:

Oracle JDBCデータ・カートリッジを使用して、Oracle CQL文からリレーショナル・データベース表にアクセスすることをお薦めします。

いずれの場合でも、データソースはOracle CEPサーバーconfig.xmlファイルで定義する必要があります。詳細は、『Oracle Fusion Middleware Oracle Complex Event Processing管理者ガイド』のリレーショナル・データベースへのアクセスの構成に関する項を参照してください。

Oracle CEPのリレーション・データベース表イベント・ソースはプル・データ・ソースです。つまり、Oracle CEPは、データ・ストリーム上でのイベントの到着時にイベント・ソースをポーリングします。

18.7 Oracle CQL問合せとOracleデータ・カートリッジ

Oracle CQL問合せ内のOracle CQLデータ・カートリッジ・タイプには、Oracle CQLネイティブ・タイプの場合と同様の方法でアクセスできます。

詳細は、以下を参照してください。

- 14.2項「Oracle CQLデータ・カートリッジの型」

- 第15章「Oracle Javaデータ・カートリッジ」

- 第16章「Oracle Spatial」

- 第17章「Oracle CEP JDBCデータ・カートリッジ」

19 MATCH_RECOGNIZEを使用したパターン認識

この章では、Oracle Continuous Query Language (Oracle CQL)のMATCH_RECOGNIZE句に関するリファレンスと使用情報を提供します。この句とその副句は、Oracle CQL問合せでパターン認識を実行します。

- 19.1項「MATCH_RECOGNIZEを使用したパターン認識について」

- 19.2項「MEASURES句」

- 19.3項「PATTERN句」

- 19.4項「DEFINE句」

- 19.5項「PARTITION BY句」

- 19.6項「ORDER BY句」

- 19.7項「ALL MATCHES句」

- 19.8項「WITHIN句」

- 19.9項「DURATION句」

- 19.10項「INCLUDE TIMER EVENTS句」

- 19.11項「SUBSET句」

- 19.12項「MATCH_RECOGNIZEの例」

19.1 MATCH_RECOGNIZEを使用したパターン認識について

例19-1に示すように、MATCH_RECOGNIZE句によってOracle CQL問合せのパターン認識が実行されます。この問合せにより、DEFINE句の条件についてPATTERN句の正規表現を満たすイベント(タプル)のMEASURES句の値がエクスポートされます(SELECT内への包含が可能になります)。

例19-1 MATCH_RECOGNIZEとのパターン・マッチング

<query id="detectPerish"><![CDATA[
select its.badItemId
from tkrfid_ItemTempStream
MATCH_RECOGNIZE (
PARTITION BY itemId
MEASURES A.itemId as badItemId
PATTERN (A B* C)
DEFINE
A  AS  (A.temp >= 25),
B  AS  ((B.temp >= 25) and (to_timestamp(B.element_time) - to_timestamp(A.element_time) < INTERVAL "0 00:00:05.00" DAY TO SECOND)),
C  AS  (to_timestamp(C.element_time) - to_timestamp(A.element_time) >= INTERVAL "0 00:00:05.00" DAY TO SECOND)
) as its
]]></query>

pattern_recognition_clause::=

(pattern_partition_clause::=、pattern_measures_clause::=、pattern_def_dur_clause::=)

pattern_def_dur_clause::=

(pattern_clause::=、pattern_skip_match_clause::=、pattern_definition_clause::=、duration_clause::=、subset_clause::=)

MATCH_RECOGNIZEを使用して、着信イベントの属性の条件を定義し、相関変数と呼ばれるidentifiersを使用して、これらの条件を識別します。例19-1では、相関変数A、BおよびCが定義されています。入力ストリームの連続するイベントのシーケンスがこれらの条件を満たす場合は、パターンが構成されます。

MATCH_RECOGNIZE問合せの出力は常にストリームです。

主なMATCH_RECOGNIZE副句には次のものがあります。

- MEASURES: 指定するパターンと一致するイベントの属性値をエクスポートします(SELECT内への包含を可能にする)。
19.2項「MEASURES句」を参照してください。

- PATTERN: 1つ以上の相関変数に対し、正規表現として一致するパターンを指定します。
19.3項「PATTERN句」を参照してください。

- DEFINE: 1つ以上の相関変数に関する条件を指定します。
19.4項「DEFINE句」を参照してください。

パターン認識を調整するには、次のようなオプションのMATCH_RECOGNIZE副句を使用できます。

- 19.5項「PARTITION BY句」

- 19.6項「ORDER BY句」

- 19.7項「ALL MATCHES句」

- 19.8項「WITHIN句」

- 19.9項「DURATION句」

- 19.10項「INCLUDE TIMER EVENTS句」

- 19.11項「SUBSET句」

詳細は、以下を参照してください。

- 19.1.1項「MATCH_RECOGNIZE句とWHERE句」

- 19.1.2項「シングルトンおよびグループ一致の参照」

- 19.1.3項「集計の参照」

- 19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」

- 19.1.3.6項「firstとlastの使用」

- 19.1.4項「prevの使用」

- 19.12項「MATCH_RECOGNIZEの例」

19.1.1 MATCH_RECOGNIZE句とWHERE句

Oracle CQLでは(SQLと同様)、FROM句はWHERE句の前に評価されます。

次のOracle CQL問合せがあるとします。

SELECT ... FROM S MATCH_RECOGNIZE ( .... ) as T WHERE ...

この問合せでは、S MATCH_RECOGNIZE ( .... ) as Tは、FROM句内の副問合せと同様、最初でWHERE句の前に評価されます。

このため、MATCH_RECOGNIZE句とWHERE句の両方が同じOracle CQL問合せ内で使用されることはほとんどありません。かわりに、通常、ビューを使用して必要なWHERE句をストリームに適用し、MATCH_RECOGNIZE句を適用する問合せ内のビューから選択します。

例19-2では、それぞれWHERE句をストリームSに適用して、必要なイベントのストリームを事前にフィルタ処理する、e1p1とe2p2という2つのビューが示されています。問合せqは、これらの2つのビューからいずれかを選択し、イベントのフィルタ処理済ストリーム上にMATCH_RECOGNIZEを適用します。

例19-2 MATCH_RECOGNIZE句とWHERE句

<view id="e1p1">
SELECT * FROM S WHERE eventName = 'E1' and path = 'P1' and statName = 'countValue'
</view>
<view id="e2p2">
SELECT * FROM S WHERE eventName = 'E2' and path = 'P2' and statName = 'countValue'
</view>

<query id="q">
SELECT
T.e1p1Stat as e1p1Stat, T.e2p2Stat as e2p2Stat
FROM
e1p1, e2p2
MATCH_RECOGNIZE(
ALL MATCHES
PATTERN(A+)
DURATION 60 MINUTES
DEFINE
A as (A.e1p1Stat < 1000 and A.e2p2Stat > 2000 and count(A) > 3)
) as T
</query>

詳細は、opt_where_clause::=を参照してください。

19.1.2 シングルトンおよびグループ一致の参照

MATCH_RECOGNIZE句では、次の一致タイプが識別されます。

- シングルトン: パターンで1回のみ発生し、SUBSETで定義されず、二者択一の有効範囲でなく、パターン量指定子で量が指定されない場合、相関変数はシングルトンです。
このような相関変数への参照では、単一のイベントが参照されます。

- グループ: パターンで2回以上発生し、SUBSETで定義され、二者択一の有効範囲内であるか、またはパターン量指定子で量が指定される場合、相関変数はグループです。
このような相関変数への参照では、イベント・グループが参照されます。

MEASURES句とDEFINE句内のシングルトンおよびグループの相関変数を参照する場合、次のルールに従います。

- シングルトンの相関変数の場合、集計ではなく個別のイベント属性のみを参照できます。

- グループの相関変数の場合は、次のルールがあります。

- 個別のイベント属性を参照する場合は、その相関変数と一致する最後のイベントの値が返されます。
相関変数とまだ一致していない場合、NULLが返されます。count(A.*)については、相関変数Aとまだ一致していない場合、0が返されます。

相関変数が、同じ変数の定義内で参照される場合(DEFINE A as A.balance > 1000など)、現在のイベントの値が返されます。

- 集計を参照する場合は、これまでにその相関変数と一致したすべてのイベントに対して集計が実行されます。

詳細は、以下を参照してください。

- 19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」

- 19.3.1項「パターン量指定子と正規表現」

- 19.4.2項「DEFINE句内の属性の参照」

19.1.3 集計の参照

MATCH_RECOGNIZE問合せのMEASURESおよびDEFINE句で、任意の組込み、Coltまたはユーザー定義の集計関数を使用できます。

集計関数を使用する場合、次を考慮してください。

- 19.1.3.1項「実行中集計と最終集計」

- 19.1.3.2項「同一の相関変数での操作」

- 19.1.3.3項「まだ一致していない変数の参照」

- 19.1.3.4項「相関変数によって修飾されない参照属性」

詳細は、以下を参照してください。

- 19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」

- 19.1.3.6項「firstとlastの使用」

- 9.1項「Oracle CQLの組込みの集計関数の概要」

- 11.1項「Oracle CQLの組込みの集計Colt関数の概要」

- 13.1.1.2項「ユーザー定義集計関数」

- 19.2項「MEASURES句」

- 19.4項「DEFINE句」

19.1.3.1 実行中集計と最終集計

DEFINE句で、相関変数Xに基づくすべての集計関数が集計を実行します。つまり、集計には、現在の一致まで含め、Xのすべての前の一致が含まれます。相関変数Xがそれまでに完全に一致している場合、集計は最終となり、それ以外の場合は実行中となります。

MEASURES句では、一致が見つかった後で評価され、すべての集計が最終的に演算されるので、すべての集計が最終となります。

SUBSET句を使用する場合は、例19-3に示すように、誤って暗黙的に実行中集計を行う可能性があることに注意してください。

例19-3 暗黙的な実行中集計

...
PATTERN (X+ Y+)
SUBSET Z = (X, Y)
DEFINE
X AS X.price > 100,
Y AS sum(Z.price) < 1000
...

相関変数ZにはZが含まれるので、Yの定義にはY上の実行中集計が含まれます。

詳細は、以下を参照してください。

- 19.2項「MEASURES句」

- 19.4項「DEFINE句」

- 19.11項「SUBSET句」

19.1.3.2 同一の相関変数での操作

MEASURESとDEFINE句の両方で、同一の相関変数の属性にのみ集計関数を適用できます。

たとえば、例19-4のような集計関数correlationの使用は無効です。

例19-4 集計関数の無効な使用

...
MEASURES xycorr AS correlation(X.price, Y.price)
PATTERN (X+ Y+)
DEFINE
X AS X.price <= 10,
Y AS Y.price > 10
...

correlation集計関数は、複数の相関変数では機能しない場合があります。

19.1.3.3 まだ一致していない変数の参照

DEFINE句では、まだ一致していない相関変数を参照できます。ただし、その場合は注意してください。例19-5のような場合があるとします。

例19-5 まだ一致していない変数の参照: 無効

PATTERN (X+ Y+)
DEFINE
X AS count(Y.*) >= 3
Y AS Y.price > 10,

この構文は有効ですが、この例では、Xが一致した時点でYはまだ一致しておらず、Yは0であるので、パターンは一致しません。

希望の動作を実装する(「Yの価格の値が10よりも大きい場合に行で3回以上一致する」)には、例19-6に示すようにこのパターンを実装します。

例19-6 まだ一致していない変数の参照: 有効

PATTERN (Y+ X+)
DEFINE
Y AS Y.price > 10,
X AS count(Y.*) >= 3

詳細は、19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」を参照してください。

19.1.3.4 相関変数によって修飾されない参照属性

DEFINE句では、集計関数を相関変数によって未修飾のイベント属性に適用する場合、例19-7に示すように、集計は実行中集計です。

例19-7 相関変数によって修飾されない参照属性

PATTERN ((RISE FALL)+)
DEFINE
RISE AS count(RISE.*) = 1 or RISE.price > FALL.price,
FALL AS FALL.price < RISE.price and count(*) > 1000

この問合せでは、価格は可能な限り上下しますが、少なくとも1000の一致があるパターンが検出されます。

詳細は、以下を参照してください。

- 19.1.3.1項「実行中集計と最終集計」

- 19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」

19.1.3.5 *、identifier.*およびidentifier.attrのあるcountの使用

組込み集計関数countの構文は次のとおりです。

(arith_expr::=、attr::=、identifier::=)

表19-1に示すように、countの戻り値は引数によって異なります。

表19-1 count集計関数の戻り値

入力引数

戻り値

arith_expr

arith_exprがNULLでない場合のタプルの数。

*

重複とnullを含む、すべてのタプルの数。

identifier.*

相関変数identifierと一致する、重複とnullを含む、すべてのタプルの数。

次の点に注意してください。

- count(A.*) = 1は、Aと一致する最初のイベントに対してtrueです。

- count(A.*) = 0は、Aとまだ一致していない場合にtrueです。

identifier.attr

attrがNULLでない場合に、相関変数identifierと一致するタプルの数。

例19-8のような場合があるとします。Sのスキーマに属性accountとbalanceが含まれると想定します。この問合せでは、60分間で3回以上受信されていない各accountのイベントが返されます。

例19-8 count(A.*)を使用したMATCH_RECOGNIZEの問合せ

select
T.account,
T.Atime
FROM S
MATCH_RECOGNIZE(
PARTITION BY account
MEASURES
A.account has account
A.ELEMENT_TIME as Atime
ALL MATCHES
INCLUDE TIMER EVENTS
PATTERN (A+)
DURATION 60 MINUTES
DEFINE
A AS count(A.*) < 3
) as T

PATTERN (A+)では、「Aと1回以上一致する」というパターンが指定されます。

DEFINE句では、次の条件が指定されます。

A AS count(A.*) < 3

Aのこの条件では、入力タプルにいずれの制限(A.balance > 1000など)も設定されません。PARTITION BY accountおよびDURATION 60 MINUTES句によってのみ制限が設定されます。DEFINE句では、A.*は「グループA+のすべての入力タプルと一致する」ことを意味します。このグループには、最初の入力タプルから60分間に着信した特定のaccountを持つ1つ以上の入力タプルが含まれます。count(A.*)はこのグループのイベントの合計数を返す実行中集計です。

DEFINE句では、次の条件が指定される場合、次のようになります。

A AS A.balance > 1000 and count(A.*) < 3

A.*は、まだ「グループA+のすべての入力タプルと一致する」ことを意味します。この場合、このグループには、最初の入力タプルおよびbalance > 1000のものから60分間に着信した特定のaccountを持つ1つ以上の入力タプルが含まれます。

対照的に、次のようになります。

- count(*)は、「重複およびnullを含む、すべてのタプルの数」を意味します。つまり、MATCH_RECOGNIZE句が満たされるかどうかにかかわらず、Sに着信したすべてのタプルの数です。

- count(A.balance)は、「balanceがNULLでない場合に相関変数Aと一致するすべてのタプルの数」を意味します。

詳細は、以下を参照してください。

- "count"

- 1.1.3.1.1項「問合せ開始時と空のリレーションの場合のRange、RowsおよびSlide」

- 19.1.2項「シングルトンおよびグループ一致の参照」

- 19.1.3項「集計の参照」

- 19.1.3.3項「まだ一致していない変数の参照」

- 19.1.3.4項「相関変数によって修飾されない参照属性」

19.1.3.6 firstとlastの使用

firstとlastの組込み集計関数を使用して、最初または最後に一致するイベントの各イベント属性にアクセスできます。

firstでは、ORDER BY句で定義された順序、またはデフォルトの順序で、最初に一致するグループの値が返されます。

lastでは、ORDER BY句で定義された順序、またはデフォルトの順序で、最後に一致するグループの値が返されます。

firstとlast関数では、変数の最初の一致の後のオフセット、および最後の一致の前のオフセットをそれぞれ示す、オプションのゼロ以上の定整数の引数(N)を使用できます。このオフセットを指定する場合、first関数では、最初の一致後のN番目に一致するイベントが返され、last関数では、最後の一致前のN番目に一致するイベントが返されます。オフセットが変数の一致範囲外である場合、firstとlast関数ではNULLが返されます。

詳細は、以下を参照してください。

- 「first」

- 「last」

- 19.1.3項「集計の参照」

- 19.6項「ORDER BY句」

19.1.4 prevの使用

prev組込み単一行関数を使用して、以前に一致したイベントのイベント属性にアクセスできます。以前に一致したイベントがない場合は、prev関数ではNULLが返されます。

prev関数では、以前の一致のオフセットを示す、オプションのゼロ以上の定整数の引数(N)を使用できます。このオフセットを指定する場合、prev関数では、現在の一致前のN番目に一致するイベントが返されます。以前に一致したイベントがない場合は、prev関数ではNULLが返されます。

prev関数をDEFINE句で使用する場合、この関数は現在定義済の相関変数のみにアクセスできます。

たとえば、例19-9の相関変数定義は有効です。

例19-9 prev関数の使用: 有効

Y AS Y.price < prev(Y.price, 2)

ただし、例19-10の相関変数定義は、相関変数Yの定義中、prev関数内の相関変数Xを参照するので無効です。

例19-10 prev関数の使用: 無効

Y AS Y.price < prev(X.price, 2)

詳細は、以下を参照してください。

- 「prev」

- 19.4項「DEFINE句」

19.2 MEASURES句

MEASURES句は、指定するパターンと一致するイベントの属性値をエクスポートします(SELECT内への包含を可能にする)。

パーティション属性、属性別の順序、シングルトン変数、グループ変数の集計、およびMATCH_RECOGNIZE句のソースであるストリームの属性の集計を参照する相関変数に対して式を指定できます。

相関変数によって属性値を修飾して、相関変数の条件と一致するイベントの属性の値をエクスポートします。たとえば、MEASURES句内で、次のようにA.c1はイベント属性c1の値を参照します。

- AがDEFINE句で指定されている場合、相関変数Aに対応する条件と最後に一致すたタプル内。

- AがDEFINE句内で指定されていない場合、最後に処理されたタプル内。
これは、AはDEFINE句内で指定されていない場合に、Aは常にTRUEと見なされるからです。このため、入力内のすべてのタプルが効率よくAと一致します。

SELECT文内には、MEASURES句で指定する属性のみを含めることができます。

pattern_measures_clause::=

(non_mt_measure_list::=)

non_mt_measure_list::=

(measure_column::=)

measure_column::=

(arith_expr::=、identifier::=)

例19-1で、pattern_measures_clauseは次のとおりです。

MEASURES
A.itemId as itemId

この項の内容は、次のとおりです。

- 19.2.1項「MEASURES句内の相関変数用の関数」

詳細は、以下を参照してください。

- 19.1.2項「シングルトンおよびグループ一致の参照」

- 19.1.3項「集計の参照」

- 19.4項「DEFINE句」

- 1.1.11項「関数」

19.2.1 MEASURES句内の相関変数用の関数

MEASURES句で、条件と一致するイベントの属性に単一行または集計関数を適用できます。

例19-11では、MEASURES句内の相関変数Z.c1にlast関数を適用できます。

例19-11 相関変数での関数の使用

<query id="tkpattern_q41"><![CDATA[
select
T.firstW, T.lastZ
from
tkpattern_S11
MATCH_RECOGNIZE (
MEASURES A.c1 as firstW, last(Z.c1) as lastZ
ALL MATCHES
PATTERN(A W+ X+ Y+ Z+)
DEFINE
W as W.c2 < prev(W.c2),
X as X.c2 > prev(X.c2),
Y as Y.c2 < prev(Y.c2),
Z as Z.c2 > prev(Z.c2)
) as T
]]></query>

例19-11のMEASURES句内の次の点に注意してください。

- A.c1では、次の理由により、最初の一致および問合せで処理される最初のイベント内のc1の値のみがエクスポートされます。

- AはDEFINE句で指定されていないので、常にtrueになります。

- Aにパターン量指定子がないので、1回のみ一致します。

- 組込み集計関数lastでは、PATTERN句が満たされるときにZと一致する最後のイベント内のc1の値がエクスポートされます。

詳細は、以下を参照してください。

- 19.1.3項「集計の参照」

- 19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」

- 19.1.3.6項「firstとlastの使用」

- 19.1.4項「prevの使用」

19.3 PATTERN句

PATTERN句は、1つ以上の相関変数に対し、正規表現として一致するパターンを指定します。

着信イベントは、指定された順序(左から右)でこれらの条件と一致する必要があります。

正規表現には、次のような相関変数を含むことができます。

- DEFINE句で定義される相関変数: 条件定義でTRUEに評価される場合にのみ、trueと見なされます。
19.4項「DEFINE句」を参照してください。

- DEFINE句で定義されていない相関変数: 常にTRUEと見なされ、すべての入力と一致します。

pattern_clause::=

(regexp::=、within_clause::=)

この項の内容は、次のとおりです。

- 19.3.1項「パターン量指定子と正規表現」

- 19.3.2項「PATTERN句内でのグループ化および二者択一」

詳細は、以下を参照してください。

- 19.12.1項「パターン検出」

- 19.12.2項「PARTITION BYを使用したパターン検出」

- 19.12.3項「集計を使用したパターン検出」

19.3.1 パターン量指定子と正規表現

相関変数およびパターン量指定子で構成される正規表現としてパターンを表します。

regexp::=

(correlation_name::=、pattern_quantifier::=)

correlation_name::=

(const_string::=)

pattern_quantifier::=

表19-2は、Oracle CQLでサポートされるパターン量指定子(pattern_quantifier::=))のリストです。

表19-2 MATCH_RECOGNIZEのパターン量指定子

最大限

最小限

説明

*

*?

0回以上

+

+?

1回以上

?

??

0 または1回

なし

なし

量指定のないパターン(Aなど)は、1つのみの一致を要求する量指定子を持つと見なされます。

A*またはA+?など、パターン量指定子を使用して正規表現としてパターンを指定できます。

1文字のパターン量指定子は最大限つまり「グリーディ」(貪欲)であり、可能な限り多くの正規表現のインスタンスとの一致を試みます。

2文字のパターン量指定子は最小限つまり「リラクタント」(消極的)であり、可能な限り少ない正規表現のインスタンスとの一致を試みます。

次のpattern_clauseがあるとします:

PATTERN (A B* C)

このパターン句では、連続する入力タプルによって次の条件が満たされた場合に、パターンの一致が認識されます。

1. 1つのタプルのみが相関変数Aを定義する条件と一致する

2. 0個以上のタプルが相関変数Bと一致する

3. 1つのタプルのみが相関変数Cと一致する

2の状態にあるとき、相関変数BとCの両方に一致するタプル(これらの定義条件を両方とも満たしているため)が到着した場合、Bの量指定子*は「グリーディ」であるため、このタプルはCではなくBに一致するものと見なされます。このように、「グリーディ」なプロパティによってBがCよりも優先され、Bとの一致がより多くなります。パターン式がA B*? Cであるとすると、Bには「リラクタント」(消極的)な量指定子が使用されるため、BとCの両方に一致するタプルはCとのみ一致するものとして処理されます。このように、CがBよりも優先され、Bとの一致はより少なくなります。

詳細は、以下を参照してください。

- 19.1.2項「シングルトンおよびグループ一致の参照」

- 19.3.2項「PATTERN句内でのグループ化および二者択一」

19.3.2 PATTERN句内でのグループ化および二者択一

regexp_grp_alt構文が示すように、次を使用できます。

- 開カッコおよび閉カッコ(( and )): 相関変数のグループ化

- 二者択一演算子(|): いずれか1つの相関変数(または相関変数のグループ)と一致

regexp_grp_alt::=

(correlation_name::=, pattern_quantifier::=, regexp::=)

次のpattern_clauseがあるとします。

PATTERN (A+ B+)

これは、「1回以上のAの後にBが1回以上続く」ことを意味します。

相関変数はグループ化できます。例:

PATTERN (A+ (C+ B+)*)

これは、「1回以上のAの後にゼロ以上のCが1回以上、およびBが1回以上続く」ことを意味します。

PATTERN句の二者択一演算子(|)を使用して、pattern_clauseの意味を調整できます。例:

PATTERN (A+ | B+)

これは、「Aが1回以上、またはBが1回以上、いずれか早い方」を意味します。

同様に、グループ相関変数と二者択一演算子の両方を使用できます。例:

PATTERN (A+ (C+ | B+))

これは、「1回以上のAの後に、Cが1回以上か、Bが1回以上、いずれか早い方が続く」ことを意味します。

すべての組合せと一致するようにするには、次を使用できます。

PATTERN ((A B) | (B A))

これは、「Aの後にB、またはBの後にA、いずれか早い方」を意味します。

詳細は、以下を参照してください。

- 19.3.1項「パターン量指定子と正規表現」

- 「二者択一演算子」

19.4 DEFINE句

DEFINE句は、各相関変数のブール条件を指定します。

論理式または算術式を指定して、条件と一致するイベントの属性に単一行または集計関数を適用できます。

基本ストリームからの新しいタプルが受信されると、その時点で関連している相関変数の条件が評価されます。その定義の条件を満たしている場合、タプルは相関変数に一致したと見なされます。特定の入力は0個、1個または複数の相関変数と一致する可能性があります。入力の受信時に評価される関連条件は、PATTERN句の正規表現で管理されるロジックと、これまでの入力を処理した後のパターン認識処理の状態によって決定されます。

条件では、MATCH_RECOGNIZE句が適用されるストリームまたはストリームに評価されるビューのスキーマの任意の属性を参照できます。

PATTERN句の相関変数は、DEFINE句で指定する必要はありません。このような相関変数のデフォルトは、常にtrueの述語です。このような相関変数は、すべてのイベントに一致します。PATTERN句で使用されていない相関変数をDEFINE句に指定すると、エラーになります。

SUBSET句で定義される相関変数はいずれもDEFINE句で定義できません。

pattern_definition_clause::=

(non_mt_corrname_definition_list::=)

non_mt_corrname_definition_list::=

(correlation_name_definition::=)

correlation_name_definition::=

(correlation_name::=、non_mt_cond_list::=)

この項の内容は、次のとおりです。

- 19.4.1項「DEFINE句内の相関変数用の関数」

- 19.4.2項「DEFINE句内の属性の参照」

- 19.4.3項「相関変数間の参照」

詳細は、以下を参照してください。

- 19.1.2項「シングルトンおよびグループ一致の参照」

- 19.1.3項「集計の参照」

- 19.1.3.6項「firstとlastの使用」

- 19.1.4項「prevの使用」

- 19.3項「PATTERN句」

- 19.11項「SUBSET句」

- 1.1.11項「関数」

19.4.1 DEFINE句内の相関変数用の関数

相関変数の定義では関数を使用できます。

例19-12では、to_timestamp関数が相関変数に適用されます。

例19-12 相関変数での関数の使用: to_timestamp

...
PATTERN (A B* C)
DEFINE
A  AS  (A.temp >= 25),
B  AS  ((B.temp >= 25) and (to_timestamp(B.element_time) - to_timestamp(A.element_time) < INTERVAL "0 00:00:05.00" DAY TO SECOND)),
C  AS  (to_timestamp(C.element_time) - to_timestamp(A.element_time) >= INTERVAL "0 00:00:05.00" DAY TO SECOND)
...

例19-13では、count関数を相関変数Bに適用して、定義が満たされる回数をカウントします。totalCountValueが、30分間に1000未満が2、3回ある場合に一致が認識されます。

例19-13 相関変数での関数の使用: count

...
MATCH_RECOGNIZE(
...
PATTERN(B*)
DURATION 30 MINUTES
DEFINE
B as (B.totalCountValue < 1000 and count(B.*) >= 2)
...

詳細は、以下を参照してください。

- 19.1.3項「集計の参照」

- 19.1.3.5項「*、identifier.*およびidentifier.attrのあるcountの使用」

- 19.1.3.6項「firstとlastの使用」

- 19.1.4項「prevの使用」

19.4.2 DEFINE句内の属性の参照

基本ストリームの属性を参照できます。

- 相関変数がない場合: c1 < 20

- 相関変数がある場合: A.c1 < 20

相関変数なしで属性を参照する場合、相関変数と最後に一致したタプルが評価の対象になります。

次の定義があるとします。

- DEFINE A as c1 < 20

- DEFINE A as A.c1 < 20

両方とも、最新の入力タプルである同じタプル内のc1を参照します。これは、最新の入力が相関変数と一致するものと想定し、入力着信時に、この相関変数の条件を評価するからです。

DEFINE句に定義されていない相関名を指定した場合は、各入力でtrueと見なされます。

例19-14では、相関変数AはPATTERN句内に存在しますが、DEFINEでは指定されていません。これは、相関名Aがすべての入力に対してtrueであることを意味します。PATTERN句で使用されていない相関名を定義するのは誤りです。

例19-14 未定義の相関名

<query id="q"><![CDATA[
SELECT
T.firstW,
T.lastZ
FROM
S2
MATCH_RECOGNIZE (
MEASURES
A.c1 as firstW,
last(Z) as lastZ
PATTERN(A W+ X+ Y+ Z+)
DEFINE
W as W.c2 < prev(W.c2),
X as X.c2 > prev(X.c2),
Y as Y.c2 < prev(Y.c2),
Z as Z.c2 > prev(Z.c2)
) as T
]]></query>

詳細は、以下を参照してください。

- 19.4.3項「相関変数間の参照」

- 19.1.2項「シングルトンおよびグループ一致の参照」

- 19.1.3.3項「まだ一致していない変数の参照」

- 19.1.3.4項「相関変数によって修飾されない参照属性」

- 19.3項「PATTERN句」

19.4.3 相関変数間の参照

1つの相関変数の定義で、他の相関変数を参照できます。例19-15に示すような問合せがあるとします。

例19-15 相関変数間の参照

...
Select
a_firsttime, d_lasttime, b_avgprice, d_avgprice
FROM
S
MATCH_RECOGNIZE (
PARTITION BY symbol
MEASURES
first(a.time) as a_firsttime,
last(d.time) as d_lasttime,
avg(b.price) as b_avgprice,
avg(d.price) as d_avgprice
PATTERN (A B+ C+ D)
DEFINE
A as A.price > 100,
B as B.price > A.price,
C as C.price < avg(B.price),
D as D.price > prev(D.price)
)
...

次の点に注意してください。

- 相関変数Aでは単一の属性が定義されるので、Bはこの単一属性を参照できます。

- Bで1つ以上の属性が定義されるので、CはBの単一の属性を参照できません。この場合、CはBの集計のみを参照できます。

- Dは自身との関係で定義されています。この場合、単一属性または集計を参照できます。この例で、prev関数は、現在の一致前のDの一致にアクセスするために使用されています。

詳細は、以下を参照してください。

- 19.4.2項「DEFINE句内の属性の参照」

- 19.1.2項「シングルトンおよびグループ一致の参照」

- 19.1.3.3項「まだ一致していない変数の参照」

- 19.1.3.4項「相関変数によって修飾されない参照属性」

- 19.4.2項「DEFINE句内の属性の参照」

19.5 PARTITION BY句

MATCH_RECOGNIZE句の結果を分割するためのストリームの属性を指定するには、このオプションの句を使用します。

PARTITION BY句がない場合、すべてのストリーム属性は同じパーティションに属します。

pattern_partition_clause::=

(non_mt_attr_list::=)

例19-1で、pattern_partition_clauseは次のとおりです。

PARTITION BY
itemId

パターン内のpartition by句は、partitionリスト内の属性に基づいて入力ストリームが論理的に分割され、その分割内でパターン・マッチングが行われることを意味します。

例19-16のようなスキーマ(c1 integer, c2 integer)を持つストリームSがあるとします。

例19-16 入力ストリームS1

c1  c2
1000 10, 1
2000 10, 2
3000 20, 2
4000 20, 1

例19-17のようなMATCH_RECOGNIZEの問合せがあるとします。

例19-17 入力ストリームS1を使用するMATCH_RECOGNIZEの問合せ

select T.p1, T.p2, T.p3 from S MATCH_RECOGNIZE(
MEASURES
A.ELEMENT_TIME as p1,
B.ELEMENT_TIME as p2
B.c2 as p3
PATTERN (A B)
DEFINE
A as A.c1 = 10,
B as B.c1 = 20
) as T

この問合せの出力は、次のとおりです。

3000:+ 2000, 3000, 2

例19-17の問合せにPARTITION BY c2を追加すると、出力は次のように変わります。

3000:+ 2000, 3000, 2
4000:+ 1000, 4000, 1

これは、PARTITION BY句の追加により、一致が分割内でのみ行われるようになったためです。c2属性の値によって、1000と4000のタプルはある分割に属し、2000と3000 のタプルは別の分割に属します。最初の分割で、Aは1000のタプルと一致し、Bは4000のタプルと一致します。3000のタプルもBの定義と一致しますが、タプルが別の分割に属しているため、最初の分割では一致として提示されません。

1つ以上の属性によって分割する場合、ORDER BY句を使用してパーティションの順序を制御できます。詳細は、19.6項「ORDER BY句」を参照してください。

19.6 ORDER BY句

このオプションの句を使用して、PARTITION BY句を使用する場合のMATCH_RECOGNIZE句によるパーティション順序を決定するためのストリーム属性を指定できます。

ORDER BY句がない場合、MATCH_RECOGNIZEの結果は決定されません。

pattern_order_by_top_clause::=

PARTITION BY句があるORDER BY句のみを使用できます。

詳細は、19.5項「PARTITION BY句」、「pattern_partition_clause::=」、および「order_by_list::=」を参照してください。

19.7 ALL MATCHES句

このオプションを使用して、重複するパターンに一致するようにOracle CEPを構成できます。

ALL MATCHES句がある場合、Oracle CEPですべてのあらゆる一致が検出されます。重複している一致、および同じイベントで開始される一致がある場合があります。この場合、パターン量指定子が「グリーディ」であっても「リラクタント」であっても、違いはありません。たとえば、次のようなパターンがあります。

ALL MATCHES
PATTERN (A* B)

次のように、同じ結果になります。

ALL MATCHES
PATTERN (A*? B)

ALL MATCHES句がない場合、重複する一致は返されず、アスタリスクなどの量指定子によって、一連の候補(および重複)一致のうち、優先して出力される一致が決定されます。重複する一致の残りは破棄されます。

pattern_skip_match_clause::=

ALL MATCHESを使用する例19-18の問合せtkpattern_q41と例19-19のデータ・ストリームtkpattern_S11があるとします。ストリームtkpattern_S11のスキーマは(c1 integer, c2 integer)です。例19-20は、問合せで返されるストリームを示します。

例19-18の問合せtkpattern_q41では、入力ストリーム値のプロットが英字Wの形になる場合に一致が報告されます。例19-20のリレーションは、このWパターン一致の重複するインスタンスの例を示します。

重複するパターンのインスタンスには2つの種類があります。

- 全体: 全体的な重複の例: 入力に含まれる時間3000-9000および4000-9000の行は両方とも指定されたパターン式に一致します。ALL MATCHES句がない場合は、長い方(3000-9000)が使用されます。

- 部分: 部分的な重複の例: 入力に含まれる時間12000-21000および16000-23000の行は両方とも指定されたパターン式に一致します。ALL MATCHES句がない場合は、先に出現した方が使用されます。これは、ALL MATCHES句を省略した場合は、以前に一致したパターン・インスタンスの最後のタプルの次のタプルから、パターンに一致する次のインスタンスの検索が開始されるためです。

例19-18 ALL MATCHES句の問合せ

<query id="tkpattern_q41"><![CDATA[
select
T.firstW, T.lastZ
from
tkpattern_S11
MATCH_RECOGNIZE (
MEASURES A.c1 as firstW, last(Z.c1) as lastZ
ALL MATCHES
PATTERN(A W+ X+ Y+ Z+)
DEFINE
W as W.c2 < prev(W.c2),
X as X.c2 > prev(X.c2),
Y as Y.c2 < prev(Y.c2),
Z as Z.c2 > prev(Z.c2)
) as T
]]></query>

例19-19 ALL MATCHES句のストリーム入力

Timestamp   Tuple
1000         1,8
2000         2,8
3000         3,8
4000         4,6
5000         5,3
6000         6,7
7000         7,6
8000         8,2
9000         9,6
10000        10,2
11000        11,9
12000        12,9
13000        13,8
14000        14,5
15000        15,0
16000        16,9
17000        17,2
18000        18,0
19000        19,2
20000        20,3
21000        21,8
22000        22,5
23000        23,9
24000        24,9
25000        25,4
26000        26,7
27000        27,2
28000        28,8
29000        29,0
30000        30,4
31000        31,4
32000        32,7
33000        33,8
34000        34,6
35000        35,4
36000        36,5
37000        37,1
38000        38,7
39000        39,5
40000        40,8
41000        41,6
42000        42,6
43000        43,0
44000        44,6
45000        45,8
46000        46,4
47000        47,3
48000        48,8
49000        49,2
50000        50,5
51000        51,3
52000        52,3
53000        53,9
54000        54,8
55000        55,5
56000        56,5
57000        57,9
58000        58,7
59000        59,3
60000        60,3

例19-20 ALL MATCHES句のストリーム出力

Timestamp   Tuple Kind  Tuple
9000:      +      3,9
9000:      +      4,9
11000:      +      6,11
11000:      +      7,11
19000:      +     12,19
19000:      +     13,19
19000:      +     14,19
20000:      +     12,20
20000:      +     13,20
20000:      +     14,20
21000:      +     12,21
21000:      +     13,21
21000:      +     14,21
23000:      +     16,23
23000:      +     17,23
28000:      +     24,28
30000:      +     26,30
38000:      +     33,38
38000:      +     34,38
40000:      +     36,40
48000:      +     42,48
50000:      +     45,50
50000:      +     46,50

例19-20に示すように、ALL MATCHES句では特定の入力が受信されると、一致するすべてのパターン・インスタンスが報告されます。たとえば、時間20000では{12,20}、{13,20}および{14,20}のすべてのタプルが出力されます。

詳細は、19.3.1項「パターン量指定子と正規表現」を参照してください。

19.8 WITHIN句

WITHIN句は、指定された時間内で一致が発生する場合にのみ、pattern_clause一致を出力するオプションの句です。

within_clause::=

(time_spec::=)

つまり、次の場合にのみ発生します。

TL - TF < WD

説明:

- TL - パターンに一致する最後のイベントのタイムスタンプ。

- TF - パターンに一致する最初のイベントのタイムスタンプ。

- WD - WITHIN句で指定された期間。

WITHIN INCLUSIVE句は境界でのイベントの一致も試みます。すなわち、次の場合に一致を出力します。

TL - TF <= WD

一致が指定された期間内に完了した場合、イベントは発生するとただちに出力されます。すなわち、一致を出力できる場合、完了時のタイムスタンプとともに出力されます。WITHIN句は、DURATION句のように期間が期限切れになるのを待機しません。

WITHIN句の期間が期限切れになると、不完全な一致候補はすべて破棄されます。

詳細は、19.12.4項「WITHIN句を使用したパターン検出」を参照してください。

注意:

WITHIN句とDURATION句を併用することはできません。詳細は、19.9項「DURATION句」を参照してください。

19.9 DURATION句

DURATION句は、イベントの欠落を検出する問合せを作成する場合にのみ使用する必要のあるオプションの句です。イベントの欠落の検出では、特定の制限時間内に発生するはずの特定のイベントが時間内に発生しない状況が検出されます。

duration_clause::=

(time_unit::=)

この句を使用すると、PATTERN句の正規表現が完全に一致し、DURATION句に指定された期間が期限切れになるまで他のイベントまたは入力が到着しない場合にのみ、一致が報告されます。期間は、パターンの一致の最初のイベントが到着した時点から計測されます。

DURATION句を使用する場合は、INCLUDE TIMER EVENTS句を使用する必要があります。詳細は、19.10項「INCLUDE TIMER EVENTS句」を参照してください。

この項の内容は、次のとおりです。

- 19.9.1項「固定期間のイベント欠落の検出」

- 19.9.2項「反復的なイベント欠落の検出」

注意:

DURATION句とWITHIN句を併用することはできません。詳細は、19.8項「WITHIN句」を参照してください。

19.9.1 固定期間のイベント欠落の検出

期間は、10などの定数値として指定できます。オプションで、秒や分などの時間単位を指定できます(time_unit::=を参照)。デフォルトの時間単位は秒です。

DURATION 10を使用して10秒(10000ms)の遅延を指定する例19-21の問合せtkpattern_q59と、例19-22のデータ・ストリームtkpattern_S19があるとします。ストリームtkpattern_S19のスキーマは(c1 integer)です。例19-23は、問合せで返されるストリームを示します。

例19-21 固定期間DURATION句を使用したMATCH_RECOGNIZEの問合せ

<query id="BBAQuery"><![CDATA[
select
T.p1, T.p2
from
tkpattern_S19
MATCH_RECOGNIZE (
MEASURES A.c1 as p1, B.c1 as p2
include timer events
PATTERN(A B*)
duration 10
DEFINE A as A.c1 = 10, B as B.c1 != A.c1
) as T
]]></query>

例19-22 固定期間DURATION句を使用したMATCH_RECOGNIZEのストリーム入力

Timestamp   Tuple
1000        10
4000        22
6000       444
7000        83
9000        88
11000        12
11000        22
11000        15
12000        13
15000        10
27000        11
28000        10
30000        18
40000        10
44000        19
52000        10
h 100000

例19-23 固定期間DURATION句を使用したMATCH_RECOGNIZEのストリーム出力

Timestamp   Tuple Kind  Tuple
11000:      +           10,88
25000:      +           10,
38000:      +           10,18
50000:      +           10,19
62000:      +           10,

時間1000のタプルはAに一致します。

期間は10であるため、1000+10000=11000の時点で入力を受け取るとすぐに一致が出力されます(値が12の)。1000から9000までのタプルのシーケンスはパターンAB*に一致するため、11000の時点で入力を受け取るとすぐに一致が報告されます。

次の一致は、その時点でAに一致するタプルのある15000の時点で開始されます。次のタプルの到着は時間27000です。ここでもまた、パターンAB*を満たすタプルがあるため、15000+10000=25000の時点で一致が報告されます。同様のロジックに従って、以降の出力が生成されます。

詳細は、「固定期間のイベント欠落の検出」を参照してください。

19.9.2 反復的なイベント欠落の検出

MULTIPLES OF句を指定した場合は、反復的なイベント欠落の検出が示されます。この場合、パターンが完全に一致した後にイベントが発生しないかぎり、期間値の倍数の時点で出力が送信されます。

DURATION MULTIPLES OF 10を使用して10秒(10000ms)の遅延を指定する例19-24の問合せtkpattern_q75と、例19-25のデータ・ストリームtkpattern_S23があるとします。ストリームtkpattern_S23のスキーマは(c1 integer)です。例19-26は、問合せで返されるストリームを示します。

例19-24 可変期間DURATION MULTIPLES OF句を使用したMATCH_RECOGNIZEの問合せ

<query id="tkpattern_q75"><![CDATA[
select
T.p1, T.p2, T.p3
from
tkpattern_S23
MATCH_RECOGNIZE (
MEASURES A.c1 as p1, B.c1 as p2, sum(B.c1) as p3
ALL MATCHES
include timer events
PATTERN(A B*)
duration multiples of 10
DEFINE A as A.c1 = 10, B as B.c1 != A.c1
) as T
]]></query>

例19-25 可変期間DURATION MULTIPLES OF句を使用したMATCH_RECOGNIZEのストリーム入力

Timestamp   Tuple
1000        10
4000        22
6000       444
7000        83
9000        88
11000        12
11000        22
11000        15
12000        13
15000        10
27000        11
28000        10
30000        18
44000        19
62000        20
72000        10
h 120000

例19-26 可変期間DURATION MULTIPLES OF句を使用したMATCH_RECOGNIZEのストリーム出力

Timestamp   Tuple Kind  Tuple
11000:     +           10,88,637
25000:     +           10,,
38000:     +           10,18,18
48000:     +           10,19,37
58000:     +           10,19,37
68000:     +           10,20,57
82000:     +           10,,
92000:     +           10,,
102000:     +           10,,
112000:     +           10,,

この実行は、上のDURATION句の例と同様のロジックに従います(「固定期間のイベント欠落の検出」を参照)。異なる点は、後の方の出力です。72000のタプルはAに一致しますが、それ以降は入力がありません。パターンAB*とは一致するため、82000の時点で出力が行われます。MULTIPLES OF句で期間10が指定されているため、92000、102000およびそれ以降は同様に出力が行われます。

19.10 INCLUDE TIMER EVENTS句

イベント欠落の検出には、この句とDURATION句を併用します。

通常、たいていのパターン一致の問合せでは、パターン一致の出力は、常に入力イベントによって入力ストリーム上で一致するパターンに対してトリガーされます。唯一の例外は、イベント欠落の検出の問合せで、タイマーの期限切れイベントによって(入力ストリーム上の明示的な入力イベントではなく)出力がトリガーされる場合があります。

pattern_inc_timer_evs_clause::=

(pattern_clause::=、pattern_skip_match_clause::=、pattern_definition_clause::=、duration_clause::=、subset_clause::=)

詳細は、19.9項「DURATION句」を参照してください。

19.11 SUBSET句

この句を使用すると、DEFINE句に定義された1つ以上の相関変数をグループにまとめることができます。MEASURESとDEFINEでは、他の任意の相関変数と同様にこの名前付きサブセットを使用できます。

例:

SUBSET S1 = (Z,X)

サブセットの右側((Z,X))は、PATTERN句での定義に基づいた1つ以上の相関変数のカンマ区切りのリストです。

サブセットの左側(S1)は、右側の相関変数を結合したものです。

サブセットの右側にサブセット変数を含めることはできません。

subset_clause::=

(non_mt_subset_definition_list::=)

non_mt_subset_definition_list::=

(subset_definition::=)

subset_definition::=

(subset_name::=、non_mt_corr_list::=)

subset_name::=

(const_string::=)

non_mt_corr_list::=

(correlation_name::=)

例19-27の問合せq55と例19-28のデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, c2 integer)です。この例では、S1からS6までのサブセットを定義します。この問合せでは、入力ストリームのc2属性の値が英字Wの形になる場合に一致が出力されます。ここで、このWの上昇部分を形成しているタプルのc2の値の合計を出す必要があるとします。相関変数Xは最初の上昇部分となるタプルを表し、Zは2番目の上昇部分となるタプルを表します。ここで、これらの両方に一致するタプルをグループ化する手段が必要です。これは、例に示すようなSUBSET句を定義して行うことができます。

サブセットS4は(X,Z)として定義されています。これは、XまたはZのいずれかに一致する入力ストリームのタプルを参照します。このサブセットはMEASURES句の文sum(S4.c2) as sumIncrArmで使用されています。これによって、XまたはZのいずれかに一致するタプルのc2属性の値の合計が計算されます。S4.c2 = 10のようにDEFINE句でS4.c2を参照する場合は、Xと一致するタプルおよびZと一致するタプルの中で最新のタプルのc2の値が参照されます。

サブセットS6は(Y)として定義されています。これは、相関変数Yに一致するすべてのタプルを参照します。

例19-29は、問合せで返されるストリームを示します。

例19-27 SUBSET句を使用したMATCH_RECOGNIZEの問合せ

<query id="q55"><![CDATA[
select
T.firstW,
T.lastZ,
T.sumDecrArm,
T.sumIncrArm,
T.overallAvg
from
S11
MATCH_RECOGNIZE (
MEASURES
S2.c1 as firstW,
last(S1.c1) as lastZ,
sum(S3.c2) as sumDecrArm,
sum(S4.c2) as sumIncrArm,
avg(S5.c2) as overallAvg
PATTERN(A W+ X+ Y+ Z+)
SUBSET S1 = (Z) S2 = (A) S3 = (A,W,Y) S4 = (X,Z) S5 = (A,W,X,Y,Z) S6 = (Y)
DEFINE
W as W.c2 < prev(W.c2),
X as X.c2 > prev(X.c2),
Y as S6.c2 < prev(Y.c2),
Z as Z.c2 > prev(Z.c2)
) as T
]]></query>

例19-28 SUBSET句を使用したMATCH_RECOGNIZEのストリーム入力

Timestamp   Tuple
1000        1,8
2000        2,8
3000        3,8
4000        4,6
5000        5,3
6000        6,7
7000        7,6
8000        8,2
9000        9,6
10000       10,2
11000       11,9
12000       12,9
13000       13,8
14000       14,5
15000       15,0
16000       16,9
17000       17,2
18000       18,0
19000       19,2
20000       20,3
21000       21,8
22000       22,5
23000       23,9
24000       24,9
25000       25,4
26000       26,7
27000       27,2
28000       28,8
29000       29,0
30000       30,4
31000       31,4
32000       32,7
33000       33,8
34000       34,6
35000       35,4
36000       36,5
37000       37,1
38000       38,7
39000       39,5
40000       40,8
41000       41,6
42000       42,6
43000       43,0
44000       44,6
45000       45,8
46000       46,4
47000       47,3
48000       48,8
49000       49,2
50000       50,5
51000       51,3
52000       52,3
53000       53,9
54000       54,8
55000       55,5
56000       56,5
57000       57,9
58000       58,7
59000       59,3
60000       60,3

例19-29 SUBSET句を使用したMATCH_RECOGNIZEのストリーム出力

Timestamp   Tuple Kind  Tuple
9000:      +           3,9,25,13,5.428571
21000:      +           12,21,24,22,4.6
28000:      +           24,28,15,15,6.0
38000:      +           33,38,19,12,5.1666665
48000:      +           42,48,13,22,5.0

詳細は、以下を参照してください。

- 19.1.3.1項「実行中集計と最終集計」

- 19.2項「MEASURES句」

- 19.3項「PATTERN句」

- 19.4項「DEFINE句」

19.12 MATCH_RECOGNIZEの例

次に、基本的なMATCH_RECOGNIZEの実際の例を示します。

- 「パターン検出」

- 「PARTITION BYを使用したパターン検出」

- 「集計を使用したパターン検出」

- 「固定期間のイベント欠落の検出」

追加の例は、『Oracle Fusion Middleware Oracle Complex Event Processingスタート・ガイド』を参照してください。

19.12.1 パターン検出

図19-1に示すような株価変動があります。このデータは証券コード(索引番号または時間)および株価のストリームとして表すことができます。図19-1では、1 - 9日および12 - 19日の間に二番底パターンと呼ばれるトレーディングの一般的な現象が発生しています。このパターンは、W字形の株価変動(下降(X)、上昇(Y)、下降(W)、2度目の上昇(Z))として視覚化されます。

図19-1 パターン検出: 二番底の価格変動

「図19-1 パターン検出: 二番底の価格変動」の説明

例19-30は、スキーマsymbol、stockTickおよびpriceを持つ株価イベントのストリームS2に対する問合せqを示します。この問合せではPATTERN句(A W+ X+ Y+ Z+)を使用して、着信する株取引の二番底パターンを検出します。この句の相関名は次のとおりです。

- A: 二番底パターンの開始点に相当します。
相関名Aは各入力でtrueであるため、DEFINE句で定義されていません。DEFINE句に定義されていない相関名を指定した場合は、各入力でtrueと見なされます。

- W+: 二番底パターンの最初の下降部分に相当します。
これはW.price < prev(W.price)として定義されます。この定義は、現在の価格が前の価格よりも低いことを意味します。

- X+: 二番底パターンの最初の上昇部分に相当します。

- Y+: 二番底パターンの2番目の下降部分に相当します。

- Z+: 二番底パターンの2番目の上昇部分に相当します。

例19-30 単純なパターン検出: 問合せ

<query id="q"><![CDATA[
SELECT
T.firstW,
T.lastZ
FROM
S2
MATCH_RECOGNIZE (
MEASURES
A.stockTick as firstW,
last(Z) as lastZ
PATTERN(A W+ X+ Y+ Z+)
DEFINE
W as W.price < prev(W.price),
X as X.price > prev(X.price),
Y as Y.price < prev(Y.price),
Z as Z.price > prev(Z.price)
) as T
WHERE
S2.symbol = "oracle"
]]></query>

19.12.2 PARTITION BYを使用したパターン検出

図19-2に示すような株価変動があります。このデータは証券コード(索引番号または時間)および株価のストリームとして表すことができます。この例では、複数の証券コードのデータがストリームに含まれています。図19-2では、銘柄BOFAの1 - 9日および12 - 19日の間に二番底パターンと呼ばれるトレーディングの一般的な現象が発生しています。このパターンは、W字形の株価変動(下降(X)、上昇(Y)、下降(W)、2度目の上昇(Z))として視覚化されます。

図19-2 Partition Byを使用したパターン検出: 株価変動

「図19-2 Partition Byを使用したパターン検出: 株価変動」の説明

例19-31は、スキーマsymbol、stockTickおよびpriceを持つ株価イベントのストリームS2に対する問合せqを示します。この問合せではPATTERN句(A W+ X+ Y+ Z+)を使用して、着信する株取引の二番底パターンを検出します。この句の相関名は次のとおりです。

- A: 二番底パターンの開始点に相当します。

- W+: 二番底パターンの最初の下降部分に相当します。これはW.price < prev(W.price)として定義され、現在の価格が前の価格よりも低いことを意味します。

- X+: 二番底パターンの最初の上昇部分に相当します。

- Y+: 二番底パターンの2番目の下降部分に相当します。

- Z+: 二番底パターンの2番目の上昇部分に相当します。

問合せではPARTITION BY句を使用して入力ストリームを株価表示記号別に分割し、各論理ストリームにこのPATTERN句を適用します。

例19-31 PARTITION BYを使用したパターン検出: 問合せ

<query id="q"><![CDATA[
SELECT
T.firstW,
T.lastZ
FROM
S2
MATCH_RECOGNIZE (
PARTITION BY
A.symbol
MEASURES
A.stockTick as firstW,
last(Z) as lastZ
PATTERN(A W+ X+ Y+ Z+)
DEFINE
W as W.price < prev(W.price),
X as X.price > prev(X.price),
Y as Y.price < prev(Y.price),
Z as Z.price > prev(Z.price)
) as T
]]></query>

19.12.3集計を使用したパターン検出

例19-32の問合せq1と例19-33のデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 integer)です。例19-34は、問合せで返されるストリームを示します。

例19-32 集計を使用したパターン検出: 問合せ

<query id="q1"><![CDATA[
SELECT
T.sumB
FROM
S
MATCH_RECOGNIZE (
MEASURES
sum(B.c1) as sumB
PATTERN(A B* C)
DEFINE
A as ((A.c1 < 50) AND (A.c1 > 35)),
B as B.c1 > avg(A.c1),
C as C.c1 > prev(C.c1)
) as T
]]></query>

例19-33 集計を使用したパターン検出: ストリーム入力

Timestamp   Tuple
1000       40
2000       52
3000       60
4000       58
5000       57
6000       56
7000       55
8000       59
9000       30
10000       40
11000       52
12000       60
13000       58
14000       57
15000       56
16000       55
17000       30
18000       10
19000       20
20000       30
21000       10
22000       25
23000       25
24000       25
25000       25

例19-34 集計を使用したパターン検出: ストリーム出力

Timestamp   Tuple
8000        338
12000       52

19.12.4 WITHIN句を使用したパターン検出

例19-35および例19-36の問合せと例19-37のデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 integer, c2 integer)です。表19-3で、これらの問合せの出力を比較します。

例19-35 PATTERN句とWITHIN句

<query id="queryWithin"><![CDATA[
SELECT T.Ac2, T.Bc2, T.Cc2
FROM S
MATCH_RECOGNIZE(
MEASURES A.c2 as Ac2, B.c2 as Bc2, C.c2 as Cc2
PATTERN (A (B+ | C)) within 3000 milliseconds
DEFINE
A as A.c1=10 or A.c1=25,
B as B.c1=20 or B.c1=15 or B.c1=25,
C as C.c1=15
) as T
]]></query>

例19-36 PATTERN句とWITHIN INCLUSIVE句

<query id="queryWithinInclusive"><![CDATA[
SELECT T.Ac2, T.Bc2, T.Cc2
FROM S
MATCH_RECOGNIZE(
MEASURES A.c2 as Ac2, B.c2 as Bc2, C.c2 as Cc2
PATTERN (A (B+ | C)) within inclusive 3000 milliseconds
DEFINE
A as A.c1=10 or A.c1=25,
B as B.c1=20 or B.c1=15 or B.c1=25,
C as C.c1=15
) as T
]]></query>

例19-37 WITHIN句を使用したパターン検出: ストリーム入力

Timestamp   Tuple
1000       10,100
h 2000
3000       15,200
3000       20,300
4000       25,400
5000       20,500
6000       20,600
7000       35,700
8000       10,800
9000       15,900
h 11000
11000       20,1000
11000       50,1100

表19-3 WITHINおよびWITHIN INCLUSIVEの問合せの出力

問合せqueryWithin

問合せqueryWithinInclusive

Timestamp   Tuple Kind  Tuple
3000:      +           100,300,
6000:      +           400,600,
9000:      +           800,900,

Timestamp   Tuple Kind  Tuple
4000:      +           100,400,
11000:      +           800,1000,

表19-3のqueryWithin問合せに示すように、候補一致はTimeStamp=1000のイベントで開始されます。WITHIN句の期間が3秒であるため、問合せは、TimeStamp=4000のイベントの前に完了した場合にのみ、一致を出力します。問合せがTimeStampe=4000のイベントを受け取ると、その時点までで最も長い一致が出力されます(ALL MATCHESを使用していないため)。TimeStamp=4000のイベントがBに一致しても、そのイベントは一致に含まれないことに注意してください。次の一致は、TimeStamp=4000のイベントから開始されます。このイベントもAに一致しており、以前の一致がTimeStamp=3000で終了しているためです。

表19-3のqueryWithinInclusive問合せに示すように、候補一致はTimeStamp=1000のイベントで開始されます。問合せがTimeStamp=4000のイベントを受け取る場合、問合せではWITHIN INCLUSIVEが使用され、イベントがBに一致するため、このイベントは一致に含められます。TimeStamp=5000のイベントはBに一致しますが、一致の開始(TimeStamp=1000)から測定した期間(3秒)を超えているため、パターンはこれ以上拡張されません。一致はTimeStamp=4000に終了しており、ALL MATCHESを使用していないため、Aと一致する場合であっても、次の一致はTimeStamp=4000に開始されません。

詳細は、以下を参照してください。

- 19.8項「WITHIN句」

- 19.7項「ALL MATCHES句」

19.12.5固定期間のイベント欠落の検出

5つの異なる部屋を移動するオブジェクトがあるとします。オブジェクトは、毎回部屋1を出発し、5分以内に部屋5に到着する必要があります。図19-3は、オブジェクトの動きを示しています。このデータは、時間および部屋番号のストリームとして表すことができます。オブジェクトは、時間1に部屋1を出発し、期待どおり、時間5に部屋5に到着しています。ただし、オブジェクトは時間6に部屋1を出発しましたが、時間11に部屋5に到着できず、時間12に部屋5に到着しています。時間15に部屋1を出発したオブジェクトは、期待どおり、時間20に部屋5に到着しています。ただし、時間23に部屋1を出発したオブジェクトは、時間28に部屋5に到着できず、時間30に部屋5に到着しています。時間5と時間20の成功は、イベントと見なされます。オブジェクトは部屋5に適切な時間に到着しているためです。時間11と時間28の失敗は、イベント欠落と見なされます。期待される到着イベントが発生していないためです。Oracle CQLを使用して、このようなイベント欠落を問い合せることができます。

図19-3 固定期間のイベント欠落の検出

「図19-3 固定期間のイベント欠落の検出」の説明

例19-38は、ストリームS(部屋番号を表すc1 integerスキーマを持つ)に対してイベントの欠落を検出する問合せqを示します。オブジェクトが部屋1を出発してから5分以内に部屋5に到着しなかった場合は毎回問合せによって部屋1を出発した時刻が返されます。

例19-38 固定期間のイベント欠落の検出: 問合せ

<query id="q"><![CDATA[
select T.Atime FROM S
MATCH_RECOGNIZE(
MEASURES
A.ELEMENT_TIME as Atime
INCLUDE TIMER EVENTS
PATTERN (A B*)
DURATION 5 MINUTES
DEFINE
A as A.c1 = 1,
B as B.c1 != 5
) as T
]]></query>

詳細は、19.9項「DURATION句」を参照してください。

20 Oracle CQL文

この章では、Oracle Continuous Query Language (Oracle CQL)のデータ定義言語(DDL)文について説明します。

- 20.1項「Oracle CQL文の概要」

20.1 Oracle CQL文の概要

Oracle CQLでは次のDDL文をサポートしています。

- Query

- View

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle CEPに通知します。

詳細は、以下を参照してください。

- 1.2.1項「表記規則」

- 1.2.2項「構文のショートカットとデフォルト」

- 1.2.3項「ドキュメント表記規則」

- 第2章「Oracle CQLの基本要素」

- 第7章「共通のOracle CQL DDL句」

- 第18章「Oracle CQLの問合せ、ビューおよび結合」

Query

目的

後続のOracle CQL文のidentifierで参照されるOracle CQL問合せを定義するには、query文を使用します。

要件

問合せがストリームまたはビューを参照する場合は、ストリームまたはビューが存在している必要があります。

問合せがすでに存在する場合は、Oracle CEPサーバーで例外がスローされます。

詳細は、以下を参照してください。

- 「View」

- 第18章「Oracle CQLの問合せ、ビューおよび結合」

構文

例20-1に示すように、<query></query>要素で問合せを表します。

query要素は1つの属性を持ちます。

- id: query要素のid属性としてidentifierを指定します。
id値はidentifier::=で指定される仕様に準拠する必要があります。

例20-1 <query></query>要素の問合せ

<query id="q0"><![CDATA[
select * from OrderStream where orderAmount > 10000.0
]]></query>

query::=

(sfw_block::=、idstream_clause::=、binary::=、using_clause::=)

sfw_block::=

(select_clause::=、from_clause::=、opt_where_clause::=、opt_group_by_clause::=、order_by_clause::=、order_by_top_clause::=、opt_having_clause::=)

select_clause::=

(non_mt_projterm_list::=)

non_mt_projterm_list::=

(projterm::=)

projterm::=

(arith_expr、identifier::=)

from_clause::=

(non_mt_relation_list::=、relation_variable::=、non_mt_cond_list::=)

non_mt_relation_list::=

(relation_variable::=)

relation_variable::=

(identifier::=、window_type::=、pattern_recognition_clause::=、xmltable_clause::=、object_expr::=、datatype::=、table_clause::=)

window_type::=

(identifier::=、non_mt_attr_list::=、time_spec::=)

table_clause::=

(object_expr::=、identifier::=、datatype::=)

opt_where_clause::=

(non_mt_cond_list::=)

opt_group_by_clause::=

(non_mt_attr_list::=)

order_by_clause::=

(order_by_list::=)

order_by_top_clause::=

(pattern_partition_clause::=、order_by_list::=)

order_by_list::=

(orderterm::=)

orderterm::=

(order_expr::=、null_spec::=、asc_desc::=)

null_spec::=

asc_desc::=

opt_having_clause::=

(non_mt_cond_list::=)

binary::=

idstream_clause::=

using_clause::=

(usinglist::=)

usinglist::=

(usingterm::=)

usingterm::=

(usingexpr::=)

usingexpr::=

(attr::=、const_int::=)

xmltable_clause::=

(xmlnamespace_clause::=、const_string::=、xqryargs_list::=、xtbl_cols_list::=)

xmlnamespace_clause::=

(xmlnamespaces_list::=)

xmlnamespaces_list::=

(xml_namespace::=)

xml_namespace::=

(const_string::=)

xtbl_cols_list::=

(xtbl_col::=)

xtbl_col::=

セマンティクス

named_query

Oracle CQL問合せ文自体を指定します(「query」を参照)。

構文については、「Query」を参照してください。

query

Oracle CQL問合せは、次の任意の句から作成できます。

- sfw_block: select、fromおよびその他のオプションの句(「sfw_block」を参照)。

- binary: オプションの集合演算の句(「binary」を参照)。

- xstream_clause: sfw_blockまたはbinary句にオプションのリレーションからストリームへの演算子を適用して、問合せが結果を返す方法を制御します(「idstream_clause」を参照)。

構文については、query::=を参照してください。

sfw_block

Oracle CQL問合せのselect、fromおよびその他のオプション句を指定します。次の任意の句を指定できます。

- select_clause: 指定したストリームまたはビューから選択されるストリーム要素(「select_clause」を参照)。

- from_clause: 問合せで選択されるストリームまたはビュー(「from_clause」を参照)。

- opt_where_clause: 問合せが選択した内容に適用されるオプションの条件(「opt_where_clause」を参照)。

- opt_group_by_clause: 問合せの結果に適用されるオプションのグループ化条件(「opt_group_by_clause」を参照)。

- order_by_clause: 問合せの結果に適用されるオプションの並べ替え条件(「order_by_clause」を参照)。

- order_by_top_clause: 問合せの結果の上位n個の要素に適用されるオプションの並べ替え条件(「order_by_top_clause」を参照)。

- opt_having_clause: 返されたストリーム要素のグループを指定されたconditionがTRUEのグループに制限するために問合せで使用されるオプションの句(「opt_having_clause」を参照)。

構文については、sfw_block::=(親: query::=)を参照してください。

select_clause

Oracle CQL問合せ文のselect句を指定します。

アスタリスク(*)を指定した場合、この句では重複とnullを含むすべてのタプルが返されます。

それ以外の場合は、必要なストリーム要素を個別に指定します(「non_mt_projterm_list」を参照)。

選択した重複タプルの各セットで1つのコピーのみが返されるようにするには、オプションでdistinctを指定します。重複タプルとはselectリスト内の各式と一致する値を持つタプルです。例については、「SelectとDistinctの例」を参照してください。

構文については、select_clause::=(親: sfw_block::=)を参照してください。

non_mt_projterm_list

Oracle CQL問合せ文のselect句で射影条件(「projterm」)または射影条件のカンマ区切りのリストを指定します。

構文については、non_mt_projterm_list::=(親: select_clause::=)を参照してください。

projterm

Oracle CQL問合せ文のselect句で射影条件を指定します。from_clause(「from_clause」を参照)の任意のストリームまたはビューから、要素のidentifierを使用して任意の要素を選択できます。

オプションで、射影条件に算術式を指定できます。

オプションで、ストリーム要素の名前をそのまま使用するかわりにASキーワードを使用して射影条件の別名を指定できます。

構文については、projterm::=(親: non_mt_projterm_list::=)を参照してください。

from_clause

問合せで選択される個別のストリームまたはビューを指定して、Oracle CQL文のfrom句を指定します(「non_mt_relation_list」を参照)。

外部結合を実行するには、LEFTまたはRIGHT OUTER JOIN ... ON構文を使用します。内部結合を実行するには、WHERE句を使用します。

詳細は、以下を参照してください。

- 「opt_where_clause」

- 「結合」

構文については、from_clause::=(親: sfw_block::=)。

non_mt_relation_list

Oracle CQL問合せ文のfrom句で、ストリームまたはビュー(「relation_variable」)、または、ストリームまたはビューのカンマ区切りのリストを指定します。

構文については、non_mt_relation_list::=(親: from_clause::=)を参照してください。

relation_variable

Oracle CQL問合せ文で選択されるストリームまたはビューを指定するには、relation_variable文を使用します。

ストリームまたはビューの登録または作成時に使用したidentifierによって、以前に登録または作成したストリームまたはビューを直接指定できます。オプションで、名前をそのまま使用するかわりにASキーワードを使用してストリームまたはビューの別名を指定します。

組込みのストリームからリレーションへの演算子を指定するには、window_type句を使用します(「window_type」を参照)。オプションで、名前をそのまま使用するかわりにASキーワードを使用してストリームまたはビューの別名を指定します。

データ・ストリーム用に最適化された高度な比較をストリームまたはビューに適用するには、pattern_recognition_clauseを使用します(「pattern_recognition_clause」を参照)。オプションで、名前をそのまま使用するかわりにASキーワードを使用してストリームまたはビューの別名を指定します。

XPathおよびXQueryを使用してxmltypeストリーム要素を処理するには、xmltable_clauseを使用します(「xmltable_clause」を参照)。オプションで、名前をそのまま使用するかわりにASキーワードを使用してストリームまたはビューの別名を指定します。

リレーションとして、Oracle CQL問合せのFROM句内のデータ・カートリッジ関数から返された複数の行にアクセスするには、table_clauseを使用します(「table_clause」を参照)。

詳細は、以下を参照してください。

- 「View」

構文については、relation_variable::=(親: non_mt_relation_list::=)を参照してください。

window_type

組込みのストリームからリレーションへの演算子を指定します。

詳細は、1.1.3項「ストリームからリレーションへの演算子(ウィンドウ)」を参照してください。

構文については、window_type::=(親: relation_variable::=)を参照してください。

table_clause

データ・カートリッジのTABLE句を使用して、Oracle CQL問合せのFROM句内のデータ・カートリッジ関数から返された複数の行にアクセスします。

TABLE句は返された複数の行をOracle CQLリレーションに変換します。これは外部リレーションであるため、TABLE関数句とストリームを結合する必要があります。Oracle CEPでは、結合ストリームに要素が到着したときにのみデータ・カートリッジ・メソッドを呼び出します。

オプションのOFキーワードを使用して、返された配列型またはCollection型に含められる型を指定します。

ASキーワードを使用して、object_exprと返されたリレーションの別名を指定します。

次の点に注意してください。

- データ・カートリッジ・メソッドは、配列型またはCollection型を返す必要があります。

- TABLE関数句とストリームを結合する必要があります。

例については、次の項を参照してください。

- 「データ・カートリッジTABLEの問合せ例: イテレータ」

- 「データ・カートリッジTABLEの問合せ例: 配列」

- 「データ・カートリッジTABLEの問合せ例: コレクション」

詳細は、以下を参照してください。

- 15.1.4.3項「配列」

- 15.1.4.4項「コレクション」

- object_expr::=

構文については、table_clause::=(親: relation_variable::=)を参照してください。

time_spec

範囲または分割された範囲のスライディング・ウィンドウがスライドする時間を指定します。

デフォルト: 単位を指定しない場合、Oracle CEPでは[second|seconds]が想定されます。

詳細は、「範囲ベースのストリームからリレーションへのウィンドウ演算子」および「分割されたストリームからリレーションへのウィンドウ演算子」を参照してください。

構文については、time_spec::=(親: window_type::=)を参照してください。

opt_where_clause

Oracle CQL問合せ文の(オプションの)where句を指定します。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

Oracle CQLでは(SQLと同様)、FROM句は、WHERE句の前に評価されます。次のOracle CQL問合せがあるとします。

SELECT ... FROM S MATCH_RECOGNIZE ( .... ) as T WHERE ...

この問合せでは、S MATCH_RECOGNIZE ( .... ) as Tは、FROM句内の副問合せと同様、最初でWHERE句の前に評価されます。このため、MATCH_RECOGNIZE句とWHERE句の両方が同じOracle CQL問合せ内で使用されることはほとんどありません。かわりに、通常、ビューを使用して必要なWHERE句をストリームに適用し、MATCH_RECOGNIZE句を適用する問合せ内のビューから選択します。

詳細は、以下を参照してください。

- 9.1.1項「組込み集計関数とWhere、Group ByおよびHaving句」

- 11.1.2項「Colt集計関数とWhere、Group ByおよびHaving句」

- 19.1.1項「MATCH_RECOGNIZE句とWHERE句」

構文については、opt_where_clause::=(親: sfw_block::=)を参照してください。

opt_group_by_clause

Oracle CQL問合せ文の(オプションの)GROUP BY句を指定します。選択されたストリーム要素をexprの値に基づいてグループ化し、各グループごとに単一の(集計)サマリー結果を返す場合は、GROUP BY句を使用します。

GROUP BY句の式には、ストリーム要素がselectリストにあるかどうかにかかわらず、FROM句の任意のストリーム要素またはビューを含めることができます。

GROUP BY句ではストリーム要素がグループ化されますが、結果セットの順序は保証されません。グループの並べ替えを行うには、ORDER BY句を使用します。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

詳細は、以下を参照してください。

- 9.1.1項「組込み集計関数とWhere、Group ByおよびHaving句」

- 11.1.2項「Colt集計関数とWhere、Group ByおよびHaving句」

構文については、opt_group_by_clause::=(親: sfw_block::=)を参照してください。

order_by_clause

1つ以上の並べ替え条件(「orderterm」を参照)のカンマ区切りのリスト(「order_by_list」)として、Oracle CQL問合せ文のORDER BY句を指定します。ORDER BY句を使用して、ルールの左側のストリーム要素が評価される順序を指定します。exprはディメンションまたはメジャー列に解決される必要があります。

詳細は、18.2.9項「問合せ結果のソート」を参照してください。

構文については、order_by_clause::=(親: sfw_block::=)を参照してください。

order_by_top_clause

1つ以上の並べ替え条件(「orderterm」を参照)のカンマ区切りのリスト(「order_by_list」)として、Oracle CQL問合せ文のORDER BY句を指定し、その後にROWSキーワードと要素数の整数(n)を指定します。この形式のORDER BY句を使用して、ストリームまたはリレーションの上位n個の要素を選択します。この句では常にリレーションが返されます。

次の問合せの例を考えます。

- 任意の時点で、次のサンプル問合せの出力は、ストリーム全体の上位10個の銘柄記号が含まれるリレーションになります。

select stock_symbols from StockQuotes order by stock_price rows 10

- 任意の時点で、次のサンプル問合せの出力は、過去1時間のデータの上位10個の銘柄記号が含まれるリレーションになります。

select stock_symbols from StockQuotes[range 1 hour] order by stock_price rows 10

詳細は、以下を参照してください。

- 「ORDER BY ROWSの問合せの例」

- 18.2.9項「問合せ結果のソート」

構文については、order_by_top_clause::=(親: sfw_block::=)を参照してください。

order_by_list

(オプションの)ORDER BY句で、1つ以上の並べ替え条件(「orderterm」を参照)のカンマ区切りのリストを指定します。

構文については、order_by_list::=(親: order_by_clause::=)を参照してください。

orderterm

ストリーム要素(attr::=)またはストリーム要素の位置索引(定数int)。オプションで、NULLSキーワードを使用して、nullを順序の最初または最後のどちらにするかを構成できます(「null_spec」を参照)。

order_expr(order_expr::=)にはattrまたはconstant_intを指定できます。attr(attr::=)には任意のストリーム要素または疑似列を指定できます。

構文については、orderterm::=(親: order_by_list::=)を参照してください。

null_spec

指定の並べ替え条件(「orderterm」を参照)でnullを順序の最初にするか(NULLS FIRST)、または最後にするか(NULLS LAST)を指定します。

構文については、null_spec::=(親: orderterm::=)を参照してください。

asc_desc

並べ替え条件が昇順(ASC)または降順(DESC)のどちらであるかを指定します。

構文については、asc_desc::=(親: orderterm::=)を参照してください。

opt_having_clause

HAVINGを使用して、返されたストリーム要素のグループを指定されたconditionがTRUEのグループに制限します。この句を省略すると、Oracle CEPではすべてのグループのサマリー結果が返されます。

GROUP BYと HAVINGはopt_where_clauseの後に指定します。GROUP BYとHAVINGの両方を指定する場合は、どちらの順序でも指定できます。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

詳細は、以下を参照してください。

- 9.1.1項「組込み集計関数とWhere、Group ByおよびHaving句」

- 11.1.2項「Colt集計関数とWhere、Group ByおよびHaving句」

例については、「HAVINGの例」を参照してください。

構文については、opt_having_clause::=(親: sfw_block::=)を参照してください。

binary

2つのストリームまたはビューで返されるタプルの集合演算を実行するには、binary句を使用します。

例については、次の項を参照してください。

- 「BINARYの例: UNIONとUNION ALL」

- 「BINARYの例: INTERSECT」

- 「BINARYの例: MINUS」

- 「BINARYの例: INとNOT IN」

構文については、binary::=(親: query::=)を参照してください。

idstream_clause

問合せに適用されるリレーションからストリームへのIStreamまたはDStream演算子を指定するには、idstream_clauseを使用します。

詳細は、1.1.4項「リレーションからストリームへの演算子」を参照してください。

構文については、idstream_clause::=(親: query::=)を参照してください。

using_clause

DIFFERENCE USING句を使用すると、問合せのIStreamまたはDStreamの差分を簡単に検出できます。

詳細は、18.2.10項「問合せ結果の差分の検出」を参照してください。

構文については、using_clause::=(親: query::=)を参照してください。

usinglist

usinglist句を使用して、問合せのIStreamまたはDStreamの差分検出に使用する列を指定します。次の項目によって列を指定できます。

- 属性名: 属性名で選択する場合に、このオプションを使用します。
例20-2は、DIFFERENCE USING句のusinglistの属性名c1を示しています。

- 別名: 別名が指定されている式の結果を含める場合に、このオプションを使用します。
例20-2は、DIFFERENCE USING句のusinglistの別名logvalを示しています。

- 位置: 別名が指定されていない式の結果を含める場合に、このオプションを使用します。
位置は、左から右に読み取る、1で始まる正の整数の、定数として指定します。

例20-2では、位置(3)によって、DIFFERENCE USING句のusinglistの式の結果funct(c2, c3)を示しています。

例20-2 DIFFERENCE USING句でのusinglistの指定

<query id="q1">
ISTREAM (
SELECT c1, log(c4) as logval, funct(c2, c3) FROM S [RANGE 1 NANOSECONDS]
)    DIFFERENCE USING (c1, logval, 3)
</query>

詳細は、18.2.10項「問合せ結果の差分の検出」を参照してください。

構文については、usinglist::=(親: using_clause::=)を参照してください。

xmltable_clause

XPathおよびXQueryを使用してxmltypeストリーム要素を処理するには、xmltable_clauseを使用します。1つ以上のXML表列(xtbl_cols_list::=を参照)のカンマ区切りのリスト(xtbl_col::=を参照)を指定できます。

例については、次の項を参照してください。

- 「XMLTABLEの問合せの例」

- 「XMLネームスペースを使用するXMLTABLEの問合せの例」

構文については、xmltable_clause::=(親: relation_variable::=)を参照してください。

pattern_recognition_clause

データ・ストリーム用に最適化された高度な比較を実行するには、pattern_recognition_clauseを使用します。

詳細および例については、第19章「MATCH_RECOGNIZEを使用したパターン認識」を参照してください。

構文については、pattern_recognition_clause::=(親: relation_variable::=)を参照してください。

例

次の例では、この文でサポートされる様々なセマンティクスを示します。

- 「単純な問合せの例」

- 「HAVINGの例」

- 「BINARYの例: UNIONとUNION ALL」

- 「BINARYの例: INTERSECT」

- 「BINARYの例: MINUS」

- 「SelectとDistinctの例」

- 「XMLTABLEの問合せの例」

- 「XMLネームスペースを使用するXMLTABLEの問合せの例」

- 「データ・カートリッジTABLEの問合せ例: イテレータ」

- 「データ・カートリッジTABLEの問合せ例: 配列」

- 「データ・カートリッジTABLEの問合せ例: コレクション」

- 「ORDER BY ROWSの問合せの例」

詳細は、第18章「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

単純な問合せの例

例20-3に、ストリーム要素orderAmountが10000 超える場合のすべての(*)タプルをストリームOrderStreamから選択する単純な問合せq0を登録する方法を示します。

例20-3 問合せの登録

<query id="q0"><![CDATA[
select * from OrderStream where orderAmount > 10000.0
]]></query>

HAVINGの例

例20-4の問合せq4と例20-5のデータ・ストリームS2があるとします。ストリームS2のスキーマは(c1 integer, c2 integer)です。例20-6は、問合せで返されるリレーションを示します。

例20-4 HAVINGの問合せ

<query id="q4"><![CDATA[
select
c1,
sum(c1)
from
S2[range 10]
group by
c1
having
c1 > 0 and sum(c1) > 1
]]></query>

例20-5 HAVINGのストリーム入力

Timestamp   Tuple
1000        ,2
2000        ,4
3000        1,4
5000        1,
6000        1,6
7000        ,9
8000        ,

例20-6 HAVINGのリレーション出力

Timestamp   Tuple Kind  Tuple
5000:       +           1,2
6000:       -           1,2
6000:       +           1,3

BINARYの例: UNIONとUNION ALL

例20-8と例20-9のリレーションR1とR2がそれぞれある場合、例20-7のUNION問合せq1では例20-10のリレーションが返され、例20-7のUNION ALL問合せq2では例20-11のリレーションが返されます。

例20-7 集合演算子: UNIONの問合せ

<query id="q1"><![CDATA[
R1 UNION R2
]]></query>
<query id="q2"><![CDATA[
R1 UNION ALL R2
]]></query>

例20-8 集合演算子: UNIONのリレーション入力R1

Timestamp   Tuple Kind  Tuple
200000:  +           20,0.2
201000:  -           20,0.2
400000:  +           30,0.3
401000:  -           30,0.3
100000000:  +           40,4.04
100001000:  -           40,4.04

例20-9 集合演算子: UNIONのリレーション入力R2

Timestamp   Tuple Kind  Tuple
1002:  +           15,0.14
2002:  -           15,0.14
200000:  +           20,0.2
201000:  -           20,0.2
400000:  +           30,0.3
401000:  -           30,0.3
100000000:  +           40,4.04
100001000:  -           40,4.04

例20-10 集合演算子: UNIONのリレーション出力

Timestamp   Tuple Kind  Tuple
1002:  +           15,0.14
2002:  -           15,0.14
200000:  +           20,0.2
201000:  -           20,0.2
400000:  +           30,0.3
401000:  -           30,0.3
100000000:  +           40,4.04
100001000:  -           40,4.04

例20-11 集合演算子: UNION ALLのリレーション出力

Timestamp   Tuple Kind  Tuple
1002:  +           15,0.14
2002:  -           15,0.14
200000:  +           20,0.2
200000:  +           20,0.2
20100:  -           20,0.2
201000:  -           20,0.2
400000:  +           30,0.3
400000:  +           30,0.3
401000:  -           30,0.3
401000:  -           30,0.3
100000000:  +           40,4.04
100000000:  +           40,4.04
10001000:  -           40,4.04
100001000:  -           40,4.04

BINARYの例: INTERSECT

例20-13と例20-14のリレーションR1とR2がそれぞれある場合、例20-12のINTERSECT問合せq1では例20-15のリレーションが返されます。

例20-12 集合演算子: INTERSECTの問合せ

<query id="q1"><![CDATA[
R1 INTERSECT R2
]]></query>

例20-13 集合演算子: INTERSECTのリレーション入力R1

Timestamp   Tuple Kind  Tuple
1000:        +          10,30
1000:        +          10,40
2000:        +          11,20
3000:        -          10,30
3000:        -          10,40

例20-14 集合演算子: INTERSECTのリレーション入力R2

Timestamp   Tuple Kind  Tuple
1000:       +           10,40
2000:       +           10,30
2000:       -           10,40
3000:       -           10,30

例20-15 集合演算子: INTERSECTのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           10,30
1000:       +           10,40
1000:       -           10,30
1000:       -           10,40
1000:       +           10,40
2000:       +           11,20
2000:       -           11,20
2000:       +           10,30
2000:       -           10,40
3000:       -           10,30

BINARYの例: MINUS

例20-17と例20-18のリレーションR1とR2がそれぞれある場合、例20-16のMINUS問合せq1では例20-19のリレーションが返されます。

例20-16 集合演算子: MINUSの問合せ

<query id="q1BBAQuery"><![CDATA[
R1 MINUS R2
]]></query>

例20-17 集合演算子: MINUSのリレーション入力R1

Timestamp   Tuple Kind  Tuple
1500:       +           10,40
2000:       +           10,30
2000:       -           10,40
3000:       -           10,30

例20-18 集合演算子: MINUSのリレーション入力R2

Timestamp   Tuple Kind  Tuple
1000:       +           11,20
2000:       +           10,40
3000:       -           10,30

例20-19 集合演算子: MINUSのリレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           10,40.0
2000:       -           10,40.0

BINARYの例: INとNOT IN

この使用法では、問合せはバイナリの問合せになります。

in_condition_set::=

注意:

6.8.2項「メンバーシップ条件としてのINとNOT INの使用」で説明しているように、この使用法はin_condition_membershipと組み合せることはできません。

例20-20のようなビューV3とV4、および問合せQ1、例20-21のようなデータ・ストリームS3(スキーマ(c1 integer, c2 integer)を持つ)、例20-22のようなS4(スキーマ(c1 integer, c2 integer)を持つ)があるとします。この条件テストでは、左のリレーションの属性の数およびデータ型は、右のリレーションの属性の数およびデータ型と同じである必要があります。例20-23は、問合せによって返されるリレーションを示しています。

例20-20 集合演算としてのINとNOT IN: 問合せ

<view id="V3" schema="c1 c2"><![CDATA[
select * from S3[range 2]
]]></query>
<view id="V4" schema="c1 d1"><![CDATA[
select * from S4[range 1]
]]></query>
<query id="Q1"><![CDATA[
v3 not in v4
]]></query>

例20-21 集合演算としてのINとNOT IN: ストリームS3入力

Timestamp   Tuple
1000        10, 30
1000        10, 40
2000        11, 20
3000        12, 40
3000        12, 30
3000        15, 50
h 2000000

例20-22 集合演算としてのINとNOT IN: ストリームS4入力

Timestamp   Tuple
1000        10, 40
2000        10, 30
2000        12, 40
h 2000000

例20-23 集合演算としてのINとNOT IN: リレーション出力

Timestamp   Tuple Kind  Tuple
1000:       +           10,30
1000:       +           10,40
1000:       -           10,30
1000:       -           10,40
2000:       +           11,20
2000:       +           10,30
2000:       +           10,40
2000:       -           10,30
2000:       -           10,40
3000:       +           15,50
3000:       +           12,40
3000:       +           12,30
4000:       -           11,20
5000:       -           12,40
5000:       -           12,30
5000:       -           15,50

SelectとDistinctの例

例20-24の問合せq1があるとします。例20-25のデータ・ストリームSがある場合、問合せでは例20-26のリレーションが返されます。

例20-24 Select DISTINCTの問合せ

<query id="q1"><![CDATA[
SELECT DISTINCT FROM S WHERE c1 > 10
]]></query>

例20-25 Select DISTINCTのストリーム入力

Timestamp   Tuple
1000       23
2000       14
3000       13
5000       22
6000       11
7000       10
8000        9
10000        8
11000        7
12000       13
13000       14

例20-26 Select DISTINCTのストリーム出力

Timestamp   Tuple
1000        23
2000        14
3000        13
5000        22
6000        11

XMLTABLEの問合せの例

例20-27の問合せq1と例20-28のデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 xmltype)です。この問合せは、例20-29に示すリレーションを返します。詳細は、18.2.6項「XMLTableの問合せ」を参照してください。

例20-27 XMLTABLEの問合せ

<query id="q1"><![CDATA[
SELECT
X.Name,
X.Quantity
from
S1
XMLTable (
"//item" PASSING BY VALUE S1.c2 as "."
COLUMNS
Name CHAR(16) PATH "/item/productName",
Quantity INTEGER PATH "/item/quantity"
) AS X
]]></query>

例20-28 XMLTABLEのストリーム入力

Timestamp   Tuple
3000        "<purchaseOrder><shipTo><name>Alice Smith</name><street>123 Maple Street</street><city>Mill Valley</city><state>CA</state><zip>90952</zip> </shipTo><billTo><name>Robert Smith</name><street>8 Oak Avenue</street><city>Old Town</city><state>PA</state> <zip>95819</zip> </billTo><comment>Hurry, my lawn is going wild!</comment><items> <item><productName>Lawnmower </productName><quantity>1</quantity><USPrice>148.95</USPrice><comment>Confirm this is electric</comment></item><item> <productName>Baby Monitor</productName><quantity>1</quantity> <USPrice>39.98</USPrice> <shipDate>1999-05-21</shipDate></item></items> </purchaseOrder>"
4000        "<a>hello</a>"

例20-29 XMLTABLEのリレーション出力

Timestamp   Tuple Kind  Tuple
3000:       +           <productName>Lawnmower</productName>,<quantity>1</quantity>
3000:       +           <productName>Baby Monitor</productName>,<quantity>1</quantity>

XMLネームスペースを使用するXMLTABLEの問合せの例

例20-30の問合せq1と例20-31のデータ・ストリームS1があるとします。ストリームS1のスキーマは(c1 xmltype)です。この問合せは、例20-32に示すリレーションを返します。詳細は、18.2.6項「XMLTableの問合せ」を参照してください。

例20-30 XMLネームスペースを使用するXMLTABLEの問合せ

<query id="q1"><![CDATA[
SELECT * from S1
XMLTable (
XMLNAMESPACES('http://example.com' as 'e'),
'for $i in //e:emps return $i/e:emp' PASSING BY VALUE S1.c1 as "."
COLUMNS
empName char(16) PATH 'fn:data(@ename)',
empId integer PATH 'fn:data(@empno)'
) AS X
]]></query>

例20-31 XMLネームスペースを使用するXMLTABLEのストリーム入力

Timestamp   Tuple
3000        "<emps xmlns=\"http://example.com\"><emp empno=\"1\" deptno=\"10\" ename=\"John\" salary=\"21000\"/><emp empno=\"2\" deptno=\"10\" ename=\"Jack\" salary=\"310000\"/><emp empno=\"3\" deptno=\"20\" ename=\"Jill\" salary=\"100001\"/></emps>"
h 4000

例20-32 XMLネームスペースを使用するXMLTABLEのリレーション出力

Timestamp   Tuple Kind  Tuple
3000:       +     John,1
3000:       +     Jack,2
3000:       +     Jill,3

データ・カートリッジTABLEの問合せの例: イテレータ

例20-33に示す、メソッドMyCartridgeを持つデータ・カートリッジ(MyCartridge)があるとします。

例20-33 メソッドgetIteratorのMyCartridge

...
public static Iterator<Integer> getIterator() {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
return list.iterator();
}
...

例20-34の問合せq1があるとします。例20-35のデータ・ストリームS0がある場合、問合せでは例20-36のリレーションが返されます。

例20-34 TABLEの問合せ: イテレータ

<query id="q1"><![CDATA[
select S1.c1, S1.c2, S2.c1
from
S0[now] as S1,
table (com.acme.MyCartridge.getIterator() as c1) of integer as S2
]]></query>

例20-35 TABLEの問合せのストリーム入力: イテレータ

Timestamp   Tuple
1           1, abc
2           2, ab
3           3, abc
4           4, a
h 200000000

例20-36 TABLEの問合せの出力: イテレータ

Timestamp   Tuple Kind  Tuple
1:          +           1,abc,1
1:          +           1,abc,2
1:          -           1,abc,1
1:          -           1,abc,2
2:          +           2,ab,1
2:          +           2,ab,2
2:          -           2,ab,1
2:          -           2,ab,2
3:          +           3,abc,1
3:          +           3,abc,2
3:          -           3,abc,1
3:          -           3,abc,2
4:          +           4,a,1
4:          +           4,a,2
4:          -           4,a,1
4:          -           4,a,2

データ・カートリッジTABLEの問合せの例: 配列

例20-37に示す、メソッドgetArrayを持つデータ・カートリッジ(MyCartridge)があるとします。

例20-37 メソッドgetArrayのMyCartridge

...
public static Integer[] getArray(int c1) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
return list.toArray(new Integer[2]);;
}
...

例20-38の問合せq1があるとします。例20-39のデータ・ストリームS0がある場合、問合せでは例20-40のリレーションが返されます。

例20-38 TABLEの問合せ: 配列

<query id="q1"><![CDATA[
select S1.c1, S1.c2, S2.c1
from
S0[now] as S1,
table (com.acme.MyCartridge.getArrayS1.c1) as c1) of integer as S2
]]></query>

例20-39 TABLEの問合せのストリーム入力: 配列

Timestamp   Tuple
1           1, abc
2           2, ab
3           3, abc
4           4, a
h 200000000

例20-40 TABLEの問合せの出力: 配列

Timestamp   Tuple Kind  Tuple
1:          +           1,abc,1
1:          +           1,abc,2
1:          -           1,abc,1
1:          -           1,abc,2
2:          +           2,ab,2
2:          +           2,ab,4
2:          -           2,ab,2
2:          -           2,ab,4
3:          +           3,abc,3
3:          +           3,abc,6
3:          -           3,abc,3
3:          -           3,abc,6
4:          +           4,a,4
4:          +           4,a,8
4:          -           4,a,4
4:          -           4,a,8

データ・カートリッジTABLEの問合せの例: コレクション

例20-41に示す、メソッドgetCollectionを持つデータ・カートリッジ(MyCartridge)があるとします。

例20-41 メソッドgetCollectionのMyCartridge

...
public HashMap<Integer,String> developers;
developers = new HashMap<Integer,String>();
developers.put(2, "Mohit");
developers.put(4, "Unmesh");
developers.put(3, "Sandeep");
developers.put(1, "Swagat");

public HashMap<Integer,String> qaengineers;
qaengineers = new HashMap<Integer,String>();
qaengineers.put(4, "Terry");
qaengineers.put(5, "Tony");
qaengineers.put(3, "Junger");
qaengineers.put(1, "Arthur");
...
public Collection<String> getEmployees(int exp_yrs) {
LinkedList<String> employees = new LinkedList<String>();
employees.add(developers.get(exp_yrs));
employees.add(qaengineers.get(exp_yrs));
return employees;
}
...

例20-42の問合せq1があるとします。例20-43のデータ・ストリームS0がある場合、問合せでは例20-44のリレーションが返されます。

例20-42 TABLEの問合せ: コレクション

<query id="q1"><![CDATA[
RStream(
select S1.c1, S2.c1
from
S0[now] as S1,
table(S1.c2.getEmployees(S1.c1) as c1) of char as S2
)
]]></query>

例20-43 TABLEの問合せのストリーム入力: コレクション

Timestamp   Tuple
1           1, abc
2           2, ab
3           3, abc
4           4, a
h 200000000

例20-44 TABLEの問合せの出力: コレクション

Timestamp   Tuple Kind  Tuple
1:          +           1,Swagat
1:          +           1,Arthur
2:          +           2,Mohit
3:          +           3,Sandeep
3:          +           3,Junger
4:          +           4,Unmesh
4:          +           4,Terry

ORDER BY ROWSの問合せの例

例20-45の問合せq1があるとします。例20-46のデータ・ストリームS0がある場合、問合せでは例20-47のリレーションが返されます。

例20-45 ORDER BY ROWSの問合せ

<query id="q1"><![CDATA[
select c1 ,c2 from S0 order by c1,c2 rows 5
]]></query>

例20-46 ORDER BY ROWSのストリーム入力

Timestamp   Tuple
1000        7, 15
2000        7, 14
2000        5, 23
2000        5, 15
2000        5, 15
2000        5, 25
3000        2, 13
3000        3, 19
4000        4, 17
5000        1, 9
h 1000000000

例20-47 ORDER BY ROWSの出力

Timestamp   Tuple Kind  Tuple
1000:       +           7,15
2000:       +           7,14
2000:       +           5,23
2000:       +           5,15
2000:       +           5,15
2000:       -           7,15
2000:       +           5,25
3000:       -           7,14
3000:       +           2,13
3000:       -           5,25
3000:       +           3,19
4000:       -           5,23
4000:       +           4,17
5000:       -           5,15
5000:       +           1,9

View

目的

後続のOracle CQL文のidentifierで参照される、基本のストリームまたはリレーションに対するビューを作成するには、view文を使用します。

要件

詳細は、以下を参照してください。

- 「Query」

- 第18章「Oracle CQLの問合せ、ビューおよび結合」

構文

例20-48に示すように、<view></view>要素でビューを表します。

view要素は2つの属性を持ちます。

- id: view要素のid属性としてidentifierを指定します。
id値はidentifier::=で指定される仕様に準拠する必要があります。

- schema: オプションで、属性名のスペース区切りリストとしてviewのスキーマを指定します。
Oracle CEPサーバーは型を推測します。

例20-48 <view></view>要素のビュー

<view id="v2" schema="cusip bid ask"><![CDATA[
IStream(select * from S1[range 10 slide 10])
]]></view>

ビュー本体の構文は問合せと同じです。詳細は、「Query」を参照してください。

例

次の例では、この文でサポートされる様々なセマンティクスを示します。詳細は、第18章「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

ビュー登録の例

例20-49に、ビューv2を登録する方法を示します。

例20-49 ビューの登録

<view id="v2" schema="cusip bid ask"><![CDATA[
IStream(select * from S1[range 10 slide 10])
]]></view>

索引

A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y

記号

-

算術演算子(負), 4.1.2

算術演算子(減算), 4.1.2

リレーションの削除, 1.1.1.3

()

パターン演算子のグループ化, 19.3.2

*

算術演算子(乗算), 4.1.2

最大パターン量指定子(0回以上), 19.3.1

count関数での使用, 5.1, 5.1, 9.1.1, 9.1.1, 19.1.3.5, 19.1.3.5

select句での使用, 20.1

*?

最小パターン量指定子(0回以上), 19.3.1

+

算術演算子(加算), 4.1.2

算術演算子(正), 4.1.2

最大パターン量指定子(1回以上), 19.3.1

リレーションの挿入, 1.1.1.3

+?

最小パターン量指定子(1回以上), 19.3.1

:n

パラメータ化された問合せのプレースホルダー, 18.2.11

?

最大パターン量指定子(0回または1回), 19.3.1

??

最小パターン量指定子(0または1回), 19.3.1

|

二者択一パターン演算子, 19.3.2

||

連結演算子, 4.1.2, 4.1.2

A

abs関数, 12.1

abs1関数, 12.1

abs2関数, 12.1

abs3関数, 12.1

acos関数, 12.1

aggr_distinct_expr構文, 5.1

aggr_expr構文, 5.1

集計

相関変数の制限, 19.1.3.2, 19.1.3.3, 19.1.3.4, 19.1.3.5

MATCH_RECOGNIZE句内のcount, 19.1.3.5

式, 5.1, 5.1

最終, 19.1.3.1

MATCH_RECOGNIZE句内のfirst, 19.1.3.6

関数, 組込み, 9

関数, Colt組込み, 11

MATCH_RECOGNIZE句内のlast, 19.1.3.6

MATCH_RECOGNIZE句内のprev, 19.1.4

MATCH_RECOGNIZE句内での参照, 19.1.3

実行中, 19.1.3.1

XML集計式, 5.1

AggregationFunctionFactory, 13.2.2 別名

概要, 2.7

ALIASES要素, 2.7.2

AS演算子, 2.7.1

列, 2.7.1.1

ストリーム要素, 2.7.1.1

型の別名, 2.7.2.1

ウィンドウ演算子, 2.7.1.2

ALL MATCHES句

概要, 19.7

部分的な重複パターン, 19.7

全体的な重複パターン, 19.7

ALL演算子, 6.2 二者択一演算子, 4.1.2 AND条件, 6.3, 6.3 ANY演算子, 6.2 ANYINTERACTジオメトリ関係演算子, 16.2.7 API

AggregationFunctionFactory, 13.2.2

アプリケーション・コンテキスト

データ・カートリッジ, 14.1.2

Oracle JDBCデータ・カートリッジ, 17.1.4

Oracle Spatial, 16.1.4

アプリケーション時間, 1.1.13 アプリケーション・タイムスタンプ, 1.1.13 APPLICATION_NO_AUTO_IMPORT_CLASS_SPACE, 15.1.2.2 演算子の引数, 4 arith_expr構文, 5.1 arith_expr_list構文, 5.1 array_type

句, 7.1

AS

別名演算子, 2.7.1, 2.7.1.2

correlation_name_definition構文, 19.4

measure_column構文, 19.2

asc_desc構文, 20.1 asin関数, 12.1 atan関数, 12.1 atan2関数, 12.1 attr

句, 7.1

構文, 7.1

attrspec

句, 7.1

構文, 7.1

autoCorrelation関数, 11.1.2 avg関数, 9.1.1

B

基本リレーション, 1.1.1.2

基本ストリーム, 1.1.1.2

beta関数, 10.1

beta1関数, 10.1

betaComplemented関数, 10.1

BETWEEN条件, 6.5

between_condition構文, 6.5

BIGINTデータ型, 2.1.1

binary

句, 20.1

構文, 20.1

二項演算子, 4.1.1 bindings要素, 18.2.11.2 binomial関数, 10.1 binomial1関数, 10.1 binomial2関数, 10.1 binomialComplemented関数, 10.1 bitMaskWithBitsSetFromTo関数, 10.1 BOOLEANデータ型, 2.1.1 bufferPolygonジオメトリ・メソッド, 16.2.7 組込みデータ型, 2.1.1 組込み関数

概要, 1.1.11

集計

概要, 9

distinct, 9.1

ネスト, 9.1

where句, group by句, having句, 9.1.1, 9.1.1

Colt, 1.1.11, 1.1.11, 10, 11

where、group byおよびhaving句, 11.1.2

java.lang.Math, 1.1.11, 12 単一行

概要, 8

組込みウィンドウ

概要, 1.1.3

問合せ, 18.2.3

builtin_aggr構文, 9.1 builtin_aggr_incr構文, 9.1 BYTEデータ型, 2.1.1

C

キャッシュ, 1.1.10

Oracle CQL問合せ, 18.5

Oracle CQLユーザー定義関数, 13.1.3

キャッシュの問合せ, 18.2.8 case_expr構文x, 5.1 cbrt関数, 12.1 CDATA, 1.2.1 ceil関数, 10.1 ceil1関数, 12.1 CEP DDL

使用, 1.2.1

チャネル

問合せのselector, 1.1.1.1.4

ストリーム, 1.1.1.1.1

CHARデータ型, 2.1.1 文字セットとマルチバイト文字, 2.8.1 chiSquare関数, 10.1 chiSquareComplemented関数, 10.1 class_name

句, 7.1, 7.1

クラスパス

Oracle CEPサービス・エンジン, 13.1, 13.2.1, 13.2.2

単一行ユーザー定義関数, 13.2.1, 13.2.2

ユーザー定義関数, 13.1

Colt組込み関数, 1.1.11, 1.1.11, 10, 11

where、group byおよびhaving句, 11.1.2

列の別名, 2.7.1.1 コメント

CQL, 1.2.1, 2.6

XML, 8.1

比較条件

概要, 6.2

単純, 6.2

比較規則

文字値, 2.2.3

データ型, 2.2

日付値, 2.2.2

complex_type

句, 7.1

複合条件, 6.7 compound_conditions構文, 6.7 concat関数, 8.1 連結演算子, 4.1.2, 8.1 condition構文, 6.2 条件

概要, 6

BETWEEN, 6.5

比較

概要, 6.2

単純, 6.2

複合, 6.7 compound_conditions構文, 6.7 in, 6.8 論理

概要, 6.3

AND, 6.3

NOT, 6.3

OR, 6.3

XOR, 6.3

null, 2.5.2, 6.6 パターン・マッチング

LIKE, 6.4

lk関数, 8.1

優先順位, 6.1.1 範囲, 6.5 const_bigint

句, 7.1

構文, 7.1

const_int

句, 7.1

構文, 7.1

const_string

句, 7.1

引用符, 2.3.1

構文, 7.1

テキスト・リテラル, 2.3.1

const_value

句, 7.1

構文, 7.1

CONTAINジオメトリ関係演算子, 16.2.7 コンテンツ, 5.1 Continuous Query Language。「CQL」を参照 変換, 2.2.4 correlation関数, 11.1.2 相関変数, 19.1 correlation_name構文, 19.3.1 correlation_name_definition構文, 19.4 cos関数, 12.1 cosh関数, 12.1 count関数, 9.1.1 covariance関数, 11.1.2 CQL, 1.2.1, 1.2.1, 1.2.1, 1.2.1, 1.2.1

別名

概要, 2.7

ALIASES要素, 2.7.2

AS演算子, 2.7.1

型の別名, 2.7.2.1

コメント, 1.2.1, 2.6 条件, 6 .cqlxファイル, 1.2.1 データ型の比較規則, 2.2 データ型, 2.1 式, 5 書式モデル, 2.4 結合, 18 表記規則, 1.2.1 リテラル, 2.3 MATCH_RECOGNIZE, 19 ネーミング・ルール, 2.8.1 null

概要, 2.5

比較条件内, 2.5.2

関数内, 2.5.1

演算子, 4 Oracle ツールのサポート, 1.4 パターン認識

概要, 1.1.7, 19

疑似列

概要, 3

attr句, 7.1

ELEMENT_TIME, 3.2

問合せ, 18 構文, 1.2.3 ビュー, 18 CQLデータ・カートリッジ文

array_type句, 7.1

class_name句, 7.1, 7.1

complex_type句, 7.1

data_cartridge_name句, 5.1

fieldname句, 7.1, 7.1

link句, 5.1

l-value句, 7.1

methodname句, 7.1

package_name句, 7.1, 7.1

param_list句, 7.1

qualified_type_name句, 7.1

CQL文

概要, 1.2

array_type句, 7.1

attr句, 7.1

attrspec句, 7.1

binary句, 20.1

class_name句, 7.1, 7.1

const_bigint句, 7.1

const_int句, 7.1

const_string句, 7.1

const_value句, 7.1

data_cartridge_name句, 5.1

fieldname句, 7.1, 7.1

identifier句, 7.1

INおよびNOT IN, 20.1

INTERSECT, 20.1

表記規則, 1.2.1

link句, 5.1

l-value句, 7.1

methodname句, 7.1

MINUS, 20.1

non_mt_arg_list句, 7.1

non_mt_attr_list句, 7.1

non_mt_attrname_list句, 7.1

non_mt_attrspec_list句, 7.1

non_mt_cond_list句, 7.1

package_name句, 7.1, 7.1

param_list句, 7.1

qualified_type_name句, 7.1

問合せ, 20.1

query_ref句, 7.1

relation_variable, 20.1

セット, 20.1

構文の表記, 1.2.3

time_spec句, 7.1

UNIONおよびUNION ALL, 20.1

ビュー, 20.1

xml_attr_list句, 7.1

xml_attribute_list句, 7.1

xqryargs_list句, 7.1

.cqlx

大/小文字, 1.2.1

CDATA, 1.2.1

CEP DDLの使用, 1.2.1

コメント, 1.2.1

表記規則, 1.2.1

ルール, 1.2.1

文の終端文字, 1.2.1

空白, 1.2.1

createElemInfoジオメトリ・メソッド, 16.2.7, 16.2.7 createGeometryジオメトリ・メソッドd, 16.2.7 createLinearPolygonジオメトリ・メソッド, 16.2.7 createPointジオメトリ・メソッド, 16.2.7 createRectangleジオメトリ・メソッド, 16.2.7

D

データ・カートリッジ

概要, 1.1.12, 14.1

アプリケーション・コンテキスト, 14.1.2

complex_type

コンストラクタ呼出し, 7.1

フィールド・アクセス, 7.1

インスタンス化, 7.1

メソッド・アクセス, 7.1

データ・カートリッジ名

java, 15.1.1

jdbc, 17.1.1

spatial, 16.1.1

データ型, 2.1.2 Oracle CQL問合せ, 18.7 Oracle JDBCデータ・カートリッジ

アプリケーション・コンテキスト, 17.1.4

Oracle Spatial

アプリケーション・コンテキスト, 16.1.4

TABLE問合せ, 18.2.7, 20.1 タイプ

Java, 15.1

Oracle JDBC, 17.1

Oracle Spatial, 16.1

ビュー・スキーマ, 20.1 データ宛先

概要, 1.1.8, 1.1.8.2

データ・ソース

キャッシュ, 1.1.10

関数表, 1.1.9.3

リレーショナル・データベース表, 1.1.9.1

表, 1.1.9

XML表, 1.1.9.2

data_cartridge_name

句, 5.1

datatype構文, 2.1 データ型

概要, 2.1

別名, 2.7.2.1

BIGINT, 2.1.1

BOOLEAN, 2.1.1

組込み, 2.1.1

BYTE, 2.1.1

CHAR, 2.1.1

比較規則, 2.2.1

概要, 2.2

文字値, 2.2.3

変換

概要, 2.2.4

明示的, 2.2.4.2

暗黙的, 2.2.4.1

JDBC, 2.2.4.3

SQL, 2.2.4.3

ユーザー定義関数, 2.2.4.4, 2.2.4.5, 13.1.2

データ・カートリッジ, 2.1.2 日付値の比較規則, 2.2.2 DOUBLE, 2.1.1 列挙, 2.1.3 関数を使用した評価, 2.1.3 FLOAT, 2.1.1 書式モデル

概要, 2.4

日時, 2.4.2, 8.1

数値, 2.4.1

INTEGER, 2.1.1 INTERVAL, 2.1.1 リテラル

概要, 2.3

浮動小数点数, 2.3.2.2

整数, 2.3.2.1

期間, 2.3.4

interval day to second, 2.3.4.1

テキスト, 2.3.1

タイムスタンプ, 2.3.3

ユーザー定義関数でのマッピング, 13.1.2 OBJECT, 2.1.1 不透明, 2.1.1 Oracle JDBCデータ・カートリッジ, 17.1.2 Oracle Spatial, 16.1.2.1 その他, 2.1.2, 2.1.3 TIMESTAMP, 2.1.1 型の別名, 2.7.2.1 サポートされていない, 2.1.2, 2.1.3 ユーザー定義関数, 13.1.2 XMLTYPE, 2.1.1 日時リテラル

概要, 2.3.3

xsd

dateTime, 2.3.3

day, 7.1 days, 7.1 DDL

問合せ, 20.1

ビュー, 20.1

小数点, 2.3.2.2 decode

算術式, 5.1

null, 2.5.2

decode構文, 5.1 DEFINE句

概要, 19.4

相関名, 19.4.2, 19.4.3

派生したストリーム, 1.1.1.2, 1.1.1.2 distanceジオメトリ・メソッド, 16.2.7 distinct

算術式, 5.1

組込み集計関数 9.1

関数式, 5.1

リレーション, 1.1.2

select_clause, 20.1

ドキュメント, 5.1 DOUBLEデータ型, 2.1.1 二重引用符, 2.3.1 Dstreamリレーションからストリームへの演算子, 4.1.2 DURATION句, 19.9 DURATION MULTIPLES OF句, 19.9 duration_clause構文, 19.9

E

Eclipse, 1.4.2

列挙データ型, 2.1.3

等価性テスト, 6.2

errorFunction関数, 10.1

errorFunctionComplemented関数, 10.1

イベント・シンク

概要, 1.1.8, 1.1.8.2

イベント・ソース

概要, 1.1.8, 1.1.8.1

キャッシュ, 1.1.10

関数表, 1.1.9.3

プル, 1.1.8.1, 18.2.8, 18.6

プッシュ, 1.1.8.1

リレーショナル・データベース表, 1.1.9.1

表, 1.1.9

XML表, 1.1.9.2

exp関数, 12.1 expm1関数, 12.1 式

概要, 5

aggr_distinct_expr, 5.1

aggr_expr, 5.1

集計, 5.1, 5.1

集計(distinct), 5.1

arith_expr, 5.1

arith_expr_list, 5.1

算術, 5.1, 5.1

case, 5.1

case_expr, 5.1

decode, 5.1, 5.1

func_expr, 5.1

関数, 5.1, 5.1, 5.1, 5.1, 5.1

オブジェクト, 5.1

object_expr, 5.1

順序, 5.1

order_expr, 5.1

xml_agg_expr, 5.1

xml_parse_expr, 5.1

xmlcolattval_expr, 5.1

xmlelement_expr, 5.1

xmlforest_expr, 5.1

extended_builtin_aggr構文, 9.1

F

factorial関数, 10.1

fieldname

句, 7.1, 7.1

FILTERジオメトリ・フィルタ演算子, 16.2.7 first関数, 9.1.1 固定期間のイベント欠落の検出, 19.9.1 fixed_length_datatype構文, 2.1 FLOATデータ型, 2.1.1 floor関数, 10.1 floor1関数, 12.1 書式モデル

概要, 2.4

日時, 2.4.2, 8.1

数値, 2.4.1

from_clause構文, 18.2.1.3, 18.4.2, 20.1 func_expr構文, 5.1 func_name構文, 5.1 関数

abs, 12.1

abs1, 12.1

abs2, 12.1

abs3, 12.1

acos, 12.1

asin, 12.1

atan, 12.1

atan2, 12.1

autoCorrelation, 11.1.2

avg, 9.1.1

beta, 10.1

beta1, 10.1

betaComplemented, 10.1

binomial, 10.1

binomial1, 10.1

binomial2, 10.1

binomialComplemented, 10.1

bitMaskWithBitsSetFromTo, 10.1

cbrt, 12.1

ceil, 10.1

ceil1, 12.1

chiSquare, 10.1

chiSquareComplemented, 10.1

concat, 8.1

correlation, 11.1.2

cos, 12.1

cosh, 12.1

count, 9.1.1

covariance, 11.1.2

errorFunction, 10.1

errorFunctionComplemented, 10.1

exp, 12.1

expm1, 12.1

factorial, 10.1

first, 9.1.1

floor, 10.1

floor1, 12.1

gamma, 10.1

gamma1, 10.1

gammaComplemented, 10.1

geometricMean, 11.1.2

geometricMean1, 11.1.2

getseedatrowcolumn, 10.1

harmonicMean, 11.1.2

hash, 10.1

hash1, 10.1

hash2, 10.1

hash3, 10.1

hextoraw, 8.1

hypot, 12.1

i0, 10.1

i0e, 10.1

i1, 10.1

i1e, 10.1

IEEERemainder, 12.1

incompleteBeta, 10.1

incompleteGamma, 10.1

incompleteGammaComplement, 10.1

j0, 10.1

j1, 10.1

jn, 10.1

k0, 10.1

k0e, 10.1

k1, 10.1

k1e, 10.1

kn, 10.1

kurtosis, 11.1.2

lag1, 11.1.2

last, 9.1.1

leastSignificantBit, 10.1

length, 8.1

lk, 8.1

log, 10.1

log1, 12.1

log10, 10.1

log101, 12.1

log1p, 12.1

log2, 10.1

logFactorial, 10.1

logGamma, 10.1

longFactorial, 10.1

max, 9.1.1

mean, 11.1.2

meanDeviation, 11.1.2

median, 11.1.2

min, 9.1.1

moment, 11.1.2

mostSignificantBit, 10.1

negativeBinomial, 10.1

negativeBinomialComplemented, 10.1

normal, 10.1

normal1, 10.1

normalInverse, 10.1

nvl, 8.1

ordsgenerator, 16.2.7

poisson, 10.1

poissonComplemented, 10.1

pooledMean, 11.1.2

pooledVariance, 11.1.2

pow, 12.1

prev, 8.1

product, 11.1.2

quantile, 11.1.2

quantileInverse, 11.1.2

rankInterpolated, 11.1.2

rawtohex, 8.1

rint, 12.1

rms, 11.1.2

round, 12.1

round1, 12.1

sampleKurtosis, 11.1.2

sampleKurtosisStandardError, 11.1.2

sampleSkew, 11.1.2

sampleSkewStandardError, 11.1.2

sampleVariance, 11.1.2

signum, 12.1

signum1, 12.1

sin, 12.1

sinh, 12.1

skew, 11.1.2

sqrt, 12.1

standardDeviation, 11.1.2

standardError, 11.1.2

stirlingCorrection, 10.1

studentT, 10.1

studentTInverse, 10.1

sum, 9.1.1

sumOfInversions, 11.1.2

sumOfLogarithms, 11.1.2

sumOfPowerDeviations, 11.1.2

sumOfPowers, 11.1.2

sumOfSquaredDeviations, 11.1.2

sumOfSquares, 11.1.2

systemtimestamp, 8.1

tables, 1.1.9.3

tan, 12.1

tanh, 12.1

to_bigint, 8.1

to_boolean, 8.1

to_char, 8.1

to_double, 8.1

to_float, 8.1

to_timestamp, 8.1

todegrees, 12.1

toradians, 12.1

trimmedMean, 11.1.2

ulp, 12.1

ulp1, 12.1

variance, 11.1.2

weightedMean, 11.1.2

winsorizedMean, 11.1.2

xmlagg, 9.1.1

xmlcomment, 8.1

xmlconcat, 8.1

xmlexists, 8.1

xmlquery, 8.1

y0, 10.1

y1, 10.1

yn, 10.1

関数の概要

AggregationFunctionFactory, 13.2.2

カテゴリ, 1.1.11

データ型マッピング, 13.1.2

distinctと集計組込み関数, 9.1

java.lang.Math, 1.1.11

ネーミング・ルール, 1.1.11, 2.8.1, 13.1.1

ネストされた集計, 9.1

null, 2.5.1

オーバーロード, 1.1.11, 2.8.1, 13.1.1

オーバーライド, 1.1.11, 2.8.1, 13.1.1

単一行組込み, 1.1.11

ユーザー定義, 1.1.11

G

gamma関数, 10.1

gamma1関数, 10.1

gammacomplemented関数, 10.1

geometricMean関数, 11.1.2

geometricMean1関数, 11.1.2

ジオメトリ・クラス, 16.1.3

get2dMbrジオメトリ・メソッド, 16.2.7

getseedatrowcolumn関数, 10.1

等価性テスト(以上), 6.2

等価性テスト(より大きい), 6.2

グループ化

ELEMENT_TIME, 3.2.2.2

GROUP BY句, 20.1

ORDER BY句, 19.6

PARTITION BY句, 19.5

分割されたウィンドウ, 4.1.2, 4.1.2, 4.1.2

グループ一致, 19.1.2

H

harmonicMean関数, 11.1.2

hash関数, 10.1

hash1関数, 10.1

hash2関数, 10.1

hash3関数, 10.1

HAVING句, 20.1

ハートビート

システム・タイムスタンプを持つリレーション, 1.1.13

システム・タイムスタンプを持つストリーム, 1.1.13

hextoraw関数, 8.1 hour, 7.1 hours, 7.1 hypot関数, 12.1

I

i0関数, 10.1

i0e関数, 10.1

i1関数, 10.1

i1e関数, 10.1

identifier

句, 7.1

構文, 7.1

IEEERemainder関数, 12.1 IN句, 20.1 in条件, 6.8 in_condition_membership構文, 6.8.2 in_condition_set構文, 20.1 INCLUDE TIMER EVENTS句, 19.10 incompleteBeta関数, 10.1 incompleteGamma関数, 10.1 incompleteGammaComplement関数, 10.1 増分的な計算

概要, 13.1.1.2

実装, 13.2.2

実行時の動作, 13.2.2

非等価テスト, 6.2 内部結合, 18.4.1 INSIDEジオメトリ関係演算子, 16.2.7 INTEGERデータ型, 2.1.1 integer構文, 2.3.2.1 整数

CQL構文内, 2.3.2.1

精度, 2.3.2.1

INTERSECT句, 20.1 INTERVALデータ型, 2.1.1 interval_value構文, 2.3.4.1, 7.1 IS NOT NULL条件, 6.6 IS NULL条件, 6.6 is-total-order, 1.1.13 Istreamリレーションからストリームへの演算子, 4.1.2

J

j0関数, 10.1

j1関数, 10.1

Javaデータ・カートリッジ

概要, 15.1

クラスのロード

概要, 15.1.2

アプリケーション・クラス・スペース・ポリシー, 15.1.2.1

例, 15.1.2.4

メソッド解決, 15.1.3

自動インポートなしクラス・スペース・ポリシー, 15.1.2.2

サーバー・クラス・スペース・ポリシー, 15.1.2.3

データ・カートリッジ名, 15.1.1 データ型マッピング, 15.1.4 デフォルト・パッケージ名, 15.1.1 java.langパッケージ, 15.1.1 制限, 15.1.5 メソッド解決, 15.1.3 Oracle CQL問合せサポート, 15.1.5 問合せ

制限, 15.1.5

エクスポートしたJavaクラスの使用, 15.2.2

Java APIの使用, 15.2.1

修飾されていない型, 15.1.1 java.lang.Math組込み関数, 12 jc:jdbc-ctx, 17.1.4.2 jdbc:jdbc-context, 17.1.4.1 jn関数, 10.1 結合

概要, 18, 18.4

内部, 18.4.1

左外部, 18.4.2, 18.4.2.1

外部, 18.4.2, 18.4.2.1, 18.4.2.2, 18.4.2.3

外部結合の見直し, 18.4.2.3

右外部, 18.4.2, 18.4.2.2

単純, 18.4.1

ビュー, 18.3.1

K

k0関数, 10.1

k0e関数, 10.1

k1関数, 10.1

k1e関数, 10.1

オブジェクト名のキーワード, 2.8.1, 7.1, 7.1

kn関数, 10.1

kurtosis関数, 11.1.2

L

lag1関数, 11.1.2

last関数, 9.1.1

leastSignificantBit関数, 10.1

左外部結合, 18.4.2, 18.4.2.1

length関数, 8.1

等価性テスト(より小さい), 6.2

表記規則

概要, 1.2.1

大/小文字, 1.2.1, 1.2.1

CDATA, 1.2.1, 1.2.1

CEP DDLの使用, 1.2.1, 1.2.1

コメント, 1.2.1

.cqlx, 1.2.1

問合せ, 1.2.1

文の終端文字, 1.2.1, 1.2.1

ビュー, 1.2.1

空白, 1.2.1, 1.2.1

LIKE条件, 6.4, 8.1 like_condition構文, 6.4 link

句, 5.1

リテラル, 2.3 lk関数, 8.1 ロケール

小数点, 2.3.2.2

引用符なしの識別子, 2.8.1

ORDER BY, 18.2.9

RAWTOHEX, 8.1

テキスト・リテラル, 2.3.1

log関数, 10.1 log1関数, 12.1 log10関数, 10.1 log101関数, 12.1 log1p関数, 12.1 log2関数, 10.1 logFactorial関数, 10.1 logGamma関数, 10.1 論理条件, 6.3

AND, 6.3

NOT, 6.3

OR, 6.3

XOR, 6.3

longFactorial関数, 10.1 l-value

句, 7.1

M

MATCH_RECOGNIZE句

概要, 19

集計

概要, 19.1.3

相関変数の制限, 19.1.3.2, 19.1.3.3, 19.1.3.4, 19.1.3.5

count, 19.1.3.5

count(*), 19.1.3.5

count(identifier.*), 19.1.3.5

count(identifier.attr), 19.1.3.5

最終, 19.1.3.1

first, 19.1.3.6

last, 19.1.3.6

prev, 19.1.4

実行中, 19.1.3.1

ALL MATCHES句

概要, 19.7

部分的な重複パターン, 19.7

全体的な重複パターン, 19.7

相関変数, 19.1 DEFINE句, 19.4 DURATION句, 19.9 DURATION MULTIPLES OF句, 19.9 例

イベント欠落の検出, 固定期間, 19.12.5

パターン検出, 19.12.1

集計を使用したパターン検出, 19.12.3

partition byを使用したパターン検出, 19.12.2

WITHIN句, 19.12.4

グループ一致, 19.1.2 INCLUDE TIMER EVENTS句, 19.10 MEASURES句, 19.2 ORDER BY句, 19.6 PARTITION BY句, 19.5 PATTERN句

概要, 19.3

二者択一演算子, 19.3.2

デフォルト, 19.3.1

グループ一致, 19.1.2

演算子のグループ化, 19.3.2

量指定子, 19.3.1

正規表現, 19.3.1

シングルトン一致, 19.1.2

問合せ, 18.2.4 シングルトン一致, 19.1.2 副句

オプション, 19.1

主な, 19.1

SUBSET句, 19.11 WHERE句, 19.1.1 WITHIN句, 19.8 WITHIN INCLUSIVE句, 19.8 max関数, 9.1.1 MBR

ジオメトリ索引, 16.1.2.4

get2dMbrメソッド, 16.2.7

getMBRメソッド, 16.1.2.7.2

mean関数, 11.1.2 meanDeviation関数, 11.1.2 measure_column構文, 19.2 MEASURES句, 19.2 median関数, 11.1.2 methodname

句, 7.1

millisecond, 7.1 milliseconds, 7.1 min関数, 9.1.1 最小境界矩形。「MBR」を参照 MINUS句, 20.1 minute, 7.1 minutes, 7.1 moment関数, 11.1.2 mostSignificantBit関数, 10.1 マルチバイト文字, 2.8.1

N

ネーミング・ルール

概要, 2.8.1

NaN, 9.1.1 nanosecond, 7.1 nanoseconds, 7.1 negativeBinomial関数, 10.1 negativeBinomialComplemented関数, 10.1 NNジオメトリ関係演算子, 16.2.7 non_mt_arg_list

句, 7.1

構文, 7.1

non_mt_arg_list_set構文, 6.8.2 non_mt_attr_list

句, 7.1

構文, 7.1

non_mt_attrname_list

句, 7.1

構文, 7.1

non_mt_attrspec_list

句, 7.1

構文, 7.1

non_mt_cond_list

句, 7.1

構文, 7.1

non_mt_corr_list構文, 19.11 non_mt_corrname_definition_list構文, 19.4 non_mt_measure_list構文, 19.2 non_mt_projterm_list構文, 20.1 non_mt_relation_list構文, 20.1 non_mt_subset_definition_list構文, 19.11 イベントの欠落の検出

概要, 19.12.5

固定期間, 19.9.1, 19.12.5

反復的, 19.9.2

イベントの欠落, 19.12.5 normal関数, 10.1 normal1関数, 10.1 normalInverse関数, 10.1 NOT条件, 6.3, 6.3 NOT IN句, 20.1 null_conditions構文, 6.6 null_spec構文, 20.1 null

概要, 2.5

条件, 6.6

decode, 2.5.2

条件内, 2.5.3, 2.5.3

関数内, 2.5.1

IS NOT NULL条件, 6.6

IS NULL条件, 6.6

nvl関数, 8.1

値の変換, 8.1

比較条件, 2.5.2

数値の精度, 2.3.2.2 number構文, 2.3.2.2 数値リテラル

NaN, 9.1.1

数値

概要, 2.2.1

比較規則, 2.2.1

nvl関数, 8.1

O

OBJECTデータ型, 2.1.1

オブジェクト名とキーワード, 2.8.1, 7.1, 7.1

object_expr構文, 5.1

OCEP_JAVA_CARTRIDGE_CLASS_SPACE, 15.1.2.2, 15.1.2.3

ON句, 18.4.2

不透明なデータ型, 2.1.1

オペランド, 4

演算

リレーションからストリームへ, 1.1.4

ストリームからストリームへ, 1.1.5

演算子, 4

算術, 4.1.2

バイナリ, 4.1.1

連結, 4.1.2, 4.1.2, 8.1, 8.1

優先順位, 4.1.2

リレーションからストリームへ

Dstream, 4.1.2

Istream, 4.1.2

Rstream, 4.1.2

ストリームからリレーションへ

概要, 1.1.3

デフォルト, 1.1.3.3

分割されたS[Partition By A1 ... Ak Rows N Range T], 4.1.2

分割されたS[Partition By A1 ... Ak Rows N Range T1 Slide T2], 4.1.2

分割されたS[Partition By A1 ... Ak Rows N], 4.1.2

S[Now]時間ベース, 4.1.2

S[Range C on E]定数値ベース, 4.1.2

S[Range T]時間ベース, 4.1.2

S[Range T1 Slide T2]時間ベース, 4.1.2

S[Range Unbounded]時間ベース, 4.1.2

S[Rows N]タプルベース, 4.1.2

S[Rows N1 slide N2]タプルベース, 4.1.2

単項, 4.1.1 opt_group_by_clause構文, 20.1 opt_having_clause構文, 20.1 opt_where_clause構文, 20.1 OR条件, 6.3, 6.3 Oracle JDBCデータ・カートリッジ

概要, 17.1

アプリケーション・コンテキスト

概要, 17.1.4

jc:jdbc-ctx, 17.1.4.2

jdbc:jdbc-context, 17.1.4.1

データ・カートリッジ名, 17.1.1 データ型マッピング

概要, 17.1.3

param要素, 17.2.1.2.1

return-component-type要素, 17.2.1.2.2

sql要素, 17.2.1.2.3

Oracle CQL問合せ, 17.2.2 有効範囲, 17.1.2 SQL文, 17.2.1 Oracle Spatial

概要, 16.1

アプリケーション・コンテキスト, 16.1.4

座標系, 16.1.2.3

データ・カートリッジ名, 16.1.1

データ型マッピング, 16.1.3

関数

ordsgenerator, 16.2.7

ジオメトリ・クラス, 16.1.3 ジオメトリ・メソッド

概要, 16.1.2.7

bufferPolygon, 16.2.7

createElemInfo, 16.2.7, 16.2.7

createGeometry, 16.2.7

createLinearPolygon, 16.2.7

createPoint, 16.2.7

createRectangle, 16.2.7

distance, 16.2.7

get2dMbr, 16.2.7

to_Geometry, 16.2.7

to_JGeometry, 16.2.7

索引, 16.1.2.4 MBR, 16.1.2.4, 16.1.2.7.2, 16.2.7 演算子

ANYINTERACT, 16.2.7

CONTAIN, 16.2.7

FILTER, 16.2.7

フィルタ, 16.1.2.6

INSIDE, 16.2.7

NN, 16.1.2.6, 16.2.7

リレーション, 16.1.2.5

WITHINDISTANCE, 16.2.7

縦座標系, 16.1.2.3 有効範囲

概要, 16.1.2

座標系, 16.1.2.3

データ型, 16.1.2.1

要素情報配列, 16.1.2.2

フィルタ演算子, 16.1.2.6

ジオメトリ索引, 16.1.2.4

ジオメトリ・メソッド, 16.1.2.7

MBR, 16.1.2.4

縦座標系, 16.1.2.3

関係演算子, 16.1.2.5

Oracleツール

概要, 1.4

CQLのサポート, 1.4

ORDER BY句, 19.6

概要, 20.1, 20.1

データ・カートリッジ

フィールド・アクセス, 7.1

SELECT, 18.2.9 order by top, 20.1 行, 20.1 ORDER BY ROWS句, 20.1 order_by_clause構文, 18.2.9, 20.1 order_by_list構文, 20.1 order_by_top_clause構文, 20.1 order_expr構文, 5.1 orderterm構文, 20.1 ordsgenerator関数, 16.2.7 外部結合の見直し, 18.4.2.3 外部結合, 18.4.2, 18.4.2.1, 18.4.2.2, 18.4.2.3

ON句, 18.4.2

重複パターン

部分, 19.7

全体, 19.7

関数のオーバーロード, 1.1.11, 2.8.1, 13.1.1 オーバーライド

関数, 1.1.11, 2.8.1, 13.1.1

P

package_name

句, 7.1, 7.1

param_list

句, 7.1

パラメータ化された問合せ

概要, 18.2.11

bindings要素, 18.2.11.2

表記規則, 18.2.11.4

Oracle CQL文, 18.2.11.1

パラメータ値, 18.2.11.4

実行時, 18.2.11.5

ビュー, 18.2.11

部分的な重複パターン, 19.7 分割

行, 4.1.2

行と範囲, 4.1.2

行、範囲およびスライド, 4.1.2

ウィンドウの指定, 1.1.3.2

PARTITION BY句, 19.5 PATTERN句

概要, 19.3

二者択一演算子, 19.3.2

デフォルト, 19.3.1

グループ一致, 19.1.2

演算子のグループ化, 19.3.2

組合せ, 19.3.2

量指定子, 19.3.1

正規表現, 19.3.1

シングルトン一致, 19.1.2

パターン量指定子

(), 19.3.2

*, 19.3.1

*?, 19.3.1

+, 19.3.1

+?, 19.3.1

?, 19.3.1

??, 19.3.1

|, 19.3.2

0または1回(最大), 19.3.1

0または1回(最小), 19.3.1

0回以上(最大), 19.3.1

0回以上(最小), 19.3.1

1回以上(最大), 19.3.1

1回以上(最小), 19.3.1

二者択一, 19.3.2

1回のみ, 19.3.1

グループ化, 19.3.2

なし, 19.3.1

パターン認識.See MATCH_RECOGNIZE句 pattern_clause構文, 19.3 pattern_def_dur_clause構文, 19.1 pattern_definition_clause構文, 19.4 pattern_inc_timer_evs_clause構文, 19.10 pattern_measures_clause構文, 19.2 pattern_partition_clause構文, 19.5, 19.6 pattern_quantifier構文, 19.3.1 pattern_recognition_clause構文, 19.1 pattern_skip_match_clause構文, 19.7 パターン・マッチング条件

LIKE, 6.4

lk関数, 8.1

poisson関数, 10.1 poissonComplemented関数, 10.1 pooledMean関数, 11.1.2 pooledVariance関数, 11.1.2 pow関数, 12.1 優先順位

演算子, 4.1.2

精度と桁数, 2.3.2.2 prev関数, 8.1 product関数, 11.1.2 projterm構文, 20.1 pseudo_column構文, 7.1 疑似列

概要, 3

attr句, 7.1

ELEMENT_TIME

概要, 3.2

アプリケーション・タイムスタンプ値, 3.2.1.2

bigintアプリケーション・タイムスタンプ値, 3.2.1.2.1

intアプリケーション・タイムスタンプ値, 3.2.1.2.1

システム・タイムスタンプ値, 3.2.1.1

timestampアプリケーション・タイムスタンプ値, 3.2.1.2.2

GROUP BY, 3.2.2.2

PATTERN, 3.2.2.3

SELECT, 3.2.2.1

プル・イベント・ソース, 1.1.8.1, 18.2.8, 18.6 プッシュ・イベント・ソース, 1.1.8.1

Q

qualified_type_name

句, 7.1

quantile関数, 11.1.2 quantileInverse関数, 11.1.2 問合せ

概要, 18, 18.2

組込みウィンドウ, 18.2.3

キャッシュ, 18.2.8, 18.5

データ・カートリッジ, 18.7

差分の検出, 18.2.10

DIFFERENCE USING, 18.2.10

MATCH_RECOGNIZE句, 18.2.4

ORDER_BY, 18.2.9

パラメータ化, 18.2.11

単純, 18.2.2

ソート, 18.2.9

副問合せ, 1.1.6, 18.1

TABLE, 18.2.7, 20.1

表

データ・カートリッジ, 18.2.7, 20.1

リレーショナル・データベース, 18.2.5

リレーショナル・データベースのデータ型, 2.2.4.3

XML, 18.2.6

ビュー, 18.3 XMLTABLE, 18.2.6 問合せ

属性

id, 20.1

文, 20.1 query構文, 18.2, 20.1 query_ref

句, 7.1

構文, 7.1

引用符

概要, 2.3.1

ロケール, 2.8.1

テキスト・リテラル, 2.3.1

quoted_string_double_quotes構文, 7.1 quoted_string_single_quotes構文, 7.1

R

範囲

条件, 6.5

ウィンドウの指定

概要, 1.1.3.1

デフォルト, 1.1.3.1

rankInterpolated関数, 11.1.2 rawtohex関数, 8.1 反復的なイベント欠落の検出, 19.9.2 regexp構文, 19.3.1 regexp_grp_alt構文, 19.3.2 relation_variable構文, 18.2.1.3, 20.1 リレーショナル・データベース表, 1.1.9.1 リレーション

概要, 1.1.1.2

基本, 1.1.1.2

distinct, 1.1.2

ハートビート, 1.1.13

操作指示子

削除(-), 1.1.1.3

挿入(+), 1.1.1.3

更新(U), 1.1.1.3

スキーマ, 1.1.1.2 タプル種類インジケータ, 1.1.1.3 リレーションからストリームへの演算子, 1.1.4

Dstream, 4.1.2

Istream, 4.1.2

Rstream, 4.1.2

予約語, 2.8.1, 2.8.1, 7.1 右外部結合, 18.4.2, 18.4.2.2 rint関数, 12.1 rms関数, 11.1.2 round関数, 12.1 round1関数, 12.1 Rstreamリレーションからストリームへの演算子, 4.1.2

S

sampleKurtosis関数, 11.1.2

sampleKurtosisStandardError関数, 11.1.2

sampleSkew関数, 11.1.2

sampleSkewStandardError関数, 11.1.2

sampleVariance関数, 11.1.2

スケジューラ

時間, 1.1.13

スキーマ

リレーション, 1.1.1.2

ストリーム, 1.1.1.1, 1.1.1.1.2

スキーマ・オブジェクト

命名

例, 2.8.3

ガイドライン, 2.8.2

searched_case構文, 5.1 searched_case_list構文, 5.1 second, 7.1 seconds, 7.1 select_clause

distinct, 20.1

構文, 18.2.1.2, 20.1

SERVER_CLASS_SPACE, 15.1.2.3 集合文

概要, 20.1

INおよびNOT IN, 20.1

INTERSECT, 20.1

MINUS, 20.1

UNIONおよびUNION ALL, 20.1

sfw_block構文, 18.2.1.1, 20.1 signum関数, 12.1 signum1関数, 12.1 単純な比較条件, 6.2 単純結合, 18.4.1 単純な問合せ, 18.2.2 simple_case構文, 5.1 simple_case_list構文, 5.1 sin関数, 12.1 一重引用符, 2.3.1 シングルトン一致, 19.1.2 sinh関数, 12.1 skew関数, 11.1.2 スライド

ウィンドウの指定

概要, 1.1.3.1

デフォルト, 1.1.3.1

SOME演算子, 6.2 問合せ結果のソート, 18.2.9 SQL99, 1.3 SQLX

概要, 5.1

コンテンツ, 5.1

データ型変換, 2.2.4.3

ドキュメント, 5.1

式, 5.1

func_expr, 5.1

関数, 8.1

整形式, 5.1

xml_agg_expr, 5.1

xml_parse_expr, 5.1

xmlagg関数, 9.1.1

xmlcolattval_expr, 5.1

xmlcomment関数, 8.1

xmlconcat関数, 8.1

xmlelement_expr, 5.1

xmlexists関数, 8.1

xmlforest_expr, 5.1

xmlquery関数, 8.1

SQL/XML。「SQLX」を参照 sqrt関数, 12.1 standardDeviation関数, 11.1.2 standardError関数, 11.1.2 標準, 1.3 文の終端文字, 1.2.1 stirlingCorrection関数, 10.1 ストリーム

概要, 1.1.1.1

基本, 1.1.1.2

チャネル, 1.1.1.1.1

派生, 1.1.1.2, 1.1.1.2

ハートビート, 1.1.13

問合せのselector, 1.1.1.1.4

リレーション, 1.1.1.2, 1.1.1.2

スキーマ, 1.1.1.1, 1.1.1.1.2

タプル, 1.1.1.1

ストリームからリレーションへの演算子

概要, 1.1.3

デフォルト, 1.1.3.3

グループ化, 3.2.2.2, 4.1.2, 4.1.2, 4.1.2

分割されたS[Partition By A1 ... Ak Rows N Range T], 4.1.2

分割されたS[Partition By A1 ... Ak Rows N Range T1 Slide T2], 4.1.2

分割されたS[Partition By A1 ... Ak Rows N], 4.1.2

S[Now]時間ベース, 4.1.2

S[Range C on E]定数値ベース, 4.1.2

S[Range T]時間ベース, 4.1.2

S[Range T1 Slide T2]時間ベース, 4.1.2

S[Range Unbounded]時間ベース, 4.1.2

S[Rows N]タプルベース, 4.1.2

S[Rows N1 slide N2]タプルベース, 4.1.2

ストリームからストリームへの演算子, 1.1.5

フィルタ, 1.1.5

MATCH_RECOGNIZE, 1.1.5

プロジェクト, 1.1.5

XMLTABLE, 1.1.5

studentT関数, 10.1 studentTInverse関数, 10.1 副問合せ, 1.1.6, 1.1.6, 18.1 SUBSET句, 19.11 subset_clause

概要, 19.11

構文, 19.11

subset_definition構文, 19.11 subset_name構文, 19.11 sum関数, 9.1.1 sumOfInversions関数, 11.1.2 sumOfLogarithms関数, 11.1.2 sumOfPowerDeviations関数, 11.1.2 sumOfPowers関数, 11.1.2 sumOfSquaredDeviations関数, 11.1.2 sumOfSquares関数, 11.1.2 シノニム。「別名」を参照 構文, 10.1 システム時間, 1.1.13 システム・タイムスタンプ, 1.1.13 systemtimestamp関数, 8.1

T

TABLE問合せ, 18.2.7, 20.1

table_clause構文, 18.2.7, 20.1

表, 1.1.9

問合せ

データ・カートリッジ, 18.2.7, 20.1

リレーショナル・データベース, 18.2.5

リレーショナル・データベースのデータ型, 2.2.4.3

XML, 18.2.6

tan関数, 12.1 tanh関数, 12.1 終端文字, 1.2.1 テキスト・リテラル

概要, 2.3.1

引用符, 2.3.1

時間

概要, 1.1.13

アプリケーション, 1.1.13

アプリケーション・タイムスタンプ, 1.1.13

ハートビート, 1.1.13

is-total-order, 1.1.13

スケジューラ, 1.1.13

システム, 1.1.13

システム・タイムスタンプ, 1.1.13

時間システム・タイムスタンプ, 1.1.13 time_spec

句, 7.1

構文, 7.1

time_unit

構文, 7.1

TIMESTAMP

概要, 2.3.3

xsd

dateTime, 2.3.3

TIMESTAMPデータ型, 2.1.1 タイムスタンプ

アプリケーション, 1.1.13

システム, 1.1.13

to_bigint関数, 8.1 to_boolean関数, 8.1 to_char関数, 8.1 to_double関数, 8.1 to_float関数, 8.1 to_Geometry Geometryメソッド, 16.2.7 to_JGeometry Geometryメソッド, 16.2.7 to_timestamp関数, 8.1 todegrees関数, 12.1 ツールのサポート

開発, 1.4.2

Oracle CEP IDE for Eclipse, 1.4.2

Oracle CEPサーバー, 1.4.1

Oracle CEP Visualizer, 1.4.1

実行時, 1.4.1

toradians関数, 12.1 全体的な重複パターン, 19.7 trimmedMean関数, 11.1.2 タプル

概要, 1.1.1.1

kindインジケータ, 1.1.1.3

ストリーム, 1.1.1.1

U

U

リレーションの更新, 1.1.1.3

ulp関数, 12.1 ulp1関数, 12.1 単項演算子, 4.1.1 UNION ALL句, 20.1 UNION句, 20.1 予約されていない語, 7.1 unreserved_keyword構文, 7.1 ユーザー定義関数

概要, 1.1.11, 13

集計, 13.1.1.2

キャッシュ, 13.1.3

クラスパス, 13.2.1, 13.2.2

データ型マッピング, 13.1.2

実装, 13.1, 13.2

集計, 13.2.2

AggrFunctionImpl, 13.2.2

SingleElementFunction, 13.2.1

単一行, 13.2.1

増分的な計算

概要, 13.1.1.2

実装, 13.2.2

実行時の動作, 13.2.2

単一行, 13.1.1.1 型, 13.1.1 using_clause構文, 18.2.10, 20.1 usingexpr構文, 20.1 usinglist構文, 20.1 usingterm構文, 20.1

V

variable_length_datatype構文, 2.1

variance構文, 11.1.2

ビュー

属性

id, 20.1

スキーマ, 20.1

文, 20.1 ビュー

概要, 18

結合, 18.3.1

問合せ, 18.3

スキーマ, 18.3.2

可視性, 18.3

W

weightedMean関数, 11.1.2

整形式, 5.1

WHERE句

組込み集計関数, 9.1.1

Colt集計関数, 11.1.2

group byおよびhaving句, 9.1.1, 11.1.2

MATCH_RECOGNIZE句, 19.1.1

window_type構文, 1.1.3, 20.1 window_type_partition構文, 4.1.2 window_type_range構文, 4.1.2 window_type_tuple構文, 4.1.2 ウィンドウ, 1.1.3

概要, 1.1.3

Now, 4.1.2

分割, 1.1.3.2, 4.1.2, 4.1.2, 4.1.2

範囲の指定

概要, 1.1.3.1

デフォルト, 1.1.3.1

S[Now]時間ベース, 4.1.2 S[Partition By A1 ... Ak Rows N Range T], 4.1.2 S[Partition By A1 ... Ak Rows N Range T1 Slide T2], 4.1.2 S[Partition By A1 ... Ak Rows N], 4.1.2 S[Range C on E]定数値ベース, 4.1.2 S[Range T]時間ベース, 4.1.2 S[Range T1 Slide T2]時間ベース, 4.1.2 S[Range Unbounded]時間ベース, 4.1.2 S[Rows N]タプルベース, 4.1.2 S[Rows N1 slide N2]タプルベース, 4.1.2 スライドの指定

概要, 1.1.3.1

デフォルト, 1.1.3.1

Unbounded, 4.1.2 winsorizedMean関数, 11.1.2 WITHIN句, 19.8 WITHIN INCLUSIVE句, 19.8 within_clause構文, 19.8 WITHINDISTANCEジオメトリ関係演算子, 16.2.7

X

XML表, 1.1.9.2

xml_agg_expr構文, 5.1

xml_attr構文, 7.1

xml_attr_list

句, 7.1

構文, 7.1

xml_attribute_list

句, 7.1

構文, 7.1

xml_namespace構文, 20.1 xmlagg関数, 9.1.1 xmlcolattval_expr構文, 5.1, 5.1 xmlcomment関数, 8.1 xmlconcat関数, 8.1 xmlexists関数, 8.1 xmlforest_expr構文, 5.1, 5.1 xmlnamespace_clause構文, 20.1 xmlnamespaces_list構文, 20.1 xmlquery関数, 8.1 XMLTABLE問合せ, 18.2.6 xmltable_clause構文, 20.1 XMLTYPEデータ型, 2.1.1 XOR条件, 6.3 xqryarg構文, 7.1 xqryargs_list

句, 7.1

構文, 7.1

xsd

dateTime, 2.3.3

xstream_clause構文, 20.1 xtbl_col構文, 20.1 xtbl_cols_list構文, 20.1

Y

y0関数, 10.1

y1関数, 10.1

yn関数, 10.1

Copyright © 2006, 2012, Oracle and/or its affiliates. All rights reserved.