Oracle® Fusion Middleware

Oracle CQL言語リファレンス

12cリリース(12.2.1.2.0)

E82647-01(原本部品番号:E67756-01)

2016年10月

開発者向けのこのドキュメントは、Oracle Event Processingアプリケーションでストリーミング・データを問い合せるためのSQLに似た言語であるOracle Continuous Query Language (Oracle CQL)のリファレンスを提供します。

Oracle Fusion Middleware Oracle CQL言語リファレンス, 12cリリース(12.2.1.2.0)

E82647-01

Copyright © 2007, 2016, Oracle and/or its affiliates. All rights reserved.

原本著者: Oracle® Corporation

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(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の登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

- 構文の図

このマニュアルの変更点

第I部 Oracle CQLについて

1 Oracle CQLの概要

- 1.1 Oracle CQLの基本

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

- 1.1.1.1 ストリーム

- 1.1.1.1.1 ストリームおよびチャネル

- 1.1.1.1.2 チャネルのスキーマ

- 1.1.1.1.3 チャネルの問合せ

- 1.1.1.1.4 ダウンストリーム・チャネルに対する問合せ出力の制御

- 1.1.1.2 リレーション

- 1.1.1.3 リレーションとOracle Stream Analytics Tuple Kindインジケータ

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

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

- 1.1.3.1 Range、RowおよびSlide

- 1.1.3.1.1 問合せ開始時と空のリレーションの場合のRange、Rowsおよび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.10.1 Springアセンブリ・ファイル

- 1.1.10.2 アプリケーション構成ファイル

- 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 Stream Analyticsサーバー

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.3.4.2 INTERVALYEARTOMONTH

- 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.1.2.1 intまたはbigintに対して評価を行う派生タイムスタンプ式

- 3.2.1.2.2 timestampに対して評価を行う派生タイムスタンプ式

- 3.2.1.3 インラインCQLビューのELEMENT_TIME

- 3.2.1.4 副問合せの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の使用

- 3.3 ORA_QUERY_ID疑似列

4 演算子

- 4.1 演算子の概要

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

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

- 4.2 算術演算子

- 4.3 連結演算子

- 4.4 二者択一演算子

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

- 4.5.1 S[now]

- 4.5.1.1 例

- 4.5.2 S[range T]

- 4.5.2.1 例

- 4.5.3 S[range T1 slide T2]

- 4.5.3.1 例

- 4.5.4 S[range unbounded]

- 4.5.4.1 例

- 4.5.5 S[range C on E]

- 4.5.5.1 例

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

- 4.6.1 S [rows N]

- 4.6.1.1 例

- 4.6.2 S [rows N1 slide N2]

- 4.6.2.1 例

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

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

- 4.7.1.1 例

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

- 4.7.2.1 例

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

- 4.7.3.1 例

- 4.8 ユーザー定義のストリームからリレーションへのウィンドウ演算子

- 4.8.1 ユーザー定義ウィンドウの実装

- 4.8.1.1 ユーザー定義の汎用時間ウィンドウの実装方法

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

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

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

5 式

- 5.1 式の概要

- 5.2 aggr_distinct_expr

- 5.2.1 例

- 5.3 aggr_expr

- 5.3.1 例

- 5.4 arith_expr

- 5.4.1 例

- 5.5 arith_expr_list

- 5.5.1 例

- 5.6 case_expr

- 5.6.1 例

- 5.7 decode

- 5.7.1 例

- 5.8 func_expr

- 5.8.1 例

- 5.9 object_expr

- 5.9.1 例

- 5.10 order_expr

- 5.10.1 例

- 5.11 xml_agg_expr

- 5.11.1 例

- 5.12 xmlcolattval_expr

- 5.12.1 例

- 5.13 xmlelement_expr

- 5.13.1 例

- 5.14 xmlforest_expr

- 5.14.1 例

- 5.15 xml_parse_expr

- 5.15.1 例

6 条件

- 6.1 条件の概要

- 6.1.1 条件の優先順位

- 6.2 比較条件

- 6.3 論理条件

- 6.4 LIKE条件

- 6.4.1 例

- 6.5 RANGE条件

- 6.6 NULL条件

- 6.7 複合条件

- 6.8 IN条件

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

- 6.8.2 NOT INとNull値

7 共通のOracle CQL DDL句

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

- 7.2 array_type

- 7.3 attr

- 7.4 attrspec

- 7.5 complex_type

- 7.6 const_bigint

- 7.7 const_int

- 7.8 const_string

- 7.9 const_value

- 7.10 identifier

- 7.11 l-value

- 7.12 methodname

- 7.13 non_mt_arg_list

- 7.14 non_mt_attr_list

- 7.15 non_mt_attrname_list

- 7.16 non_mt_attrspec_list

- 7.17 non_mt_cond_list

- 7.18 out_of_line_constraint

- 7.19 param_list

- 7.20 qualified_type_name

- 7.21 query_ref

- 7.22 time_spec

- 7.23 xml_attribute_list

- 7.24 xml_attr_list

- 7.25 xqryargs_list

第II部 関数

8 組込みの単一行関数

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

- 8.1 concat

- 8.2 hextoraw

- 8.3 length

- 8.4 lk

- 8.5 nvl

- 8.6 prev

- 8.7 rawtohex

- 8.8 systimestamp

- 8.9 to_bigint

- 8.10 to_boolean

- 8.11 to_char

- 8.12 to_double

- 8.13 to_float

- 8.14 to_timestamp

- 8.15 xmlcomment

- 8.16 xmlconcat

- 8.17 xmlexists

- 8.18 xmlquery

9 組込みの集計関数

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

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

- 9.1 avg

- 9.2 count

- 9.3 first

- 9.4 last

- 9.5 listagg

- 9.6 max

- 9.7 min

- 9.8 sum

- 9.9 xmlagg

10 Colt単一行関数

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

- 10.1 beta

- 10.2 beta1

- 10.3 betaComplemented

- 10.4 binomial

- 10.5 binomial1

- 10.6 binomial2

- 10.7 binomialComplemented

- 10.8 bitMaskWithBitsSetFromTo

- 10.9 ceil

- 10.10 chiSquare

- 10.11 chiSquareComplemented

- 10.12 errorFunction

- 10.13 errorFunctionComplemented

- 10.14 factorial

- 10.15 floor

- 10.16 gamma

- 10.17 gamma1

- 10.18 gammaComplemented

- 10.19 getSeedAtRowColumn

- 10.20 hash

- 10.21 hash1

- 10.22 hash2

- 10.23 hash3

- 10.24 i0

- 10.25 i0e

- 10.26 i1

- 10.27 i1e

- 10.28 incompleteBeta

- 10.29 incompleteGamma

- 10.30 incompleteGammaComplement

- 10.31 j0

- 10.32 j1

- 10.33 jn

- 10.34 k0

- 10.35 k0e

- 10.36 k1

- 10.37 k1e

- 10.38 kn

- 10.39 leastSignificantBit

- 10.40 log

- 10.41 log10

- 10.42 log2

- 10.43 logFactorial

- 10.44 logGamma

- 10.45 longFactorial

- 10.46 mostSignificantBit

- 10.47 negativeBinomial

- 10.48 negativeBinomialComplemented

- 10.49 normal

- 10.50 normal1

- 10.51 normalInverse

- 10.52 poisson

- 10.53 poissonComplemented

- 10.54 stirlingCorrection

- 10.55 studentT

- 10.56 studentTInverse

- 10.57 y0

- 10.58 y1

- 10.59 yn

11 Colt集計関数

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

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

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

- 11.1 autoCorrelation

- 11.2 correlation

- 11.3 covariance

- 11.4 geometricMean

- 11.5 geometricMean1

- 11.6 harmonicMean

- 11.7 kurtosis

- 11.8 lag1

- 11.9 mean

- 11.10 meanDeviation

- 11.11 median

- 11.12 moment

- 11.13 pooledMean

- 11.14 pooledVariance

- 11.15 product

- 11.16 quantile

- 11.17 quantileInverse

- 11.18 rankInterpolated

- 11.19 rms

- 11.20 sampleKurtosis

- 11.21 sampleKurtosisStandardError

- 11.22 sampleSkew

- 11.23 sampleSkewStandardError

- 11.24 sampleVariance

- 11.25 skew

- 11.26 standardDeviation

- 11.27 standardError

- 11.28 sumOfInversions

- 11.29 sumOfLogarithms

- 11.30 sumOfPowerDeviations

- 11.31 sumOfPowers

- 11.32 sumOfSquaredDeviations

- 11.33 sumOfSquares

- 11.34 trimmedMean

- 11.35 variance

- 11.36 weightedMean

- 11.37 winsorizedMean

12 Java.lang.Math関数

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

- 12.1 abs

- 12.2 abs1

- 12.3 abs2

- 12.4 abs3

- 12.5 acos

- 12.6 asin

- 12.7 atan

- 12.8 atan2

- 12.9 cbrt

- 12.10 ceil1

- 12.11 cos

- 12.12 cosh

- 12.13 exp

- 12.14 expm1

- 12.15 floor1

- 12.16 hypot

- 12.17 IEEEremainder

- 12.18 log1

- 12.19 log101

- 12.20 log1p

- 12.21 pow

- 12.22 rint

- 12.23 round

- 12.24 round1

- 12.25 signum

- 12.26 signum1

- 12.27 sin

- 12.28 sinh

- 12.29 sqrt

- 12.30 tan

- 12.31 tanh

- 12.32 todegrees

- 12.33 toradians

- 12.34 ulp

- 12.35 ulp1

13 ユーザー定義関数

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

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

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

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

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

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

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

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

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

第III部 Oracle CQLの使用

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

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

- 14.2 問合せ

- 14.2.1 問合せの構成要素

- 14.2.1.1 Select、From、Whereブロック

- 14.2.1.2 Select句

- 14.2.1.3 From句

- 14.2.1.4 Where句

- 14.2.1.5 Group By句

- 14.2.1.6 Order By句

- 14.2.1.7 Having句

- 14.2.1.8 Binary句

- 14.2.1.9 IDStream句

- 14.2.2 単純な問合せ

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

- 14.2.4 ユーザー定義ウィンドウの問合せ

- 14.2.5 MATCH_RECOGNIZEの問合せ

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

- 14.2.7 XMLTABLEの問合せ

- 14.2.8 関数TABLEの問合せ

- 14.2.9 キャッシュの問合せ

- 14.2.10 問合せ結果のソート

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

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

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

- 14.2.12.2 bindings要素

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

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

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

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

- 14.2.13 副問合せ

- 14.3 ビュー

- 14.3.1 ビューと結合

- 14.3.2 ビューとスキーマ

- 14.4 結合

- 14.4.1 内部結合

- 14.4.2 外部結合

- 14.4.2.1 左外部結合

- 14.4.2.2 右外部結合

- 14.4.2.3 外部結合の見直し

- 14.5 Oracle CQL問合せとOracle Stream Analyticsサーバー・キャッシュ

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

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

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

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

- 14.5.1.4 複数の条件と非等値

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

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

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

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

- 15.1.1 MATCH_RECOGNIZE句とWHERE句

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

- 15.1.3 集計の参照

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

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

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

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

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

- 15.1.3.6 firstとlastの使用

- 15.1.4 prevの使用

- 15.2 MEASURES句

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

- 15.3 PATTERN句

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

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

- 15.4 DEFINE句

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

- 15.4.2 DEFINE句内の属性の参照

- 15.4.3 相関変数間の参照

- 15.5 PARTITION BY句

- 15.6 ALL MATCHES句

- 15.7 WITHIN句

- 15.8 DURATION句

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

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

- 15.9 INCLUDE TIMER EVENTS句

- 15.10 SUBSET句

- 15.11 MATCH_RECOGNIZEの例

- 15.11.1 パターン検出

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

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

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

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

16 Oracle CQL文

- 16.1 Oracle CQL文の概要

- 16.1 問合せ

- 16.1.1 問合せセマンティクス

- 16.1.2 問合せの例

- 16.2 View

はじめに

このリファレンスでは、データのストリーミングをサポートするコンストラクトが追加された、SQLに基づく問合せ言語であるOracle Continuous Query Language (Oracle CQL)について詳細に説明します。Oracle CQLを使用すると、Oracle Stream Analyticsを使用してイベント処理を実行するためのデータ・ストリームに対する問合せを表現できます。Oracle CQLは新しいテクノロジですが、SQL99のサブセットに基づいています。

対象読者

このドキュメントは、Oracle CQLのすべてのユーザーを対象としています。

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

Oracleのアクセシビリティへの取り組みについては、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)にアクセスしてください。

Oracle Supportへのアクセス

サポートをご購入の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 SOAおよびBPM製品の既知の問題: http://www.oracle.com/technetwork/middleware/soasuite/documentation/soaknownissues122120-3111966.html。

- Oracle Stream Analyticsの管理

- Oracle Stream Analyticsによるイベント処理用アプリケーションの開発

- Oracle Stream Analyticsイベント処理スタート・ガイド

- Oracle Stream Analyticsスキーマ・リファレンス

- Oracle Stream AnalyticsのVisualizerの使用

- Oracle Stream Analyticsのカスタマイズ

- Oracle CQLデータ・カートリッジによるアプリケーションの開発

- Oracle Stream Analytics Java APIリファレンス

- Oracle Stream Analyticsの使用

- Oracle Stream Analyticsスタート・ガイド

- SQL99仕様(ISO/IEC 9075-1:1999、ISO/IEC 9075-2:1999、ISO/IEC 9075-3:1999およびISO/IEC 9075-4:1999)

- Oracle Stream Analyticsフォーラム: https://community.oracle.com/community/fusion_middleware/soa_and_process_management/complex_event_processing

表記規則

このマニュアルでは次の表記規則を使用します。

表記規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

斜体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

構文図

このドキュメントには、Oracle CQL、SQL、PL/SQLまたはその他のコマンドライン・コンストラクトのグラフィカル形式またはバッカス・ナウア記法(BNF)による構文説明が含まれています。

このガイドで説明する新機能

12c (12.2.1.0.0) リリースでは、製品名がOracle Stream ExplorerからOracle Stream Analyticsに変更されました。

使用しているスキンによっては、このガイドで示される画面は実装状態と異なる場合があります。相違点は軽微なものです。

第I部 Oracle CQLについて

この部は、次の章で構成されています。

- Oracle CQLの概要

- Oracle CQLの基本要素

- 擬似列

- 演算子

- 式

- 条件

- 共通のOracle CQL DDL句

1 Oracle CQLの概要

この章では、データのストリーミングをサポートするコンストラクトが追加された、SQLに基づく問合せ言語であるOracle Continuous Query Language (Oracle CQL)について説明します。Oracle CQLを使用すると、Oracle Stream Analyticsを使用してデータ・ストリームに対する問合せを表現できます。

この章の内容は次のとおりです。

- Oracle CQLの基本

- Oracle CQL文

- Oracle CQLとSQL標準

- Oracle Stream Analyticsサーバー

1.1 Oracle CQLの基本

データベースは、格納された有限のデータ・セットに対して問合せを実行するために最適化されています。ただし、最近の多くのアプリケーションは、連続的な無制限のデータ・セットに対して問合せを長時間実行する必要があります。設計上、格納されたデータ・セットは、データの大部分が繰り返し問い合され、更新頻度が比較的低い場合に向いています。これとは対照的に、データ・ストリームは、新規要素の挿入を通じて継続的に、通常は排他的に変化するデータを表します。データの大部分を複数回操作することは、不要であるか、実用的ではありません。

センサー・データ・アプリケーション、財務表示、ネットワーク性能測定ツール、ネットワーク監視およびトラフィック管理アプリケーション、クリックストリーム分析ツールなどの多くの種類のアプリケーションでは、データ・セットのかわりにデータ・ストリームが生成されます。これらの種類のアプリケーション・データを管理および処理する際は、厳密な時間によるフォーカスを使用して、データ管理および問合せ機能を作成します。

こうした要件に対応するために、構造化データ・レコードのストリームと格納されたリレーションの概念をサポートするデータ管理インフラストラクチャのOracle Stream Analyticsが導入されました。

統一的な宣言フレームワークを提供するために、データのストリーミングをサポートするコンストラクトが追加されたSQLに基づく問合せ言語のOracle Continuous Query Language (Oracle CQL)が提供されています。

Oracle CQLは次の理念に基づいて設計されています。

- 連続するデータ・ストリームと従来の格納されたデータ・セットに対する大量の問合せをサポートするスケーラビリティ。

- 複雑なシナリオを扱う包括性。たとえば、構成を通じて、問合せの様々な中間ビューを作成できます。

図1-1に、Oracle Stream Analyticsアーキテクチャの簡略化した図を示します。Oracle Stream Analyticsサーバーは、軽量のSpringコンテナをOracle Stream Analyticsアプリケーションに提供します。この図のOracle Stream Analyticsアプリケーションは、イベント・データを入力チャネルに提供するイベント・アダプタで構成されています。入力チャネルは、入力チャネルから提供されるイベントを操作する1つ以上のOracle CQL問合せに関連付けられたOracle CQLプロセッサに接続されています。Oracle CQLプロセッサは、問合せ結果の書込み先となる出力チャネルに接続されています。出力チャネルは、出力チャネルから受信したイベントに基づいてアクションを実行するユーザー定義のPlain Old Java Object (POJO)である、イベントBeanに接続されています。

図1-1 Oracle Stream Analyticsアーキテクチャ

Oracle Stream Analyticsを使用すると、JMS、リレーショナル・データベース表、ローカル・ファイルシステムのファイルなどの各種データ・ソースに対するイベント・アダプタを定義できます。複数の入力チャネルをOracle CQLプロセッサに接続したり、Oracle CQLプロセッサを複数の出力チャネルに接続できます。出力チャネルを別のOracle CQLプロセッサ、アダプタ、キャッシュまたはイベントBeanに接続できます。

Oracle JDeveloperおよびOracle Stream Analytics Visualizerを使用して、次の操作を行います。

- 図1-1のようなイベント処理ネットワーク(EPN)を作成します。

- 1つ以上のOracle CQL問合せをEPNのOracle CQLプロセッサに関連付けます。

- Oracle Stream Analyticsアプリケーションをパッケージし、Oracle Stream Analyticsサーバーにデプロイして実行します。

次の例のような通常の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での副問合せ)が定義され、各ビューは前のビューに基づいています。ビューは常にinputChannelなどの着信チャネルに対して機能します。lastEventsという最初のビューはinputChannelから直接選択します。後続のビューはinputChannelから直接選択するか、前に定義されたビューから選択します。ビューの選択文で返された結果はビューのリレーションに残ったまま維持され、出力チャネルには転送されません。これは問合せの動作です。この例では、inputChannelからの直接の選択と、前に定義されたビューからの選択の両方を行う問合せBBAQueryが定義されます。問合せのselect句から返された結果は、関連付けられている出力チャネルに転送されます(この例ではoutputChannel)。BBAQueryは、タプルベースのストリームからリレーションへの演算子(またはスライディング・ウィンドウ)を使用します。

これらの要素の詳細は、次の項を参照してください。

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

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

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

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

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

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

- パターン認識

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

- 関数

- 時間

- Oracle CQL文

- 表記規則

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

Oracle Stream Analyticsサーバーおよびツールの詳細は、「Oracle Stream Analyticsサーバー」を参照してください。

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

この項では、Oracle CQLを使用して操作する2つの基本的なOracle Stream Analyticsオブジェクトについて説明します。

- ストリーム

- リレーション

Oracle CQLを使用して、ストリームとリレーションの次の操作を実行できます。

- リレーションからリレーションへの演算子: 1つ以上の他のリレーションからのリレーションの生成

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

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

- ストリームからストリームへの演算子: 1つ以上の他のストリームからのストリームの生成

1.1.1.1 ストリーム

ストリームは、Oracle CQL問合せでの操作の対象となる主なデータ・ソースです。

ストリームSは要素のバッグ(またはマルチセット)(s,T)のバッグです。sはSのスキーマを持ち、Tは時間ドメインに属します。

ストリーム要素は、タイムスタンプのタプル挿入のシークエンスとして表すタプル・タイムスタンプ・ペアです。つまり、ストリームは、タイムスタンプされたタプルのシークエンスです。同じタイムスタンプを持つ複数のタプルがある場合があります。入力ストリームのタプルは、タイムスタンプの昇順にシステムに到着する必要があります。詳細は、「時間」を参照してください。

ストリームには名前付き属性のセットで構成される関連付けられたスキーマがあり、ストリームのすべてのタプルはスキーマに準拠しています。

「ストリームのタプル」という用語はストリーム要素のデータ部分(タイムスタンプ・データは除く)の順序付きリストを表します(<s,t>のs)。次の例は、株価表示データ・ストリームがどのように表示されるかを示しています。各ストリーム要素は、<timestamp value>、<stock symbol>および<stock price>で構成されます。

...
<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です。

定義により、ストリームは無制限です。

この項の内容は、次のとおりです。

- ストリームおよびチャネル

- チャネルのスキーマ

- チャネルの問合せ

- ダウンストリーム・チャネルに対する問合せ出力の制御

詳細は、次を参照してください。

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

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

1.1.1.1.1 ストリームおよびチャネル

Oracle Stream Analyticsでは、図1-2に示すようにストリームがチャネルとして表されます。Oracle JDeveloperを使用して、ストリーム・イベント・ソース(PriceAdapter)をチャネル(priceStream)に接続し、チャネルをOracle CQLプロセッサ(filterFanoutProcessor)に接続して、プロセッサにイベントを提供します。Oracle CQLプロセッサをチャネル(filteredStream)に接続し、Oracle CQL問合せ結果を下流コンポーネント(図1-2には表示されていません)に出力します。

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

注意:

Oracle Stream Analyticsでは、プッシュ・イベント・ソースをOracle CQLプロセッサに接続して、Oracle CQLプロセッサをイベント・シンクに接続するためにチャネルを使用する必要があります。その他のOracle Stream Analyticsコンポーネントでは、チャネルはオプションです。

1.1.1.1.2 チャネルのスキーマ

ストリームに接続するイベント・ソースにより、ストリームのスキーマが確定します。PriceAdapterアダプタにより、priceStreamストリームのスキーマが確定します。次の例は、PriceAdapterのイベント処理ネットワーク(EPN)アセンブリ・ファイルを示しています。wlevs:event-type要素では、イベント・タイプPriceEventを定義しています。wlevs:property要素では、このイベント・タイプに含まれる各プロパティのプロパティ名と型を定義しています。

...
<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 チャネルの問合せ

イベント・ソース、チャネルおよびプロセッサが接続されると、ストリームを使用するOracle CQL文を作成できます。次の例に、filterFanoutProcessrの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 ダウンストリーム・チャネルに対する問合せ出力の制御

次の例に示すようにプロセッサの複数の問合せを指定した場合は、すべての問合せ結果がプロセッサの発信チャネルに出力されます(filteredStream)。

オプションで、コンポーネント構成ファイルでchannel要素のselector属性を使用して、出力される問合せ結果を制御できます。この例では、問合せYr3SectorおよびYr2Sectorの問合せ結果はfilteredStreamに出力されますが、問合せYr1Sectorの問合せ結果は出力されません。

<channel>
<name>filteredStream</name>
<selector>Yr3Sector Yr2Sector</selector>
</channel>

アップストリーム・プロセッサに問合せを作成する前に、selectorでchannel要素を構成することもできます。この場合、selector内の名前と一致する問合せ名を指定する必要があります。

1.1.1.2 リレーション

時間的に変化するリレーションRは、時間ドメインからRのスキーマを持つ無制限のタプルのバッグへのマッピングです。

リレーションは、順序がなく、時間的に変化するタプルのバッグです: 言い換えると、瞬間的な関係です。各瞬間において、リレーションは制限されたセットです。また、リレーションの変化する状態を表すように、挿入、削除、または更新を含む、タイムスタンプを持つタプルのシーケンスとして表すこともできます。

ストリームと同様、リレーションにはすべてのタプルが準拠する固定スキーマがあります。

Oracle Stream Analyticsでは基本および派生ストリームとリレーションがサポートされています。外部ソースは基本のストリームとリレーションにデータを提供します。

基本(明示的な)ストリームはOracle Stream Analyticsアダプタに到着するソース・データ・ストリームであるため、時間は非減少です。つまり、各イベントが同一の時間の値を持つ場合があります。

派生した(暗黙的な)ストリーム/リレーションは、問合せ演算子で生成される中間のストリーム/リレーションです。これらの中間の演算子は(ビューを通じて)指定できるため、以降の問合せで指定できます。

基本リレーションは入力リレーションです。

派生したリレーションは、問合せ演算子で生成される中間のリレーションです。これらの中間の演算子は(ビューを通じて)指定できるため、以降の問合せで指定できます。

Oracle Stream Analyticsで、ユーザー自身は基本リレーションを作成しません。Oracle Stream Analyticsサーバーが、必要に応じて基本リレーションを作成します。

リレーションが時間で変化するタプルのバッグであると言う場合、時間は時間ドメインの瞬間を指します。入力リレーションは、時間の経過に沿ったリレーションの変化を表す、タイムスタンプを持つ更新のシーケンスとしてシステムに提示されます。更新はタプルの挿入または削除のいずれかです。更新は、タイムスタンプの昇順でシステムに到着する必要があります。

詳細は、「時間」を参照してください。

1.1.1.3 リレーションとOracle Stream Analytics Tuple Kindインジケータ

デフォルトで、Oracle Stream Analyticsにはタイムスタンプと、そこから生成されたリレーションのOracle Stream AnalyticsTuple Kindインジケータが含まれます。

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 Stream Analytics Tuple Kindインジケータは、次のとおりです。

- 挿入タプルの場合は+

- 削除タプルの場合は-

- 更新済タプルの場合はU。これは、onUpdateEventでcom.bea.wlevs.ede.api.RealtionSinkメソッドを呼び出したときに示されます(詳細は、Oracle Stream Analytics 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の例があるとします。

次の例では、任意の時点で、この問合せの出力リレーションに直前の30秒間に位置-速度の測定を送信した自動車のセットが含まれます。

<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を使用すると、選択した重複タプルの各セットで1つのコピーのみがOracle Stream Analyticsから返されます。重複タプルとはselectリスト内の各式と一致する値を持つタプルです。distinctはselect_clauseと集計関数で使用できます。

distinctの詳細は、次の項を参照してください。

- 組込みの集計関数

- Select句

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

Oracle CQLでは、スライディング・ウィンドウに基づいた、ストリームからリレーションへの演算がサポートされています。通常、S[W]はリレーションです。時間Tのリレーションには、TまでにストリームSに適用されたウィンドウWのすべてのタプルが含まれます。

同じソース(ストリーム)とウィンドウ指定を持つ問合せは、共通のメモリー領域を共有するために最適化されます。これらのパラメータで新しい問合せが追加されると、この共有ウィンドウのコンテンツ(イベント)が自動的に受信されます。この最適化により、問合せは、新しく追加されたイベントを受信していない場合でも初期イベントを出力できます。

window_type::=

図1-3 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]

この項では、ストリームからリレーションへの演算子の次のプロパティについて説明します。

- Range、RowおよびSlide

- Partition

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

詳細は、次を参照してください。

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

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

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

1.1.3.1 Range、RowおよびSlide

キーワードRangeおよびRowsは問合せで操作するデータの量を指定します。

- Rangeでは指定の期間内に到着するタプルの数が指定されます。

- Rowsではタプルの数が指定されます。

Slideキーワードは、問合せからの出力を参照する頻度を、Rangeキーワードは、問合せイベントまでの時間の範囲を指定します。RangeとSlideを一緒に使用すると、問合せを行うイベントのセットになり、そのセットは、問合せウィンドウのスライド先に基づいて変わります。

したがって、セット時間は、問合せのためにイベントが取り出される時間です。時間間隔は、スライドのために指定した時間で割った実際の時間(イベントのタイムスタンプで測定)です。ここからの残りが0ならば、セット時間は、スライドに指定した時間を掛けた時間間隔です。残りが0より大きい場合、セット時間はスライドに指定した時間を時間間隔+ 1に掛けた値になります。

これを別の方法で表すと、timeInterval = actualTime / slideSpecification if((actualTime % slideSpecification) == 0) // No remainder setTime = timeInterval * slideSpecification else setTime = (timeInterval + 1) * slideSpecificationという式になります。

図1-4で、Rangeの指定は「4秒間に相当するデータを参照する必要がある」ことを示し、Slideの指定は「4秒ごとの結果が必要である」ことを示します。この場合、各Slideの指定の終わりに問合せで結果が返されます(「問合せ開始時と空のリレーションの場合のRange、RowsおよびSlide」で説明されている特定の条件を除く)。

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

図1-4で、Rangeの指定は「8秒間に相当するデータを参照する必要がある」ことを示し、Slideの指定は「4秒ごとの結果が必要である」ことを示します。この場合、各Rangeの指定中に2回、問合せで結果が返されます(「問合せ開始時と空のリレーションの場合のRange、RowsおよびSlide」で説明されている特定の条件を除く)。

図1-5 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-2は、問合せ開始時の時間や空のリレーションなど、特定の場合のRange、RowsおよびSlideの動作のリストです。

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

演算子または関数

結果

COUNT(*)またはCOUNT(expression)

空のリレーションの場合、RangeまたはRowsに相当するデータの累積前、および最初のSlide前にすぐに0を返します(GROUP BYがない場合)。

SUM(attribute)および他の集計関数

空のリレーションの場合、RangeまたはRowsに相当するデータの累積前、および最初のSlide前にすぐにnullを返します。

詳細および例は、次を参照してください。

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

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

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

- 関数

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

1.1.3.2 Partition

キーワードPartition Byでは、Partition Byで指定された属性の同一性に基づいて、データ・ストリームSが異なるサブストリームに論理的に分割されます。たとえば、S[Partition By A,C Rows 2]のように分割を指定すると、AとCの値のペアの固有な組合せごとにサブストリームが作成され、それらのサブストリームに対してRowsの指定が適用されます。Rowsの指定は、「2タプルに相当するデータを参照する必要がある」ことを示します。

詳細は、「Range、RowおよびSlide」を参照してください。

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

Oracle CQL問合せにおいて、リレーションが予想される場所でストリームを参照する際(一般に、from句で)、デフォルトでストリームにRange Unboundedウィンドウが適用されます。たとえば、次の例の問合せは同一です。

<query id="q1"><![CDATA[
select * from InputChannel
]]></query>

<query id="q1"><![CDATA[
IStream(select * from InputChannel[RANGE UNBOUNDED])
]]></query>

詳細は、「リレーションからストリームへの演算子」を参照してください

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

ストリームからリレーションへの演算結果を、さらに処理を行うためストリームに戻すことができます。

次の例では、selectによってフィルタ条件(viewq3.ACCT_INTRL_ID = ValidLoopCashForeignTxn.ACCT_INTRL_ID)を満たすタプルのストリームが出力されます。nowウィンドウによってviewq3がリレーションに変換され、これはフィルタ条件によってリレーションとして維持されます。リレーションからストリームへのIStream演算子によって、フィルタ出力がストリームに変換されます。

<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 Stream Analyticsで生成されるリレーションには操作インジケータが含まれるため、挿入、削除および更新(UPDATE SEMANTICSを使用している場合)を識別できます。詳細は、リレーションとOracle Stream Analytics Tuple Kindインジケータを参照してください。

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

Oracle CQL問合せでモノトニックなリレーションが作成される際は常に、デフォルトでIStream演算子が追加されます。

リレーションRがモノトニックになるのは、t1 <= t2のときにR(t1)がR(t2)のサブセットである場合にかぎられます。

Oracle CQLでは、従来の静的なモノトニック・テストを使用します。たとえば、基本リレーションが追加専用として認識される場合、その基本リレーションはモノトニックです。どのストリームSに対してもS[Range Unbounded]はモノトニックです。

リレーションがモノトニックでない場合(たとえば、S[range 10 seconds]のようなウィンドウがある場合)、問合せ作成者の意図(IStream、DStreamまたはRStream)を判断できないため、このような場合、Oracle CQLはデフォルトではリレーションからストリームへの演算子を追加しません。

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

一般に、ストリームからストリームへの演算は、次のように実行します。

- ストリームからリレーションへの演算子によって、ストリームをリレーションに変換します。詳細は、「ストリームからリレーションへの演算子(ウィンドウ)」を参照してください。

- リレーションからリレーションへの演算子によって、リレーショナル・フィルタを実行します。詳細は、「リレーションからリレーションの演算子」を参照してください

- リレーションからストリームへの演算子によって、リレーションをストリームに戻します。詳細は、「リレーションからストリームへの演算子」を参照してください

ただし、一部のリレーションからリレーションへの演算子(フィルタやプロジェクトなど)は、ストリームからストリームへの演算子として機能することもできます。入力Sがストリームで、ストリーム要素c1が50を超える場合に出力としてストリームを生成する問合せについて検討します。

<processor>
<name>cqlProcessor</name>
<rules>
<query id="q0"><![CDATA[
select * from S where c1 > 50
]]></query>
</rules>
</processor>

これは、デフォルトのストリームからリレーションへの演算子およびリレーションからストリームへの演算子を適用した結果です。ストリームSにデフォルトの[Range Unbounded]ウィンドウが追加されます。その後、この問合せはモノトニック・リレーションと評価されるため、IStreamが追加されます。

詳細は、次を参照してください。

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

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

また、Oracle CQLでは次の直接的なストリームからストリームへの演算子がサポートされています。

- MATCH_RECOGNIZE: この句を使用して、入力ストリームの各種のパターン認識問合せを作成します。詳細は、「パターン認識」を参照してください。

- XMLTABLE: この句を使用して、XPath式を使用してxmltypeストリーム要素のデータを解析します。詳細は、「XMLTABLEの問合せ」を参照してください。

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

Oracle CQL問合せは、Oracle CQL構文で表され、1つ以上のストリーム、リレーションまたはビューからデータを取得するためにOracle Stream Analytics CQLプロセッサで実行される操作です。<query>要素で作成した最上位のSELECT文は問合せと呼ばれます。詳細は、「問合せ」を参照してください。

Oracle CQLのビューは、ストリームまたはリレーションに関する代替の選択を表します。Oracle CQLでは、副問合せのかわりにビューを使用します。<view>要素で作成した最上位のSELECT文はビューと呼ばれます。詳細は、「ビュー」を参照してください。

各問合せおよびビューには、問合せおよびビューを含むプロセッサで一意の識別子が必要です。次の例に、idがq0の問合せを示します。id値は、指定された仕様に準拠する必要があります。

<processor>
<name>cqlProcessor</name>
<rules>
<query id="q0"><![CDATA[
select * from S where c1 > 50
]]></query>
</rules>
</processor>

結合は、複数のストリーム、ビューまたはリレーションから行を結合する問合せです。詳細は、「結合」を参照してください。

詳細は、「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

1.1.7 パターン認識

Oracle CQL MATCH_RECOGNIZEコンストラクトは、パターン認識を実行するための主な手段です。

入力ストリームの連続するイベントまたはタプルのシーケンスが特定の条件を満たす場合は、パターンが構成されます。Oracle CQLのパターン認識機能では、着信イベントまたはタプルの属性に条件を定義し、相関変数と呼ばれるString名を使用してこれらの条件を識別できます。照合されるパターンは、これらの相関変数に対する正規表現として指定され、様々な着信タプルが有効な一致として見なされるために満たす必要のある条件のシーケンスまたは順序が決定されます。

詳細は、「MATCH_RECOGNIZEを使用したパターン認識」を参照してください。

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

Oracle Stream Analyticsイベント・ソースはOracle CQL問合せが操作するデータのプロデューサを識別します。Oracle CQLイベント・シンクは問合せ結果のコンシューマを識別します。

この項では、Oracle CQL問合せでアクセスできるイベント・ソースとイベント・シンクの種類、およびイベント・ソースとイベント・シンクへの接続方法について説明します。

1.1.8.1 イベント・ソース

Oracle Stream Analyticsイベント・ソースはOracle CQL問合せが操作するデータのプロデューサを識別します。

Oracle Stream Analyticsでは、次の要素がイベント・ソースである可能性があります。

- アダプタ(JMS、HTTPおよびファイル)

- チャネル

- プロセッサ

- キャッシュ

注意:

Oracle Stream Analyticsでは、プッシュ・イベント・ソースをOracle CQLプロセッサに接続して、Oracle CQLプロセッサをイベント・シンクに接続するためにチャネルを使用する必要があります。その他のOracle Stream Analyticsコンポーネント・タイプでは、チャネルはオプションです。詳細は、「ストリームとリレーション」を参照してください。

Oracle Stream Analyticsイベント・ソースは、通常はプッシュ・データ・ソースです。つまり、Oracle Stream Analyticsでは、データの準備ができたイベント・ソースからの通知を待ちます。

Oracle Stream Analyticsのリレーション・データベース表とキャッシュのイベント・ソースはプル・データ・ソースです。つまり、Oracle Stream Analyticsは、データ・ストリーム上でのイベントの到着時にイベント・ソースをプルします。

詳細は、次を参照してください。

- 表イベント・ソース

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

1.1.8.2 イベント・シンク

CQLプロセッサに接続されているOracle CQLイベント・シンクは問合せ結果のコンシューマです。

Oracle Stream Analyticsでは、次の要素がイベント・シンクである可能性があります。

- アダプタ(JMS、HTTPおよびファイル)

- チャネル

- プロセッサ

- キャッシュ

- 表

同一の問合せを複数のイベント・シンクや、異なる種類のイベント・シンクに関連付けることができます。

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

Oracle Stream Analyticsでは、イベント処理ネットワーク(EPN)を作成するために、Oracle JDeveloperを使用してイベント・ソースとイベント・シンクを定義します(図1-6を参照)。このEPNで、アダプタPriceAdapterはチャネルpriceStreamのイベント・ソースであり、チャネルpriceStreamはOracle CQLプロセッサfilterFanoutProcessorのイベント・ソースです。同様に、Oracle CQLプロセッサfilterFanoutProcessorはチャネルpriceStreamのイベント・シンクです。

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

詳細は、次を参照してください。

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

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

1.1.9 表イベント・ソース

Oracle CQLを使用して、次の表データにアクセスできます。

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

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

詳細は、「イベント・ソースとイベント・シンク」を参照してください。

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

Oracle CQLプロセッサを使用すると、リレーショナル・データベース表をイベント・ソースとして指定できます。このイベント・ソースで問合せを実行したり、他のイベント・ソースと結合したりできます。

詳細は、「Oracle CQL問合せとリレーショナル・データベース表」を参照してください。

1.1.9.2 XML表イベント・ソース

Oracle CQLのXMLTABLE句を使用すると、XPath式を使用してxmltypeストリームのデータを列に解析し、列名でデータに容易にアクセスできます。

詳細は、「XMLTABLEの問合せ」を参照してください。

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

TABLE句を使用して、リレーションとして、Oracle CQL問合せのFROM句内の組込みまたはユーザー定義関数から配列またはCollection型として返された複数の行にアクセスします。

詳細は、次を参照してください。

- 関数TABLEの問合せ

- 関数

1.1.10 表イベント・シンク

表イベント・シンクの機能は、EPNアップストリームからの挿入、削除または更新イベントをサポートし、表に接続しているダウンストリームにイベントを送信します。

Springアセンブリ・ファイル

デフォルトでは、アダプタがSampleEventタイプのイベントを送信し、その他すべてのステージがこのタイプのイベントを受信します。イベント・タイプを他のタイプに変更する場合は、次に示す構成に従う必要があります。

例1-1 イベント・タイプ

<wlevs:event-type type-name="SampleEvent">
<wlevs:properties>
<wlevs:property name="eventId" type="int"/>
<wlevs:property name="msg" type="char[]" length="64"/>
</wlevs:properties>
</wlevs:event-type>

例1-2 tableタグ

<wlevs:table id="tableSink" event-type="SampleEvent" data-source="test-ds" key-properties="eventId" table-name="TTest">
<wlevs:listener ref="tableRelationSinkBean"/>
</wlevs:table>

他のチャネルについては、属性は同じです。

例1-3 チャネル

outputChannelは、次のように定義されます。

<wlevs:channel id="outputChannel" event-type="SampleEvent" is-relation="true" primary-key="eventId>
<wlevs:listener ref="outputChannelRelationSinkBean"/>
<wlevs:listener ref="tableSink"/>
<wlevs:source ref="processor"/>
</wlevs:channel>

例1-4 アプリケーション構成ファイル

table-sinkをサポートするには、processorを構成する必要があります。

<processor>
<name>processor</name>
<rules>
<query id="getAllEventsRule">
<![CDATA[ select * from inputChannel ]]>
</query>
</rules>
</processor>

アダプタの初期化フェーズで、アダプタはサーバー構成ファイルに定義されているデータ・ソースに接続し、SQL文を使用して表を作成します。

CREATE TABLE TTest (eventId INTEGER,msg VARCHAR(64))

アダプタは、run()メソッドの内部でRunnableBeanとRelationSourceを実装し、ケースに応じてinsert、deleteまたはupdateイベントを送信します。

3つのイベント・シンクBeanが同じJavaクラスBatchRelationSinkを実装し、それによってバッチと非バッチ両方のイベントが受信されます。

例1-5 サーバー構成ファイル

データ・ソースtest-dsを、構成ファイルで定義する必要があります。

<data-source>
<name>test-ds</name>
<connection-pool-params>
<initial-capacity>15</initial-capacity>
<max-capacity>50</max-capacity>
</connection-pool-params>
<driver-params>
<url>jdbc:derby:testTableSinkDB;create=true</url>
<driver-name>
org.apache.derby.jdbc.EmbeddedDriver
</driver-name>
</driver-params>
</data-source>

1.1.10.1 Springアセンブリ・ファイル

デフォルトでは、アダプタがSampleEventタイプのイベントを送信し、その他すべてのステージがこのタイプのイベントを受信します。

イベント・タイプを他のタイプに変更する場合は、次に示す構成に従う必要があります。

例1-6 イベント・タイプ

<wlevs:event-type type-name="SampleEvent">
<wlevs:properties>
<wlevs:property name="eventId" type="int"/>
<wlevs:property name="msg" type="char[]" length="64"/>
</wlevs:properties>
</wlevs:event-type>

例1-7 tableタグ

outputChannelは、次のように定義されます。

<wlevs:table id="tableSink" event-type="SampleEvent" data-source="test-ds" key-properties="eventId" table-name="TTest">
<wlevs:listener ref="tableRelationSinkBean"/>
</wlevs:table>

他のチャネルについては、属性は同じです。

例1-8 チャネル

<wlevs:channel id="outputChannel" event-type="SampleEvent" is-relation="true" primary-key="eventId>
<wlevs:listener ref="outputChannelRelationSinkBean"/>
<wlevs:listener ref="tableSink"/>
<    <wlevs:source ref="processor"/>
</wlevs:channel>

1.1.10.2 アプリケーション構成ファイル

表シンクをサポートするには、プロセッサを構成する必要があります。

例1-9 アプリケーションの構成

構成は次のとおりです。

<processor>
<name>processor</name>
<rules>
<query id="getAllEventsRule">
<![CDATA[ select * from inputChannel ]]>
</query>
</rules>
</processor>

アダプタの初期化フェーズで、アダプタはサーバー構成ファイルに定義されているデータ・ソースに接続し、SQL文を使用して表を作成します。

CREATE TABLE TTest (eventId INTEGER,msg VARCHAR(64))

アダプタは、run()メソッドの内部でRunnableBeanとRelationSourceを実装し、ケースに応じてinsert、deleteまたはupdateイベントを送信します。

3つのイベント・シンクBeanが同じJavaクラスBatchRelationSinkを実装し、それによってバッチと非バッチ両方のイベントが受信されます。test-dsという名前のデータ・ソースが、次の構成ファイルで定義されます。

例1-10 サーバー構成ファイル

<data-source>
<name>test-ds</name>
<connection-pool-params>
<initial-capacity>15</initial-capacity>
<max-capacity>50</max-capacity>
</connection-pool-params>
<driver-params>
<url>jdbc:derby:testTableSinkDB;create=true</url>
<driver-name>
org.apache.derby.jdbc.EmbeddedDriver
</driver-name>
</driver-params>
</data-source>

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

Oracle CQLプロセッサを使用すると、Oracle Stream Analyticsキャッシュをイベント・ソースとして指定できます。nowウィンドウを使用する場合にのみ、このイベント・ソースで問合せを実行したり、他のイベント・ソースと結合できます。

詳細は、次を参照してください。

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

- キャッシュの問合せ

- S[now]

1.1.12 関数

ファンクションは、データ項目を操作し、結果を戻すという点で演算子に似ています。関数が演算子と異なるのは引数の形式です。この形式により、0、1、2個、またはより多数の引数を操作できます。

function(argument, argument, ...)

引数を持たない関数は疑似列と同じです(「疑似列」を参照)。ただし、疑似列ではリレーションの各タプルで異なる値が返されますが、引数を持たない関数では各タプルに対して通常は同じ値が返されます。

Oracle CQLには、ストリーム・データの操作を実行する、次のような広範な組込み関数が用意されています。

- 問合せのストリームまたはビューの各行ごとに単一の結果行を返す単一行関数

- 単一のタプルのかわりにタプルのグループに基づいて単一の集計結果を返す集計関数

- Coltオープン・ソース・ライブラリに基づいた、高性能な科学技術計算のための単一行の統計的かつ高度な算術演算

- Coltオープン・ソース・ライブラリに基づいた、高性能な科学技術計算のための集計の統計的かつ高度な算術演算

- java.lang.Mathクラスに基づいた統計的かつ高度な算術演算

アプリケーションで必要な機能がOracle CQL組込み関数に用意されていない場合は、oracle.cep.extensibility.functionsパッケージのクラスを使用して、ユーザー定義関数をJavaで簡単に作成できます。ユーザー定義の集計関数および単一行関数を作成できます。オーバーロード関数の作成、および組込み関数のオーバーライドができます。

Oracle CQL関数の所定のデータ型以外のデータ型の引数でOracle CQL関数を呼び出した場合、Oracle Stream AnalyticsではOracle CQL関数を実行する前に、その引数を所定のデータ型に変換しようと試みます。

Oracle CQLには、Coltオープン・ソース・ライブラリに基づいた、高性能な科学技術計算のための様々な組込みの単一行関数および集計関数が用意されています。Coltライブラリの一部として使用可能な関数は、Big Decimalデータ型またはNULL入力値はサポートしません。また、関数の値計算は増分形式ではありません。詳細は、COLTのWebサイトを参照してください。

注意:

関数名では、大/小文字が区別されます。

- 組込み関数: 小文字のみを使用できます。

- ユーザー定義関数: welvs:function要素のfunction-name属性で、大/小文字の区別が決定されます。

詳細は、次を参照してください。

- 組込みの単一行関数

- 組込みの集計関数

- Colt単一行関数

- Colt集計関数

- java.lang.Math関数

- ユーザー定義関数

- データ型変換

1.1.13 時間

タイムスタンプはOracle Stream Analyticsストリームの重要な部分です。ただし、タイプスタンプは必ずしもクロック・タイムと同じである必要はありません。たとえば、アプリケーション・ドメインで時間を定義し、シーケンス番号で表すことができます。タイムスタンプは、タイムスタンプの値が増加する順に更新がシステムに到着することだけを保証するよう要求されます。

タイムスタンプの順序の要件は、1つのストリームまたはリレーションに固有のものです。たとえば、異なるストリームのタプルは任意の順序で相互配置できます。同じタイムスタンプのタプルの処理順序は、複数ストリームを処理している場合は保証されません。さらに、負のタイムスタンプの動作は定義されていません。t = 0の場合、全順序を想定してイベントはただちに出力されます。

Oracle Stream Analyticsでは、アプリケーション時間またはシステム時間を監視できます。

システムがタイムスタンプを付けたリレーションまたはストリームでは、時間は、リレーションまたはストリームのソース上のデータの受信に依存します。指定された時間(たとえば1分など)が経過してもアクティビティが発生しない(ストリームまたはリレーションのソースにデータが到着しない)場合、Oracle Stream Analyticsによりシステム・タイムスタンプを持つリレーションまたはストリームにハートビートが生成されます。リレーションまたはストリームに指定のソースによってデータが移入されるか、またはOracle Stream Analyticsによってハートビートが毎分生成されます。これにより、リレーションまたはストリームの遅れが1分を超えることはなくなります。

システム・タイムスタンプを持つストリームとリレーションの場合、2つのイベントが同じ時間値を持つことがないようにシステムによって時間が割り当てられます。ただし、アプリケーション・タイムスタンプを持つストリームとリレーションの場合は、イベントが同じ時間値を持つ場合があります。

アプリケーションのタイムスタンプが(非減少ではなく)厳密に増加することが分かっている場合は、wlevs:channel属性is-total-orderをtrueに設定できます。これにより、Oracle Stream Analyticsエンジンでは特定の最適化を行えるようになり、通常は処理の待機時間の減少につながります。

Oracle Stream Analyticsスケジューラは、スケジュールのアルゴリズムと頻度に従って、各Oracle CQL問合せを連続的に実行します。

1.2 Oracle CQL文

Oracle CQLには、問合せやビューを作成する文が用意されています。

この項の内容は、次のとおりです。

- 表記規則

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

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

詳細は、次を参照してください。

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

- Oracle CQL文

1.2.1 表記規則

Oracle JDeveloperまたはOracle Stream Analytics Visualizerを使用して、Oracle Stream Analytics CQLプロセッサに関連付けられたXML構成ファイルにOracle CQL文を書き込みます。このXMLファイルは構成ソースと呼ばれます。

構成ソースはwlevs_application_config.xsdスキーマに準拠している必要があり、rule、viewまたはquery要素のみを含むことができます。

<?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[および]]>で囲む必要があります。

- Oracle CQLを発行する場合は、文の定義内でスペースを使用する任意の場所に、1つ以上のタブ、キャリッジ・リターン、またはスペースを含めることができます。pcbpel/cep/test/sql/tklinroadbm3hrs_5000000.cqlx.new

<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>

<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>

- 予約語、キーワード、識別子およびパラメータでは大文字と小文字は区別されません。ただし、テキスト・リテラルと引用名では大文字と小文字が区別されます。
詳細は、次を参照してください。

- 関数

- リテラル

- スキーマ・オブジェクト名および修飾子

- Oracle CQL文ではコメントは許可されていません。詳細は、「コメント」を参照してください。

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

Oracle CQLの問合せ、ビューおよび結合を作成する際、問合せを簡易化するためにOracle CQLで用意されている構文のショートカットとデフォルトを使用できます。

詳細は、次を参照してください。

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

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

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

このリファレンスのすべてのOracle CQL文は(「Oracle CQL文」を参照)、次の項に編成されています。

構文

構文図では、文を構成するキーワードとパラメータを示します。

注意:
すべてのキーワードとパラメータがすべての状況で有効なわけではありません。各文および句の「セマンティクス」を参照し、構文上の制限を理解するようにしてください。

目的

「目的」では文の基本的な使用について示します。

前提条件

「前提条件」項では、必要な権限、および文を使用する前に実行する必要のある手順を示します。

セマンティクス

「セマンティクス」では構文を構成するキーワード、パラメータおよび句の目的と、それらに適用されることのある制限などの使用上の注意点を示します。(この章で使用されているキーワードやパラメータの表記規則の説明は、このリファレンスの「はじめに」を参照してください。)

例

「例」では文の様々な句とパラメータの使用例を示します。

1.3 Oracle CQLとSQL標準

Oracle CQLは新しいテクノロジですが、SQL99のサブセットに基づいています。

Oracleでは業界に受け入れられた標準への準拠に努め、SQL標準調査会に積極的に参加しています。OracleではOracle CQLの標準化を積極的に推進しています。

1.4 Oracle Stream Analyticsサーバー

Oracle Stream Analyticsサーバーは、Oracle Stream Analyticsアプリケーションに軽量のSpringコンテナを提供して、サーバーとアプリケーションのライフサイクルを管理し、セキュリティ、Jetty、JMX、JDBC、HTTPパブリッシュ/サブスクライブ、ロギングおよびデバッグなど広範な必須サービスも管理します。

2 Oracle CQLの基本要素

この章では、Oracle Continuous Query Language (Oracle CQL)の基本部分(データ型、リテラル、nullなど)のリファレンスを提供します。Oracle CQLは、Oracle Stream Analyticsアプリケーションで使用される問合せ言語です。

この章の内容は次のとおりです。

- データ型

- データ型の比較規則

- リテラル

- 書式モデル

- Null

- コメント

- 別名

- スキーマ・オブジェクト名および修飾子

「Oracle CQLの使用」で説明されている文を使用する前に、この章で説明する概念を理解しておく必要があります。

2.1 データ型

Oracle Stream Analyticsによって操作される値には、それぞれデータ型があります。値のデータ型により、固定された一連のプロパティが値に関連付けられます。これらのプロパティにより、Oracle Event Processingでは、あるデータ型の値が別のデータ型の値とは異なる処理をされます。たとえば、INTEGERデータ型の値は加算できますが、CHARデータ型の値は加算できません。ストリームを作成するときは、その要素ごとにデータ型を指定する必要があります。ユーザー定義関数を作成するときは、その引数ごとにデータ型を指定する必要があります。これらのデータ型によって、各要素または各引数が含むことのできる値の範囲を定義します。たとえば、データ型としてTIMESTAMPを持つ属性は、値「2月29日」(うるう年を除く)や、値「2」または「SHOE」を保持できません。Oracle CQLでは、多くの組込みデータ型を使用できます。Oracle CQLデータ型の構文は、後続の図に記載されています。

Oracle CQLでサポートされていないデータ型をイベントで使用する場合は、Oracle CQLデータ・カートリッジまたはユーザー定義関数を使用して、Oracle CQL問合せでそのデータ型を評価できます。

詳細は、次を参照してください。

- Oracle CQL組込みデータ型

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

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

- データ型の比較規則

- リテラル

- 書式モデル

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

datatype::=

variable_length_datatype::=

fixed_length_datatype::=

2.1.1 Oracle CQL組込みデータ型

表2-1は、Oracle CQL組込みデータ型の概要を示しています。構文要素については、前の項の構文を参照してください。

イベント・タイプを定義するときは、これらのデータ型およびデータ型リテラルの制限を検討します。

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

Oracle CQLデータ型

説明

BIGINT

Java Long型と同等の固定長数値。

詳細は、「数値リテラル」を参照してください。

BOOLEAN

Java Boolean型と同等の固定長ブール値。有効な値はtrueまたはfalseです。

BYTE[(size)]

長さがsizeバイトの可変長文字データ。最大のsizeは4096バイトです。デフォルトはsizeの最小値の1バイトです。

詳細は、「数値リテラル」を参照してください。

CHAR[(size)]

Oracle CQLでは1次元配列のみをサポートしています。

長さがsize文字の可変長文字データ。sizeの最大値は4096文字です。デフォルトはsizeの最小値の1文字です。

詳細は、「テキスト・リテラル」を参照してください。

DOUBLE

Java double型と同等の固定長数値。

詳細は、「数値リテラル」を参照してください。

FLOAT

Java float型と同等の固定長数値。

詳細は、「数値リテラル」を参照してください。

INTEGER

Java int型と同等の固定長数値。

詳細は、「数値リテラル」を参照してください。

INTERVAL

固定長のINTERVALデータ型は期間を指定します。Oracle Event Processingでは、DAY TO SECONDおよびYEAR TO MONTHがサポートされます。最大長は64バイトです。これはlong型に相当します。

詳細は、「期間リテラル」を参照してください。

TIMESTAMP

固定長のTIMESTAMPデータ型は、Oracle CQLでサポートされるjava.text.SimpleDateFormat書式モデルのいずれかに準拠する日時リテラルを格納します。最大長は64バイトです。

詳細は、「日時リテラル」を参照してください。

XMLTYPE

このデータ型は、XMLデータを含むストリーム要素に使用します。最大長は4096文字です。

XMLTYPEはシステム定義型であるため、関数の引数またはストリーム属性のデータ型として使用できます。これはjava.lang.String型に相当します。

詳細は、「SQL/XML (SQLX)」を参照してください。

OBJECT

任意のJavaオブジェクト(つまり、java.lang.Objectの任意のサブクラス)を指します。

Oracle Event ProcessingエンジンではOBJECTフィールドのコンテンツが認識されないため、これはOracle Event Processingの不透明な型のサポートと呼ばれます。

通常、この型はアダプタから宛先に値をそのまま渡す場合に使用します。Oracle Event Processingエンジンではこれらの値を解釈する必要はありませんが(Collection型または他のユーザー固有のJava型)、関連付けられているイベントのその他のフィールドが問合せで参照されます。

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

Oracle CQLでサポートされていないデータ型をイベントで使用する場合は、Oracle CQLデータ・カートリッジを使用して、Oracle CQL問合せでそのデータ型を評価できます。

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

Oracle CQLでサポートされていないデータ型をイベントで使用する場合は、ユーザー定義関数を作成して、Oracle CQL問合せでそのデータ型を評価できます。

package com.oracle.app;

public enum ProcessStatus {
OPEN(1),
CLOSED(0)}
}

package com.oracle.app;

import com.oracle.capp.ProcessStatus;

public class ServiceOrder {
private String serviceOrderId;
private String electronicSerialNumber;
private ProcessStatus status;
...
}

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;
}
}

<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>

<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>

詳細は、「ユーザー定義」を参照してください。

2.2 データ型の比較規則

この項では、Oracle Stream Analyticsでの各データ型の値の比較方法について説明します。

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 Stream Analyticsでは、あるデータ型から別のデータ型への暗黙的および明示的な値の変換がサポートされています。

暗黙的または自動的な変換に依存するかわりに、Oracleでは明示的な変換の指定をお薦めします。これは、次の理由によります。

- 明示的なデータ型変換関数を使用すると、Oracle CQL文が読みやすくなります。

- 暗黙的なデータ型変換はパフォーマンスに悪影響を及ぼす可能性があります。

- 暗黙的な変換はその変換が行われるコンテキストに依存し、どんな場合でも同様に機能するとはかぎりません。

- 暗黙的な変換のアルゴリズムはソフトウェア・リリース間やOracle製品間で変更される場合があります。明示的な変更では、動作がより安定しています。

この項の内容は、次のとおりです。

- 暗黙的なデータ型変換

- 明示的なデータ型変換

- SQLデータ型変換

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

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

2.2.4.1 暗黙的なデータ型変換

Oracle Stream Analyticsでは、変換が合理的な場合に、あるデータ型から別のデータ型に値が自動的に変換されます。

表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 Stream Analyticsで暗黙的なデータ型変換が行われる方向を決定します。

- SELECT FROM操作で、Select句に算術式または条件の評価が含まれている場合は、Oracle Stream Analyticsによりストリームのデータがターゲット変数の型に変換されます。
たとえば、c1+2.0などの式評価やc1 < 2.0などの条件評価のコンテキストでc1がINTEGER型である場合に、暗黙的な変換が発生します。

- FLOATからBIGINTへの変換は正確です。

- BIGINT値が使用する精度のビット数がFLOATでサポートされる数を超えている場合、BIGINTからFLOATへの変換は正確ではありません。

- 文字値とTIMESTAMP値を比較する場合は、Oracle Stream Analyticsにより文字データがTIMESTAMPに変換されます。

- Oracle CQL関数または演算子で許可されていないデータ型の引数を使用すると、Oracle Stream Analyticsではサポートされている場合は必ず、引数が使用可能なデータ型に変換されます。

- 代入時、Oracle Stream Analyticsでは等号(=)の右側の値が、左側の代入対象のデータ型に変換されます。

- 連結操作時、Oracle Stream Analyticsでは文字以外のデータ型がCHARに変換されます。

- 文字データ型と文字以外のデータ型の間で算術演算または比較を行う場合、Oracle Stream Analyticsでは数値型が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 Stream Analyticsがサポートするのと等価のSQLおよびOracle Stream Analyticsデータ型を順守する必要があります。

詳細は、「リレーショナル・データベース表の問合せ」を参照してください。

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

実行時、Oracle Stream Analyticsではデータ・カートリッジの実装に応じて、Oracle CQLとデータ・カートリッジのデータ型との間でマッピングが行われます。

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

実行時、Oracle Stream Analyticsではユーザー定義関数の戻り値の型に指定したOracle CQLデータ型とJavaの同等のデータ型との間でマッピングが行われます。

詳細は、「ユーザー定義関数のデータ型」を参照してください。

2.3 リテラル

「リテラル」と「定数値」という用語は同義語であり、固定されたデータ値を表します。たとえば、'JACK'、'BLUE ISLAND'および'101'はすべてテキスト・リテラルであり、5001は数値リテラルです。

Oracle Stream Analyticsでは、Oracle CQL文の次の種類のリテラルがサポートされています。

- テキスト・リテラル

- 数値リテラル

- 日時リテラル

- 期間リテラル

2.3.1 テキスト・リテラル

このリファレンスの他の部分で説明している式、条件、Oracle CQL関数およびOracle CQL文の構文でconst_string、quoted_string_double_quotesまたはquoted_string_single_quotesと示されている箇所では常にテキスト・リテラルの表記で値を指定します。このマニュアルでは、 テキスト・リテラル、文字リテラルおよび文字列は同じ用語として使用しています。

テキスト・リテラルは、Oracle Stream Analyticsでスキーマ・オブジェクト名と区別されるように、一重引用符または二重引用符で囲みます。

一重引用符(')または二重引用符(")を使用できます。通常は、二重引用符を使用します。ただし、特定の式、条件、関数および文では、このリファレンスの他の部分で指定されている構文に従って、quoted_string_double_quotesまたはquoted_string_single_quotesのいずれかの引用符を使用する必要があります。

構文で単にconst_stringと示されている場合は、一重引用符または二重引用符のどちらでも使用できます。

構文でcharという用語が示されている場合は、テキスト・リテラルを指定するか、または文字データに解決される別の式を指定できます。構文にcharがある場合、一重引用符で囲む必要はありません。

Oracle Stream Analyticsは、Javaのローカリゼーションをサポートしています。Javaロケールで指定された文字セットのテキスト・リテラルを指定できます。

詳細は、次を参照してください。

- 表記規則

- スキーマ・オブジェクト名および修飾子

- 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型の32ビット・バイナリ浮動小数点数であることを示します。

- dまたはDは、数値がDOUBLE型の64ビット・バイナリ浮動小数点数であることを示します。pcbpel/cep/src/oracle/cep/common/Constants.BIGINT_LENGTH
fまたはFおよびdまたはDを省略すると、数値は型INTEGERになります。

接尾辞fまたはFおよびdまたはDは浮動小数点数リテラルでのみサポートされ、INTEGERに変換される文字列ではサポートされていません。たとえば、Oracle Stream AnalyticsでINTEGERが所定の型である場合に文字列'9'が検出されると、文字列はJava Integer 9に変換されます。ただし、Oracle Stream Analyticsで文字列'9f'が検出された場合は、変換が失敗しエラーが返されます。

INTEGER型の数は最大32桁の精度を格納できます。BIGINTまたはFLOATで提供される精度よりも高い精度がリテラルで必要な場合、Oracle Stream Analyticsでは値が切り詰められます。リテラルの範囲がBIGINTまたはFLOATでサポートされる範囲を超えた場合、Oracle Stream Analyticsではエラーが発生します。

Javaロケールでピリオド(.)以外の小数点を使用している場合は、'text'表記を使用して数値リテラルを指定する必要があります。この場合、Oracle Stream Analyticsが自動的にテキスト・リテラルを数値に変換します。

注意:

この表記は、浮動小数点数リテラルでは使用できません。

たとえば、Javaロケールでカンマ(,)の小数点が指定されている場合は、次のように数値5.123を指定します。

'5,123'

次に、有効なNUMBERリテラルを示します。

25
+6.34
0.5
-1

次に、有効な浮動小数点数リテラルを示します。

25f
+6.34F
0.5d
-1D

2.3.3 日時リテラル

Oracle Stream Analyticsでは、日時データ型TIMESTAMPがサポートされています。

日時リテラルは64バイトを超えることはできません。

すべての日時リテラルは、Oracle CQLでサポートされるjava.text.SimpleDateFormat書式モデルのいずれかに準拠している必要があります。詳細は、「日時書式モデル」を参照してください。

現在、SimpleDateFormatクラスではxsd:dateTimeがサポートされていません。このため、Oracle CQLではこの型を使用するXML要素または属性がサポートされていません。

たとえば、XMLイベントがXSDを使用する場合、Oracle CQLではMyTimestamp要素を解析できません。

<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で置き換えることをお薦めします。

<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>

XSDを使用すると、Oracle CQLでは、Timestamp要素のString値がOracle CQLでサポートされるjava.text.SimpleDateFormat書式モデルに準拠しているかぎりイベントを処理できます。詳細は、「日時書式モデル」を参照してください。

<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 Stream Analyticsでは、期間リテラルDAY TO SECONDがサポートされています。このリテラルには先頭フィールドが含まれ、末尾フィールドを含めることができます。先頭フィールドは、測定する日付または時間の基本単位を定義します。末尾フィールドは、該当する基本単位の最小の増分を定義します。部分範囲(SECONDやMINUTE to SECONDなど)はサポートされていません。

期間リテラルは64バイトを超えることはできません。

pcbpel/cep/src/oracle/cep/common/Constants.BIGINT_LENGTH

2.3.4.1 INTERVALDAYTOSECOND

日、時、分および秒の単位で時間が格納されます。

次の構文を使用して、DAY TO SECOND期間リテラルを指定します。

interval_value::=

const_stringは、適切な日時書式モデルに準拠するTIMESTAMP値です(「日時書式モデル」を参照)。

先行フィールドに対する制限:

後続のフィールドを指定する場合、先行のフィールドよりも下位の単位を指定する必要があります。たとえば、INTERVAL MINUTE TO DAYは無効です。このため、SECONDが先行フィールドの場合、期間リテラルは後続フィールドを持つことができません。

後続フィールドの有効範囲は次のとおりです。

- SECOND: 0から59.999999999

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リテラルと加算または減算したり、期間リテラルを比較したりできます。この例で、ストリームtkdata2_SIn1のスキーマは(c1 integer, c2 interval)です。

<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>

パターン一致のDEFINE句でのINTERVAL DAY TO SECONDの使用:

query 'select its.itemId from ch0
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 "00:00:05.00" HOUR TO SECOND)),
C AS (to_timestamp(C.element_time) - to_timestamp(A.element_time)
>= INTERVAL "00:05.00" MINUTE TO SECOND)
) as its'

入力:

send [itemId=2 temp=30]
send [itemId=2 temp=55]
thread:sleep 5000
send [itemId=2 temp=125]

出力:

-> insert event: {itemId=2}

2.3.4.2 INTERVALYEARTOMONTH

時間を年および月の単位で格納します。

INTERVALYEARTOMONTHリテラルの書式の例を示します。

期間リテラルの形式

解釈

INTERVAL "12-10" YEAR TO MONTH

12年10か月

注意:

問合せのDDLで使用する場合、CQL問合せで定数を指定するにはINTERVAL YEAR TO MONTH通知を使用します。変数のかわりに、定数の間隔値を指定します。

次に示すコード・サンプルでは、次にリストするタプルを使用しています。

<event-type type-name="IntervalInputTupleEvent">
<properties>
<property name="interval_inputevent" type="interval year to month"/>
</properties>
</event-type>

<event-type type-name="IntervalOutputTupleEvent">
<properties>
<property name="interval_outputevent" type="interval year to month"/>
</properties>
</event-type>

次に示すのは、INTERVAL YEARS TO MONTHのサンプル問合せです。

問合せ:

select interval_inputevent as interval_outputevent from inputChannel

入力:

send [interval_inputevent='INTERVAL "212-10" YEAR(3) TO MONTH']

出力:

-> insert event: {interval_outputevent=+212-10}

2.4 書式モデル

書式モデルは、格納された日時または数値データの書式を文字列で記述する文字リテラルです。文字列を日付または数値に変換する場合、Oracle Stream Analyticsでの文字列の解釈のしかたは書式モデルによって決まります。Oracle CQL問合せに関連する次の書式モデルがあります。

- 数値書式モデル

- 日時書式モデル

2.4.1 数値書式モデル

次の関数で、数値書式モデルを使用できます。

- 関数でintデータ型の値をbigintデータ型に変換します。

- to_float関数でintまたはbigintデータ型の値をfloatデータ型に変換します。

2.4.2 日時書式モデル

Oracle CQLではjava.text.SimpleDateFormatが指定する書式モデルがサポートされています。

表2-4は、Oracle CQLがTIMESTAMPリテラルの解釈に使用するjava.text.SimpleDateFormatモデルを示しています。詳細は、「日時リテラル」を参照してください。

表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を使用してください。

SQLとは異なり、Oracle Stream Analyticsは、長さがゼロの文字値をそのまま扱います。ただし、数値0を表すのにnullを使用しないでください。この2つは等価ではありません。

nullを含む算術式は常にnullに評価されます。たとえば、10にnullを加算したものはnullです。実際、nullオペランドを指定すると、すべての演算子ではnullが返されます(連結を除く)。

詳細は、次を参照してください。

- nvl

- out_of_line_constraint

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 Stream Analyticsは、デコード式を評価するとき、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

詳細は、「Null条件」を参照してください。

2.6 コメント

Oracle CQLではコメントはサポートされていません。

2.7 別名

Oracle CQLでは、問合せを簡易化してわかりやすくするために、別名(またはシノニム)を定義できます。

この項の内容は、次のとおりです。

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

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

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

AS演算子を使用すると、Oracle CQLで問合せ、リレーション、ストリームおよび問合せのSELECTリスト項目の別名を指定できます。

この項の内容は、次のとおりです。

- relation_variable句内の別名

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

詳細は、「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

2.7.1.1 relation_variable句の別名

relation_variable句のAS演算子で別名を定義して選択リストの直前の式にラベルを付け、その名前で結果を参照できます。別名によって、問合せ中にSELECT構文のリストの項目名を効果的に変更できます。別名は、ORDER BY句(「問合せ結果のソート」を参照)で使用できますが、問合せの他の句では使用できません。

次の例は、SELECTリストのストリーム要素its.itemIdに対して別名badItem、MATCH_RECOGNIZE句に対して別名itsを定義する方法を示しています。

<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>

詳細は、「From句」を参照してください。

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

AS演算子で別名を定義して直前のウィンドウ演算子にラベルを付け、その名前で結果を参照できます。

ウィンドウ演算子の内部ではAS演算子を使用できませんが、ウィンドウ演算子の外部ではAS演算子を使用できます。

次の例は、分割範囲のウィンドウ演算子の後で別名bidとaskを定義する方法を示しています。

<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>

詳細は、「ストリームからリレーションへの演算子(ウィンドウ)」を参照してください。

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

別名はロケーションの透過性を提供するために必要です。aliases要素で別名を定義して、Oracle CQLの問合せやビューで使用できます。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 Stream Analyticsは例外をスローします。

- 問合せまたはビュー定義が別名を参照している場合、別名はすでに存在する必要があります。

この項の内容は、次のとおりです。

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

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

aliases要素の子要素type-aliasを使用して、データ型の別名を定義できます。任意の組込みまたはデータ・カートリッジ・データ型の別名を作成できます。

詳細は、「データ型」を参照してください。

aliases要素を使用してalias型を定義するには:

1. プロセッサのコンポーネント構成ファイルを編集します。

2. 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. aliases要素にtype-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. type-alias要素にsourceおよびtarget子要素を追加します。

- sourceは別名を指定します。
任意の有効なスキーマ名を使用できます。詳細は、「スキーマ・オブジェクト名と修飾子」を参照してください。

- targetは、別名が参照するデータ型を指定します。
Oracle CQLデータ・カートリッジの型の場合は、完全修飾型名を使用します。

<?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. 問合せおよびビューで、このプロセッサに定義した別名を使用します。

別名は、参照するデータ型とまったく同じように使用できます。次の例に示すように、別名を作成した型のメソッドおよびフィールドにアクセスできます。

<?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 スキーマ・オブジェクトのネーミング・ルール

Oracle Stream Analyticsのオブジェクトは、それぞれ名前があります。Oracle CQL文では、オブジェクト名は引用符なしの識別子で表します。つまり、なんらかの記号で囲まれていない識別子を使用します。

Oracle Stream Analyticsオブジェクトの名前を指定する場合は、引用符なしの識別子を使用する必要があります。

次に、識別子に適用されるルールのリストを示します。

- Oracle Stream Analyticsの予約語は、識別子として使用できません。
Oracle Stream Analyticsオブジェクトへのアクセスに使用するOracle製品によっては、製品固有の予約語により名前がさらに制限される可能性があります。

Oracle CQL言語には特殊な意味を持つ他の語が含まれています。これらの文字は予約語ではありません。ただし、Oracleは固有の方法でこれらの文字を内部的に使用します。このため、これらの語をオブジェクトやオブジェクトの各部分の名前として使用すると、Oracle CQL文が読みにくくなり、予期しない結果が生じることがあります。

詳細は、次の章を参照してください。

- identifier

- 異なるプラットフォームまたはオペレーティング・システム間で最適な互換性が提供されるため、スキーマ・オブジェクト名にASCII文字を使用することをお薦めします。

- 識別子は、データベース文字セットのアルファベット文字で開始する必要があります。

- 識別子にはJavaロケールの文字セットの英数字とアンダースコア(_)のみを使用できます。特に、スペース、ドット、スラッシュは使用できません。
詳細は、次を参照してください。

- const_string

- identifier

- 通常、次のオブジェクトでは、アプリケーションで一意の名前を選択する必要があります。

- ストリーム

- 問合せ

- ビュー

- ユーザー定義関数

特に、問合せとビューに同じ名前を付けることはできません。

- 識別子名では大文字と小文字が区別されます。

- 同一のストリームまたはビューのストリーム要素には同じ名前を使用できません。ただし、異なるストリームまたはビューのストリーム要素には同じ名前を使用できます。

- 関数の引数の個数およびデータ型が異なる(つまり、シグネチャが固有である)場合は、関数に同じ名前を使用できます。引数の異なる同名の関数を複数作成することは、関数のオーバーロードと呼ばれます。
組込み関数と同じ名前とシグネチャを持つユーザー定義関数を登録または作成すると、ユーザー関数が組込み関数のシグネチャに取ってかわります。組込み関数と同じ名前とシグネチャを持つ関数を作成することは、関数のオーバーライドと呼ばれます。

組込み関数はパブリックですが、ユーザー定義関数は特定のスキーマに属しています。

詳細は、次を参照してください。

- ユーザー定義関数

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

次に、オブジェクトおよび各部分に名前を付ける場合のガイドラインを示します。

- 完全な、わかりやすい、発音可能な名前(またはよく知られた略語)を使用します。

- 一貫性のあるネーミング・ルールを使用します。

- ストリーム、ビュー、および問合せ間で同一のエンティティまたは属性を記述するには、同じ名前を使用します。

オブジェクトに名前を付ける場合、名前を短くして使いやすくするという目的と、名前をできるかぎり説明的にするという目的を両立させてください。Oracle Stream Analyticsのオブジェクトは長期間にわたり多くのユーザーによって使用される可能性があるため、確信が持てない場合はより説明的な名前を選択してください。10年後のユーザーは、payment_due_dateではなくpmddという名前を持つストリーム要素の理解に苦しむ可能性があります。

一貫性のあるネーミング・ルールを使用すると、アプリケーションでの各ストリームの役割が理解しやすくなります。このようなルールとして、FINANCEアプリケーションに属するすべてのストリーム名をfin_で開始するなどがあります。

ストリーム間で同一の項目を記述するには、同じ名前を使用します。たとえば、employeesおよびdepartmentsストリームでは、どちらも部門番号のストリーム要素にdepartment_idという名前を付けます。

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

次に、有効なスキーマ・オブジェクト名の例を示します。

last_name
horse
a_very_long_and_valid_name

これらのすべての例は、「スキーマ・オブジェクトのネーミング・ルール」のルールに従っています。

3 疑似列

この章では、Oracle Continuous Query Language (Oracle CQL)の疑似列のリファレンスを提供します。疑似列は、問い合せることはできますが、イベントの作成元であるデータの一部ではありません。

この章の内容は次のとおりです。

- 疑似列の概要

- ELEMENT_TIME疑似列

- ORA_QUERY_ID疑似列

3.1 疑似列の概要

疑似列からの選択はできますが、値の変更はできません。疑似列は引数のない関数にも似ています(「関数」を参照)。

Oracle CQLでは、次の疑似列がサポートされています。

- ELEMENT_TIME疑似列

3.2 ELEMENT_TIME疑似列

CQLでは、すべてのストリーム・イベントにタイムスタンプが関連付けられています。ELEMENT_TIME疑似列は、ストリーム・イベントのタイムスタンプを返します。ELEMENT_TIME疑似列のデータ型は、Oracle CQLネイティブ・タイプのbigintです。ELEMENT_TIMEから返されるタイムスタンプ値の単位はナノ秒です。

注意:

ELEMENT_TIMEは、Oracle CQLリレーションのメンバーではサポートされません。詳細は、「ストリームとリレーション」を参照してください。

この項の内容は、次のとおりです。

- ELEMENT_TIME疑似列の値について

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

詳細は、次を参照してください。

- to_timestamp

3.2.1 ELEMENT_TIME疑似列の値について

各ストリーム・イベントのELEMENT_TIMEの値は、そのイベントのタイムスタンプです。ストリーム・イベントのタイムスタンプは、ストリームの定義とソースによって異なります。

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

ソース・ストリームがシステム・タイムスタンプによってタイムスタンプが付けられたストリームの場合、ストリーム・イベントのタイムスタンプはSystem.nanoTime()を計算することで割り当てられます。イベントごとのELEMENT_TIME疑似列により、イベントのタイムスタンプが出力されます。

たとえば、システムによってタイムスタンプが付けられたストリームtktest_S1(c1 integer)が定義されているとします。

select ELEMENT_TIME, to_timestamp(ELEMENT_TIME) from tktest_S1

Input (c1)                    Output (timestamp: element_time, to_timestamp(element_time))
10                                    12619671878392750:+ 12619671878392750,05/26/1970 18:27:51
20                                    12619671889193750:+ 12619671889193750,05/26/1970 18:27:51
30                                    12619671890093750:+ 12619671890093750,05/26/1970 18:27:51
40                                    12619671891399750:+ 12619671891399750,05/26/1970 18:27:51
50                                    12619671896472750:+ 12619671896472750,05/26/1970 18:27:51

注意:
タイムスタンプはSystem.nanoTime()を計算することで算出されるため、出力は実行ごとに様々であり、マシンによっても異なります。

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

ソース・ストリームがアプリケーションによってタイムスタンプが付けられたストリームの場合、ストリーム・イベントのタイムスタンプはアプリケーションのタイムスタンプ式を計算することで割り当てられます。計算されたタイムスタンプ値の単位は常にナノ秒になります。ELEMENT_TIME疑似列により、イベントのタイムスタンプが出力されます。

たとえば、アプリケーションによってタイムスタンプが付けられたストリームtktest_S1(C1 integer, c2 bigint)が定義されていて、アプリケーションのタイムスタンプ式がc2*1000000000Lだとします。

select ELEMENT_TIME, to_timestamp(ELEMENT_TIME) from tktest_S1

Input(c1,c2)     Output(timestamp: element_time, to_timestamp(element_time))
10, 10                10000000000:+ 10000000000,12/31/1969 17:00:10
20, 20                20000000000:+ 20000000000,12/31/1969 17:00:20
30, 30                30000000000:+ 30000000000,12/31/1969 17:00:30
40, 40                40000000000:+ 40000000000,12/31/1969 17:00:40
50, 50                50000000000:+ 50000000000,12/31/1969 17:00:50

前述の問合せでは、各イベントのタイムスタンプは、それぞれのイベントのc2*1000000000Lを計算することで算出されています。ELEMENT_TIMEは、イベントのタイムスタンプと同じであることがわかります。

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.1.3 インラインCQLビューのELEMENT_TIME

ソース・ストリームがインラインCQLビューから受け取られた場合、ストリーム・イベントのタイムスタンプはビューの問合せによって算出されます。ELEMENT_TIMEにより、イベントのタイムスタンプが出力されます。ELEMENT_TIMEの単位は常にナノ秒になり、データ型はCQLネイティブ・タイプのbigintになります。

たとえば、アプリケーションによってタイムスタンプが付けられたストリームtktest_S1(C1 integer, c2 bigint)が定義されていて、アプリケーションのタイムスタンプ式がc2*1000000000Lだとします。

ビューVは、問合せISTREAM(SELECT * FROM SYSTS_STREAM[RANGE 1 MINUTE SLIDE 15 SECONDS]を使用することで定義されています。

select ELEMENT_TIME, to_timestamp(ELEMENT_TIME) from V

Input(c1,c2)        Output(timestamp: element_time, to_timestamp(element_time))
10, 10                15000000000:+ 15000000000,12/31/1969 17:00:15
20, 20                30000000000:+ 30000000000,12/31/1969 17:00:30
30, 30                30000000000:+ 30000000000,12/31/1969 17:00:30
40, 40                45000000000:+ 45000000000,12/31/1969 17:00:45
50, 50                50000000000:+ 50000000000,12/31/1969 17:00:55

3.2.1.4 副問合せのELEMENT_TIME

ソース・ストリームが副問合せから受け取られた場合、CQLは副問合せの結果に対するELEMENT_TIMEをサポートしません。

次の例は、サポートされないシナリオを示しています。

SELECT ELEMENT_TIME FROM ( ISTREAM(SELECT * FROM SYSTS_STREAM[RANGE 1 HOUR SLIDE 5 MINUTES])

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

この項では、様々な問合せでELEMENT_TIMEを使用する方法を説明します。

- SELECTでのELEMENT_TIMEの使用

- GROUP BYでのELEMENT_TIMEの使用

- PATTERNでのELEMENT_TIMEの使用

3.2.2.1 SELECTでのELEMENT_TIMEの使用

次の例は、select文でELEMENT_TIME擬似列を使用する方法を示します。ストリームS1のスキーマは(c1 integer)です。関数to_timestampを使用して、Long値をタイムスタンプ値に変換しています。

<query id="q4"><![CDATA[
select
c1,
to_timestamp(element_time)
from
S1[range 10000000 nanoseconds slide 10000000 nanoseconds]
]]></query>

Timestamp   Tuple
8000       80
9000       90
13000       130
15000       150
23000       230
25000       250

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疑似列を使用することはできません。かわりに、「GROUP BYでのELEMENT_TIMEの使用」で説明するようにビューを使用します。

3.2.2.2 GROUP BYでのELEMENT_TIMEの使用

GROUP BY句があるため、問合せのSELECT文でELEMENT_TIMEを使用することはできません。

<query id="Q1"><![CDATA[

SELECT
R.queryText AS queryText,
COUNT(*) AS queryCount
FROM
queryEventChannel [range 30 seconds] AS R
GROUP BY
queryText

]]></query>

かわりに、ビューを作成します。V1に相当する派生したストリームには、特定のqueryTextグループに対して(queryText、queryCount、maxTime)が変わるたびに、ストリーム要素が含められます。

<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を選択するには、問合せを作成します。

<query id="Q1"><![CDATA[

SELECT
queryText,
queryCount,
ELEMENT_TIME as eventTime
FROM
V1

]]></query>

3.2.2.3 PATTERNでのELEMENT_TIMEの使用

次の例は、pattern問合せでELEMENT_TIME疑似列を使用する方法を示します。Nth.statusの値が>= F.statusで、そのタプルのNth.ELEMENT_TIME値と最後にFに一致したタプルとの差がjava.lang.Math.Bigint(Long)として指定された間隔に満たない場合、タプルまたはイベントは相関変数Nthに一致します。

...
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
...

3.3 ORA_QUERY_ID疑似列

着信イベント分割するには、出力に含まれる問合せ名または識別子の情報が必要になります。クエリの名前または識別子は、タプル属性の一部であり、TupleValueのgetter APIで呼び出すことになります。

この目的のために、Oracle CQLには、問合せの出力に含まれる問合せ名にアクセスする新しい疑似列ORA_QUERY_IDが用意されています。

次に示すように、CQL問合せのSELECTリストで前述の疑似列を使用すると、出力タプルに含まれる問合せ名を取得できます。

CREATE QUERY Q1 AS SELECT ORA_QUERY_ID from STREAM;

前述の問合せQ1の出力イベントごとに、問合せ名または識別子と等しい値を持つ属性が1つのみ含まれます。前述の問合せでは、STREAMへの着信イベントごとに、アプリケーションはQ1の値を保持する1つの属性を含む出力タプルを送信します。

CREATE QUERY Q1 AS
SELECT ORA_QUERY_ID, stock_quote, stock_price FROM StockStream;

次に、入力値と出力値を示します。

Input(stock_quote, stock_price)            Output(ORA_QUERY_ID, stock_quote, stock_price)
ORCL, 34                                                Q1, ORCL, 34
MSFT, 38                                                Q1, MSFT, 38
CSCO, 21                                                Q1, CSCO, 21
INTC, 24                                                Q1, INTC, 24
FB, 48                                                    Q1, FB, 48

4 演算子

この章では、Oracle Continuous Query Language (Oracle CQL)の演算子のリファレンスを提供します。演算子は、データ項目を操作して結果を返します。構文では、演算子はオペランドの前後または2つのオペランドの間で使用します。

この章の内容は次のとおりです。

- 演算子の概要

- 算術演算子

- 連結演算子

- 二者択一演算子

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

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

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

- ユーザー定義のストリームからリレーションへのウィンドウ演算子

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

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

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

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 Stream Analyticsによって同じ式の異なる演算子が評価される順序です。複数の演算子を含む式を評価する場合、Oracle Stream Analyticsでは優先順位の高い演算子が優先順位の低い演算子よりも先に評価されます。Oracle Stream Analyticsでは、優先順位の等しい演算子は式の左から右に評価されます。

表4-1は、Oracle CQL演算子の優先順位レベルを高い順に示しています。同じ行にある演算子の優先順位は同じです。

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

演算子

演算

+, - (単項演算子)

同一、否定

*, /

乗算、除算

+, - (バイナリ演算子)、||

加算、減算、連結

Oracle CQL条件はOracle CQL演算子の後に評価されます。

「条件」を参照してください。

優先順位の例

次の式では、乗算は加算よりも優先順位が高いため、2と3を掛けた結果に1が加算されます。

1+2*3

式の中でカッコを使用すると、演算子の優先順位をオーバーライドできます。カッコ内の式がカッコ外の式よりも先に評価されます。

4.2 算術演算子

表4-2は、Oracle Stream Analyticsでサポートされる算術演算子のリストです。算術演算子を1つまたは2つの引数とともに使用して、数値を否定、加算、減算、乗算および除算できます。これらの演算子の一部は日時と期間の算術演算でも使用されます。演算子の引数は、数値データ型または数値データ型に暗黙的に変換できる任意のデータ型に解決される必要があります。

特定のケースでは、Oracle Stream Analyticsによって、引数が演算に必要なデータ型に変換されます。たとえば、整数と浮動小数点数を加算する場合は、整数の引数が浮動小数点数に変換されます。結果の式のデータ型は浮動小数点数です。詳細は、「暗黙的なデータ型変換」を参照してください。

表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 Stream Analyticsでは、数値リテラル、日時リテラル、期間リテラルを使用した算術演算がサポートされています。

詳細は、次を参照してください。

- 数値リテラル

- 日時リテラル

- 期間リテラル

4.3 連結演算子

連結演算子は文字列を操作します。表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 Stream Analyticsでは、長さ0の文字列はnullとして扱われますが、長さ0の文字列と別のオペランドとの連結の結果は常にその別のオペランドになるため、結果がnullになるのは2つのnull文字列が連結された場合にかぎられます。ただし、Oracle Stream Analyticsの今後のバージョンでは、このとおりとはかぎりません。nullになる可能性のある式を連結する場合は、NVL関数を使用してその式を長さ0の文字列に明示的に変換してください。

関連項目:

- データ型

- concat

- xmlconcat

- nvl

次の例に、連結演算子を使用して文字列「xyz」をselect文のc2の値に付加する方法を示します。

<query id="q264"><![CDATA[
select c2 || "xyz" from S10
]]></query>

4.4 二者択一演算子

二者択一演算子を使用して、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句内のみに適用可能です。

次の例に、二者択一演算子を使用して、PATTERN句が「1回以上のAの後にBが1回以上、またはCが1回以上、いずれか先に来る方が続く」という意味になるように定義する方法を示します。

<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>

詳細は、「PATTERN句内でのグループ化および二者択一」を参照してください。

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

Oracle CQLでは、次の範囲ベースのストリームからリレーションへのウィンドウ演算子がサポートされています。

注意:

非常に大きな数には接尾辞を付ける必要があります。接頭辞がない場合、Javaでは、非常に大きな数が整数として処理され、値が整数の範囲から外れる可能性があります。この場合、エラーがスローされます。

接頭辞は次のように追加します。

LongにはlまたはL

floatにはfまたはF

doubleにはdまたはD

big decimalにはnまたはN

次に例を示します。

SELECT * FROM channel0[RANGE 1368430107027000000l nanoseconds]

window_type_range::=

- S[now]

- S[range T]

- S[range T1 slide T2]

- S[range unbounded]

- S[range C on E]

詳細は、次を参照してください。

- 問合せ

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

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

4.5.1 S[now]

この時間ベースの範囲ウィンドウでは瞬間的なリレーションが出力されます。このため、時間tのnowウィンドウの出力は、その瞬間tに到着したすべてのタプルになります。Oracle Stream Analyticsの時間の最小単位はナノ秒であるため、これらのすべてのタプルは1ナノ秒後に期限切れになります。

例については、「S [now]の例」を参照してください。

4.5.1.1 例

S[now]の例

問合せとデータ・ストリームSがあるとします。タイムスタンプはナノ秒(1 sec = 10^9 nanoseconds)で示されています。次の例は、時間5000 msで問合せが返すリレーションを示しています。時間5002 msには空のリレーションが返されます。

<query id="q1"><![CDATA[
SELECT * FROM S [now]
]]></query>

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

Timestamp   Tuple Kind  Tuple
5000000000  +           33,4.4
5000000000  +           23,56.33
5000000001  -           33,4.4
5000000001  -           23,56.33

4.5.2 S[range T]

この時間ベースの範囲ウィンドウでは、サイズTの時間単位の間隔をスライドさせ、並べられたストリームの最新部分を取得することで、時間の経過に沿った出力リレーションが定義されます。

例については、「S [range T]の例」を参照してください。

4.5.2.1 例

S [range T]の例

問合せq1について考えてみます。データ・ストリームSの場合、問合せはリレーションを返します。デフォルトでは、範囲の時間単位はsecondであるため、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 Stream Analyticsに通知します。

<query id="q1"><![CDATA[
SELECT * FROM S [range 1]
]]></query>

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

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

4.5.3 S[range T1 slide T2]

この時間ベースの範囲ウィンドウでは、過去のタプルを維持する必要のある期間(範囲)と、タプルの出力を表示する頻度(スライド)を指定できます。

タプルがtで表される時刻に到着するとします。スライド値をT2で表すとすると、タプルは表示され、次のタイムスタンプのいずれかに送られて出力されます。

- t: タイムスタンプtがスライドT2の倍数の場合

- Math.ceil(t/T2)*T2: タイムスタンプがスライドT2の倍数でない場合

範囲値をT1で表すとすると、タイムスタンプtで到着するタプルは、タイムスタンプt + T1で期限が切れます。ただし、スライドが指定されていて、その値がゼロ以外の値の場合、期限切れのタプルは、必ずしもタイムスタンプt + T1で出力されません。

期限切れのタプル(期限切れタイムスタンプはt + T1)は、次のタイムスタンプのいずれかで表示されます。

- (t + T1): タイムスタンプ(t+T1)がスライドT2の倍数の場合。

- Math.ceil((t+T1)/T2)*T2: タイムスタンプ(t+T1)がスライドT2の倍数でない場合。

例については、「S [range T1 slide T2]の例」を参照してください。

4.5.3.1 例

S [range T1 slide T2]の例

問合せq1について考えてみます。データ・ストリームSの場合、問合せはリレーションを返します。デフォルトでは、範囲の時間単位はsecondであるため、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に期限切れになります。

<query id="q1"><![CDATA[
SELECT * FROM S [range 10 slide 5]
]]></query>

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

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

4.5.4 S[range unbounded]

この時間ベースの範囲ウィンドウでは、T = infinityである場合に、時間tのリレーションが時間tまでのSのすべての要素から取得されたタプルで構成されるように、出力リレーションが定義されます。要素はウィンドウ内で無限に維持されます。

例については、「S [range unbounded]の例」を参照してください。

4.5.4.1 例

S [range unbounded]の例

問合せq1とデータ・ストリームがあるとします。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。要素は到着した時点でリレーションに挿入されます。どの要素も削除されません。次の例は、時間5000 msに問合せで返されるリレーションと、時間205000 msに問合せで返されるリレーションを示します。

<query id="q1"><![CDATA[
SELECT * FROM S [range unbounded]
]]></query>

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

Timestamp   Tuple Kind  Tuple
1000:     +           10,0.1
1002:     +           15,0.14
5000:     +           33,4.4

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

4.5.5 S[range C on E]

この定数値ベースの範囲ウィンドウでは、ストリーム要素Eの値の差がC未満のタプルから成る、識別子Eに基づいて並べられたストリームの最新部分を取得することで、出力リレーションが定義されます。ストリーム要素Eの値とリレーションの任意のタプルの値の差がC以上の場合、タプルは削除の対象になります。

例については、次の項を参照してください。

- S [range C on E]の例: 定数値

- S [range C on E]の例: INTERVALとTIMESTAMP

4.5.5.1 例

S [range C on E]の例: 定数値

問合せtkdata56_q0とデータ・ストリームtkdata56_S0があるとします。ストリームtkdata56_S0のスキーマは(c1 integer, c2 float)です。次の例は、問合せが返すリレーションを示しています。この例では、時間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未満でないため、削除対象になります。

<query id="tkdata56_q0"><![CDATA[
select * from tkdata56_S0 [range 10 on c1]
]]></query>

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

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を使用できます。問合せtkdata56_q2とデータ・ストリームtkdata56_S1があるとします。ストリームtkdata56_S1のスキーマは(c1 timestamp, c2 double)です。次の例は、問合せが返すリレーションを示しています。

<query id="tkdata56_q2"><![CDATA[
select * from tkdata56_S1 [range INTERVAL "530 0:0:0.0" DAY TO SECOND on c1]
]]></query>

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

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

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

Oracle CQLでは、次のタプルベースのストリームからリレーションへのウィンドウ演算子がサポートされています。

window_type_tuple::=

- S [rows N]

詳細は、次を参照してください。

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

- 問合せ

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

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

4.6.1 S [rows N]

タプルベースのウィンドウでは、並べられたストリームの最後のNタプルのウィンドウをスライドさせることで、時間の経過に沿った出力リレーションが定義されます。

S [rows N]の出力リレーションRの場合、時間tのリレーションは、大きいタイムスタンプ(<= t)を持つSのN個のタプル(または、tまでのSの長さが<= Nの場合はすべてのタプル)で構成されます。

同じタイムスタンプを持つ複数のタプルがある場合は、N個のタプルが返されることを保証するため、Oracle Stream Analyticsによって確定的でない方法で1つのタプルが選択されます。このため、タプルベースのウィンドウはタイムスタンプが一意でないストリームには適していない場合があります。

デフォルトでは、スライドは1です。

例については、「S [rows N]の例」を参照してください。

4.6.1.1 例

S [rows N]の例

問合せq1とデータ・ストリームSがあるとします。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。要素はS [Range 1]の場合と同様に挿入および削除されます(「S [range T]の例」を参照)。

次の例は、時間1002 msで問合せが返すリレーションを示しています。この時点のSの長さはrows値(3)以下であるため、その時点までに挿入されたSのすべてのタプル、つまりタプル(10,0.1)および(15,0.14)が問合せで返されます。

次の例は、時間1006 msで問合せが返すリレーションを示しています。この時点のSの長さはrows値(3)を超えているため、1006 ms以下の大きいタイムスタンプを持つSの3つのタプル、つまりタプル(15,0.14)、(33,4.4)および(23,56.33)が問合せで返されます。

次の例は、時間2000 msで問合せが返すリレーションを示しています。この時点で2000 ms以下の大きいタイムスタンプを持つSの3つのタプル、つまりタプル(45,23.44)、(30,0.3)および(17,1.3)が問合せで返されます。

<query id="q1"><![CDATA[
SELECT * FROM S [rows 3]
]]></query>

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

Timestamp   Tuple Kind  Tuple
1000:         +       10,0.1
1002:         +       15,0.14

Timestamp   Tuple Kind  Tuple
1000:         +       10,0.1
1002:         +       15,0.14
1004:         +       33,4.4
1006:         -       10,0.1
1006:         +       23,56.33

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

4.6.2 S [rows N1 slide N2]

タプルベースのウィンドウでは、並べられたストリームの最後のN1タプルのウィンドウをスライドさせることで、時間の経過に沿った出力リレーションが定義されます。

S [rows N1 slide N2]の出力リレーションRの場合、時間tのリレーションは、大きいタイムスタンプ(<= t)を持つSのN1個のタプル(または、tまでのSの長さが<= Nの場合はすべてのタプル)で構成されます。

同じタイムスタンプを持つ複数のタプルがある場合は、N個のタプルが返されることを保証するため、Oracle Stream Analyticsによって確定的でない方法で1つのタプルが選択されます。このため、タプルベースのウィンドウはタイムスタンプが一意でないストリームには適していない場合があります。

整数のストリーム要素数としてスライドN2を構成できます。Oracle Stream AnalyticsではN2個の要素を受け取るまで、リレーションへの要素の追加が遅れます。

例については、「S [rows N]の例」を参照してください。

4.6.2.1 例

S [rows N1 slide N2]の例

問合せtkdata55_q0とデータ・ストリームtkdata55_S55があるとします。ストリームtkdata55_S55のスキーマは(c1 integer, c2 float)です。

時間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)が含まれます。

<query id="tkdata55_q0"><![CDATA[
select * from tkdata55_S55 [rows 5 slide 2 ]
]]></query>

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

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

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

Oracle CQLでは、次の分割されたストリームからリレーションへのウィンドウ演算子がサポートされています。

window_type_partition::=

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

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

詳細は、次を参照してください。

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

- 問合せ

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

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

4.7.1 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]の例」を参照してください。

4.7.1.1 例

S[partition by A1, ..., Ak rows N]の例

問合せqPart_row2とデータ・ストリームSP1があるとします。ストリームSP1のスキーマは(c1 integer, name char(10))です。この問合せはリレーションを返します。デフォルトでは、範囲(およびスライド)は1秒です。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle Stream Analyticsに通知します。

<query id="qPart_row2"><![CDATA[
select * from SP1 [partition by c1 rows 2]
]]></query>

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

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

4.7.2 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]の例」を参照してください。

4.7.2.1 例

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

問合せqPart_range2とデータ・ストリームSP5があるとします。ストリームSP5のスキーマは(c1 integer, name char(10))です。この問合せはリレーションを返します。デフォルトでは、範囲の時間単位はsecondであるため、range 2はrange 2 secondsと同等です。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。

<query id="qPart_range2"><![CDATA[
select * from SP5 [partition by c1 rows 2 range 2]
]]></query>

Timestamp   Tuple
1000        1,abc
2000        1,abc
3000        1,abc
4000        1,abc
5000        1,def
6000        1,xxx
h 200000000

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

4.7.3 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]の例」を参照してください。

4.7.3.1 例

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

問合せqPart_rangeslideとデータ・ストリームSP1があるとします。ストリームSP1のスキーマは(c1 integer, name char(10))です。この問合せはリレーションを返します。デフォルトでは、範囲とスライドの時間単位はsecondであるため、range 1 slide 1はrange 1 second slide 1 secondと同等です。タイムスタンプはミリ秒(1 s = 1000 ms)で示されています。

<query id="qPart_rangeslide"><![CDATA[
select * from SP1 [partition by c1 rows 1 range 1 slide 1]
]]></query>

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

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

4.8 ユーザー定義のストリームからリレーションへのウィンドウ演算子

Oracle Stream Analyticsには組込みのストリームからリレーションへの演算子が用意されていますが、Javaでユーザー定義の(または拡張可能な)ウィンドウを作成することで、それよりも高度な(またはアプリケーション固有の)ストリームからリレーションへの演算子を作成できます。ユーザー定義のウィンドウは、組込みのストリームからリレーションへのウィンドウ演算子を使用できる場所であれば、Oracle CQL文の任意の場所で使用できます。

注意:

また、ユーザー定義関数を作成することもできます(「ユーザー定義関数」を参照)。

4.8.1 ユーザー定義ウィンドウの実装

oracle.cep.extensibility.windowsパッケージのクラスを使用すると、次の種類のユーザー定義ウィンドウを作成できます。

- 汎用時間ウィンドウ

4.8.1.1 ユーザー定義の汎用時間ウィンドウの実装方法

ユーザー定義の汎用時間ウィンドウを実装するには、GenericTimeWindowインタフェースを実装するJavaクラスを実装します。

ユーザー定義の汎用時間ウィンドウを実装するには:

1. Javaクラスを実装します。

import java.io.IOException;
import java.sql.Timestamp;

import oracle.cep.extensibility.windows.GenericTimeWindow;

public class MyRangeSlideWindow implements GenericTimeWindow {
private long range;
private long slide;

public void setInputParams(Object[] obj) throws IOException{
if(obj.length != 2)
throw new IOException("inappropriate number of arguments");
range = (((Integer)obj[0]).intValue())*1000;
slide = (((Integer)obj[1]).intValue())*1000;
}

public boolean visibleW(Timestamp t, Timestamp visTs) {
long actual = t.getTime();
if(getVisibleTs(actual) < actual)
return false;
visTs.setTime(getVisibleTs(actual));
return true;
}

private long getVisibleTs(long time) {
if(slide > 1) {
long t = time / slide;
if((time % slide) == 0)
return(t*slide);
else
return((t+1)*slide);
} else
return time;
}

public boolean canOutputTsGTInputTs() {
if(slide > 1)
return true;
return false;
}

public boolean expiredW(Timestamp ts, Timestamp expTs) {
long actual = ts.getTime();
long visibleTs = getVisibleTs(actual);
long expiredTs = visibleTs + range;
expTs.setTime(expiredTs);
// This is the border line case, when range > slide and visibleTs < range
if(visibleTs < range)
return false;
return true;
}
}

2. ウィンドウをOracle CQLに登録します。

...
<rule id="range_slide"><![CDATA[
register window range_slide(winrange int, winslide int) implement using "MyRangeSlideWindow"
]]></rule>
...
<query id="q79"><![CDATA[
select * from S12 [range_slide(10,5)]
]]></query>
...

3. FROM句でユーザー定義ウィンドウを使用します。

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

リレーションRへ適用されるIstream (「ストリームの挿入」の略)には、タプルsがR(t) - R(t-1)の中にある場合、つまりsがtの時点でRへ挿入される場合は常に(s,t)が含まれます。同じタイムスタンプでタプルの挿入と削除の両方が発生した場合、Istreamでは挿入が出力されません。

nowウィンドウによってviewq3がリレーションに変換され、これはフィルタ条件によってリレーションとして維持されます。リレーションからストリームへの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の差分を簡単に検出できます。

詳細は、次を参照してください。

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

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

リレーションRに適用されるDStream (Delete streamの略)には、タプルsがR(t-1) - R(t)の中にある場合、つまりtの時点でsがRから削除される場合は常に(s,t)が含まれます。同じタイムスタンプでタプルの挿入と削除の両方が発生した場合、Istreamでは挿入が出力されません。

次の例では、問合せによってストリームSの入力が10分遅延されます。ストリームSはrangeウィンドウ演算子によってリレーションに変換されますが、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}

05    1,1

- 15    1,1

{}

+15    1,1

25    2,2

+ 25    2,2

{2,2}

25    2,2

- 35    2,2

{}

+35    2,2

50    3,3

+ 50    3,3

{3,3}

50    3,3

- 60    3,3

{}

+60    3,3

時間15、35および60の時点で、リレーションは空{}です(空のセット)。

Dstream演算子とDIFFERENCES USING句を組み合せて、Dstreamの差分を簡単に検出できます。

詳細は、次を参照してください。

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

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

Rstream演算子は、入力リレーションの現在の状態全体を維持し、各時間ステップごとにすべてのタプルを挿入として出力します。

Rstreamでは各瞬間のリレーション全体の状態が出力されるため、リレーション・セットが非常に小さい場合を除き、コストがかかる可能性があります。

次の例では、Rstreamによって時間Nowのwhere句でフィルタ処理されたリレーション全体の状態が出力されます。

<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>

5 式

この章では、Oracle Continuous Query Language (Oracle CQL)の式のリファレンスを提供します。式は、1つ以上の値と1つ以上の演算の組合せであり、確定値を持つ定数、値に評価される関数、または値を格納する属性を含みます。

式はそれぞれのデータ型に割り当てられます。この単純な式は4に評価され、データ型はNUMBER (構成要素と同じデータ型)です。

2*2

次の式は、関数と演算子を使用するより複雑な式の例です。この式は現在の日付に7日を加算し、合計から時間の要素を削除し、結果をCHARデータ型に変換します。

TO_CHAR(TRUNC(SYSDATE+7))

この章の内容は次のとおりです。

- 式の概要

- 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

5.1 式の概要

Oracle Stream Analyticsには、次の式が用意されています。

- 集計(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 Stream AnalyticsではOracle CQL文の一部で式の形式の一部が使用できない場合があります。Oracle CQL文の式の制限の詳細は、「Oracle CQL文」で個々のOracle CQL文を参照してください。

このリファレンスの他の部分で説明している条件、Oracle CQL関数、Oracle CQL文でexprと示されている箇所では、適切な式表記を使用する必要があります。それに続く項では、様々な式の例をあげて説明しています。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle Stream Analyticsに通知します。

5.2 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::=

詳細は、「組込みの集計関数」を参照してください。

5.2.1 例

次の例にCOUNT集計(Distinct)式の使用方法を示します。

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)))

5.3 aggr_expr

集計の組込み関数を使用する場合は、aggr_distinct_expr集計式を使用します。distinctを使用した集計の組込み関数を使用する場合は、「aggr_distinct_expr」を参照してください。

aggr_expr::=

(arith_expr::=および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::=

詳細は、次を参照してください。

- 組込みの集計関数

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

- first

- last

5.3.1 例

次の例にCOUNT集計式の使用方法を示します。

<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>

5.4 arith_expr

ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して算術式を定義するには、arith_expr算術式を使用します。すべての一般的な算術演算子(+、-、*、/)および連結演算子(||)を使用できます。

arith_expr::=

(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::=

- param_list

- measure_column::=

詳細は、「算術演算子」を参照してください。

5.4.1 例

次の例に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>

5.5 arith_expr_list

ストリーム要素の属性値、定数値、関数式の結果、集計組込み関数、case式またはdecodeの任意の組合せを使用して1つ以上の算術式を定義するには、arith_expr_list算術式リストを使用します。すべての一般的な算術演算子(+、-、*、/)および連結演算子(||)を使用できます。

arith_expr_list::=

(arith_expr::=)

arith_expr_listは次のOracle CQL文で使用できます。

- xmlelement_expr::=

詳細は、「算術演算子」を参照してください。

5.5.1 例

次の例に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>

5.6 case_expr

複数の条件でストリーム要素を評価するには、case式case_exprを使用します。

case_expr::=

(searched_case_list::=、arith_expr::=、simple_case_list::=)

searched_case_list::=

(searched_case::=)

searched_case::=

(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::=

5.6.1 例

この項では、case_exprの次の例について説明します。

- SELECT *でのcase_expr

- SELECTでのcase_expr

SELECT *でのcase_expr

問合せq97とデータ・ストリームS0があるとします。ストリームS1のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。

<query id="q97"><![CDATA[
select * from S0
where
case
when c2 < 25 then c2+5
when c2 > 25 then c2+10
end > 25
]]></query>

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

Timestamp   Tuple Kind  Tuple
400000:+ 0.3,30
500000:+ 0.3,35
600000:+ ,35
100000000:+ 4.04,40

SELECTでのcase_expr

問合せq96とデータ・ストリームS0およびS1があるとします。ストリームS0のスキーマは(c1 float, c2 integer)であり、ストリームS1のスキーマは(c1 float, c2 integer)です。この問合せはリレーションを返します。

<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>

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

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

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

5.7 decode

複数の条件でストリーム要素を評価するには、decode式を使用します。

decode::=

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)を使用できます。詳細は、「データ型」を参照してください。

search、resultおよびdefaultの各値は式から派生できます。Oracle Stream Analyticsは、短絡評価を使用します。すべてのsearch値を評価してからそれらをexprと比較するかわりに、各search値はexprとの比較が行われる前にのみ評価されます。このため、Oracle Stream Analyticsでは、前回の検索j (0 < j < i)がexprと一致した場合に検索iは評価されません。

Oracle Stream Analyticsは、exprと各search値を、最初のsearch値のデータ型に自動的に変換してから、比較を実行します。Oracle Stream Analyticsにより、戻り値は最初のresultと同じデータ型に自動的に変換されます。

DECODE式では、Oracle Stream Analyticsによって2つのnullが同等と見なされます。exprがnullの場合、Oracle Stream Analyticsは同様にnullである最初のsearchのresultを返します。

expr、searches、resultsおよびdefaultを含むDECODE式の要素の最大数は255です。

decode式はcase_exprと同様です(「case_expr::=」を参照)。

decode式は次のOracle CQL文で使用できます。

- arith_expr::=

5.7.1 例

問合せqと入力リレーションRがあるとします。リレーションRのスキーマは(c1 float, c2 integer)です。この問合せはリレーションを返します。

<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>

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:    +    0.3,35
601000:    -    0.3,35
100000000:    +    4.04,40
100001000:    -    4.04,40

Timestamp   Tuple Kind  Tuple
1000:    +    0.6
1002:    +    0.44
2000:    -    0.1,10
2002:    -    0.14,15
200000:    +    0.3
201000:    -    0.2,20
400000:    +    0.5
401000:    -    0.3,30
500000:    +    0.6
501000:    -    0.3,35
100000000:  +    4.34
100001000:  -    4.34

5.8 func_expr

任意のOracle CQL組込み関数、ユーザー定義関数またはOracleデータ・カートリッジ関数を使用して関数呼出しを定義するには、func_expr関数式を使用します。

func_expr::=

(xml_parse_expr::=, xmlelement_expr::=, xmlforest_expr::=, xmlcolattval_expr::=, func_name:=, link::=, arith_expr::=)

func_name:=

func_name

次のように、関数の識別子を明示的に指定できます。

- Oracleデータ・カートリッジ関数の型によって、linkを使用してまたは使用せずに指定します。
詳細はlink::=を参照してください。

- 空の引数リストを使用して指定します。

- 1つ以上の引数の引数リストを使用して指定します。

- 個別の算術式を使用して指定します。
詳細は、aggr_distinct_exprを参照してください。

PREV

PREV関数は、次のピリオド区切りのidentifier引数から成る単一の引数を使用します。

- identifier1: DEFINE句で指定されたパターンの名前。

- identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

また、PREV 関数は次のconst_int引数を使用します。

- const_int: 現在のストリーム要素の前にある比較対象のストリーム要素の索引。デフォルトは1です。

- const_bigint: 現在のストリーム要素の前にある比較対象のストリーム要素のタイムスタンプ。ストリーム要素のタイムスタンプを取得するには、ELEMENT_TIME疑似列を使用できます(「ELEMENT_TIME疑似列」を参照)。

詳細は、「prev」を参照してください。例については、「func_expr PREV関数の例」を参照してください。

XQuery: XMLEXISTSとXMLQUERY

xqryargs_listにバインドしたXMLストリーム要素データにOracle Event Processingによって適用されるXQueryを指定できます。詳細は、次を参照してください。

- xmlexists

- xmlquery

xqryargs_listは、selectリストからの1つ以上のストリーム要素、ASキーワード、XQuery変数または演算子(現在のノード演算子"."など)を表すconst_stringを使用する算術式から成る1つ以上のxqryargインスタンスのカンマ区切りのリストです。

例については、「func_expr XMLQUERY関数の例」を参照してください。

詳細は、「SQL/XML (SQLX)」を参照してください。

XMLCONCAT

XMLCONCAT関数は、カンマ区切りのxmltype引数の連結をxmltypeとして返します。

詳細は、次を参照してください。

- xmlconcat

- SQL/XML (SQLX)

SQL/XML (SQLX)

SQLX仕様はXMLデータをサポートするようにSQLを拡張します。

Oracle CQLではタイプSQLXのプロパティを含むイベント・タイプがサポートされます。この場合、Oracle Event ProcessingサーバーはOracle CQL内でSQLXからStringに変換し、出力時にStringからSQLXに変換します。

Oracle CQLではSQLXストリームからのデータを操作する次の式(および関数)を提供します。たとえば、SQLXストリーム要素を使用したXML要素または属性の作成、より大きいXMLフラグメントへの結合、XMLコンテンツまたはドキュメントの入力の解析などができます。

注意:

Oracle CQLでは、タイプXMLTYPEの列との外部リレーションはサポートされません(リレーショナル・データベース管理システムとの結合など)。詳細は、「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を使用する場合のデータ型の制限については、次の項を参照してください。

- 日時リテラル

FIRSTとLAST

FIRST関数とLAST関数は、次のピリオド区切りの個別の値から成る単一の引数をそれぞれ使用します。

- identifier1: DEFINE句で指定されたパターンの名前。

- identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

詳細は、次を参照してください。

- first

- last

関数の識別子は、non_mt_arg_list (呼び出される組込み関数またはユーザー定義関数に対して有効な引数のリスト)を明示的に使用するかどうかにかかわらず指定できます。リストには、1つまたは複数の引数を含めることができます。

func_exprは次のOracle CQL文で使用できます。

- arith_expr::=

詳細は、「関数」を参照してください。

5.8.1 例

この項では、func_exprの次の例について説明します。

- func_expr PREV関数の例

- func_expr XMLQUERY関数の例

func_expr PREV関数の例

次の例に、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関数の例

次の例に、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>

次の例に、SUM関数を呼び出すfunc_exprの作成方法を示します。

<query id="q3"><![CDATA[
select sum(c2) from S1[range 5]
]]></query>

5.9 object_expr

データ・カートリッジ複合型のメンバーを参照するには、object_expr式を使用します。

object_exprは、算術式が使用できる場所であればどこでも使用できます。詳細は、「arith_expr」を参照してください。

object_expr::=

external_qualified_identifier::=

()

external_identifier::=

nested_method_field_expr::=

array_expr::=

method_expr::=

オプションとして、object_exprでリンク(@)を使用してデータ・カートリッジ名を指定できます。必要に応じて、linkを使用してOracle CQLデータ・カートリッジ複合型のクラス、メソッド、フィールドまたはコンストラクタの場所を指定し、参照の曖昧性を解消します。この場所は、名前でデータ・カートリッジを参照する必要があります。たとえば、2つのデータ・カートリッジ(myCartridgeとyourCartridge)の両方が複合型com.package.ThisClassを定義する場合、link句を使用して、使用するcom.package.ThisClassを明示的に特定する必要があります。

注意:

デフォルトのJavaデータ・カートリッジで提供されている型を使用する場合、linkは不要です。

link::=

data_cartridge_name::=

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はその組込み関数に対して参照を解決しようとします(「関数」を参照)。

- 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」を参照してください。

5.9.1 例

次の例では、この文でサポートされる様々なセマンティクスを示します。

- オブジェクト式の例

- 型宣言の例: link

- フィールド・アクセスの例: link

- メソッド・アクセスの例: link

- コンストラクタ呼出しの例: link

オブジェクト式の例

次の例にobject_exprを示します。

getContainingGeometries@spatial (InputPoints.point)

このobject_exprは、1つのパラメータ(InputPoints.point)を渡してOracle SpatialメソッドgetContainingGeometriesを呼び出すデータ・カートリッジTABLE句を使用します。このメソッドの戻り値、Oracle Stream Analytics ITypeレコードのCollectionには、別名validGeometriesが作成されます。表ソース自体には別名R2が作成されます。

<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

次の例は、Javaクラスとしてイベント・タイプを作成する方法を示しています。このJavaクラスは、Oracle CQLデータ・カートリッジmyCartridgeに属するパッケージcom.mypackageで定義されたOracle CQLデータ・カートリッジ複合型MyTypeとしてイベント・プロパティを指定します。com.myPackage.MyTypeが他のOracle CQLデータ・カートリッジで定義されている場合(データ・カートリッジ名otherCatridgeで)、リンクとデータ・カートリッジ名myCartridgeを使用してa1プロパティの型を指定することで、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

次の例に、複合型MyTypeをインスタンス化して静的フィールドMY_FIELDにアクセスする方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridgeに属するcom.myPackage.MyTypeクラスを明示的に参照します。

<query id="q1"><![CDATA[
SELECT com.myPackage.MyType@myCartridge(“foo").MY_FIELD ...
]]></query>

メソッド・アクセスの例: link

次の例に、複合型MyTypeをインスタンス化してメソッドmyMethodにアクセスする方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridgeに属するcom.myPackage.MyTypeクラスを明示的に参照します。

<query id="q1"><![CDATA[
SELECT com.myPackage.MyType@myCartridge(“foo").myMethod("bar") ...
]]></query>

コンストラクタ呼出しの例: link

次の例に、複合型MyTypeをインスタンス化する方法を示します。link句は、Oracle CQLデータ・カートリッジmyCartridgeに属するcom.myPackage.MyTypeクラスを明示的に参照します。

<query id="q1"><![CDATA[
SELECT com.myPackage.MyType@myCartridge(“foo") ...
]]></query>

5.10 order_expr

Oracle Stream Analyticsが問合せで選択されたタプルを返すソート順を指定するには、order_expr式を使用します。

order_expr::=

ストリーム要素はattr名で指定できます。

または、const_int索引でもストリーム要素を指定できます。索引はストリームの登録または作成時に指定したストリーム要素の位置に対応します。

5.10.1 例

ストリームS3のスキーマは(c1 bigint, c2 interval, c3 byte(10), c4 float)です。この例は、問合せq210の結果をc1、c2の順でソートする方法と、問合せq211の結果をc2、索引3のストリーム要素(c3)、索引4のストリーム要素(c4)の順でソートする方法を示します。

<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>

5.11 xml_agg_expr

XMLフラグメントのコレクションを集計されたXMLドキュメントとして返すには、xml_agg_expr式を使用します。nullを返す引数は結果から削除されます。

xml_agg_expr::=

(arith_expr)

xml_agg_exprは集計式の引数として指定できます。

xml_agg_exprは次のOracle CQL文で使用できます。

- aggr_expr::=

詳細は、次を参照してください。

- 組込みの集計関数

- xmlagg

5.11.1 例

問合せtkdata67_q1と入力リレーションtkdata67_S0があるとします。リレーションtkdata67_S0のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。

<query id="tkdata67_q1"><![CDATA[
select
c1,
xmlagg(xmlelement("c2",c2))
from
tkdata67_S0[rows 10]
group by c1
]]></query>

Timestamp           Tuple
1000               15, 0.1
1000               20, 0.14
1000               15, 0.2
4000               20, 0.3
10000               15, 0.04
h 12000

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>

5.12 xmlcolattval_expr

XMLフラグメントを作成し、各XMLフラグメントに名前列と属性名が含まれるように結果のXMLを拡張するには、xmlcolattval_expr式を使用します。

xmlcolattval_expr::=

xmlcolattval_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

xmlcolattval_exprはOracle CQL文func_expr::=で使用できます。

5.12.1 例

問合せtkdata53_q1と入力リレーションtkdata53_S0があるとします。リレーションtkdata53_S0のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。

<query id="tkdata53_q1"><![CDATA[
select
XMLELEMENT("tkdata53_S0", XMLCOLATTVAL( tkdata53_S0.c1, tkdata53_S0.c2))
from
tkdata53_S0 [range 1]
]]></query>

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

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>

5.13 xmlelement_expr

ストリーム要素から整形式のXML要素を作成する必要がある場合は、xmlelement_expr式を使用します。

xmlelement_expr::=

(arith_expr::=およびarith_expr_list::=)

xmlelement_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

xmlelement_exprは次のOracle CQL文で使用できます。

- func_expr::=

5.13.1 例

問合せtkdata51_q0と入力リレーションtkdata51_S0があるとします。リレーションtkdata51_S0のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。

<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>

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

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>

5.14 xmlforest_expr

各引数パラメータをXMLに変換し、これらの変換された引数を連結したXMLフラグメントを返すには、xmlforest_exprを使用します。

xmlforest_expr::=

xmlforest_exprは関数式の引数として指定できます。特に、SQLXストリームの処理に役立ちます。詳細は、「SQL/XML (SQLX)」を参照してください。

xmlforest_exprは次のOracle CQL文で使用できます。

- func_expr::=

5.14.1 例

問合せtkdata52_q0と入力リレーションtkdata52_S0があるとします。リレーションtkdata52_S0のスキーマは(c1 integer, c2 float)です。この問合せはリレーションを返します。

<query id="tkdata52_q0"><![CDATA[
select
XMLFOREST( tkdata52_S0.c1, tkdata52_S0.c2)
from
tkdata52_S0 [range 1]
]]></query>

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

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>

5.15 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::=

5.15.1 例

この項では、xml_parse_exprの次の例について説明します。

- xml_parse_exprコンテンツの例

- xml_parse_exprドキュメントの例

- xml_parse_expr整形式の例

xml_parse_exprコンテンツの例

問合せtkdata62_q3と入力リレーションtkdata62_S1があるとします。リレーションtkdata62_S1のスキーマは(c1 char(30))です。この問合せはリレーションを返します。

<query id="tkdata62_q3"><![CDATA[
select XMLPARSE(CONTENT c1) from tkdata62_S1
]]></query>

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>"

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ドキュメントの例

問合せtkdata62_q4と入力リレーションtkdata62_S1があるとします。リレーションtkdata62_S1のスキーマは(c1 char(30))です。この問合せはリレーションを返します。

<query id="tkdata62_q4"><![CDATA[
select XMLPARSE(DOCUMENT c1) from tkdata62_S1
]]></query>

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>"

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整形式の例

問合せtkdata62_q2と入力リレーションtkdata62_Sがあるとします。リレーションtkdata62_Sのスキーマは(c char(30))です。この問合せはリレーションを返します。

<query id="tkdata62_q2"><![CDATA[
select XMLPARSE(DOCUMENT c WELLFORMED) from tkdata62_S
]]></query>

Timestamp               Tuple
1000                    "<a>3</a>"
1000                    "<e3>blaaaaa</e3>"
1000                    "<r>4</r>"
1000                    "<a/>"
1003                    "<a>s3</a>"
1004                    "<d>b6</d>"

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の値を返します。

この章の内容は次のとおりです。

- 条件の概要

- 比較条件

- 論理条件

- LIKE条件

- 範囲条件

- Null条件

- 複合条件

- IN条件

6.1 条件の概要

Oracle CQL文のconditionと示されている箇所では、常に適切な条件構文を使用する必要があります。

条件は、次の文のWHERE句で使用できます。

- SELECT

条件は、SELECT文の次の句で使用できます。

- WHERE

- HAVING

関連項目:

問合せ

条件は論理的なデータ型であると考えることができます。

次の単純な条件は常に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 Stream Analyticsによって同じ式の異なる条件が評価される順序です。複数の条件を含む式を評価する場合、Oracle Stream Analyticsでは優先順位の高い条件が優先順位の低い条件よりも先に評価されます。Oracle Stream Analyticsでは、優先順位の等しい条件は式の左から右に評価されます。

表6-1は、Oracle CQL条件の優先順位レベルを高い順に示しています。同じ行にある条件の優先順位は同じです。表に示されているとおり、演算子は条件の前に評価されます。

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

条件の種類

目的

Oracle CQL演算子はOracle CQL条件の前に評価されます

「演算子の優先順位について」を参照してください。

=, <>, <, >, <=, >=

比較

IS NULL、IS NOT NULL、LIKE、BETWEEN、IN、NOT IN

比較

NOT

累乗、論理否定

AND

論理積

OR

論理和

XOR

論理和

6.2 比較条件

比較条件はある式を別の式と比較します。このような比較の結果は TRUE、FALSEまたはNULLになります。

数値式の比較の場合、Oracle Stream Analyticsでは数値の優先順位を使用して、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

文字データのパターン照合テスト。

詳細は、「LIKE条件」を参照してください。

<query id="q291"><![CDATA[
select * from SLk1
where first1 like "^Ste(v|ph)en$"
]]></query>

is [not] null

Nullテスト。

詳細は、「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

集合およびメンバーシップ・テスト。

詳細は、「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::=

(aggr_expr::=およびnon_mt_arg_list_set::=)

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は入力文字セットで定義された文字を使用して、文字列を計算します。

Stringを比較する構文を伴うLIKE条件では、0個以上の文字に対応する%と任意の1文字に非干渉的に対応する-がサポートされます。

like_condition::=

(arith_expr::= )

この構文では:

- 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::=

(「式」)

表6-10に、null条件を示します。

表6-10 Null条件

条件の種類

演算

例

IS [NOT] NULL

NULLをテストします。

関連項目: 「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.8 IN条件

INおよびNOT INは、次のように使用できます。

- in_condition_set: 「メンバーシップ条件としてのINとNOT INの使用」

- in_condition_membership: 「メンバーシップ条件としてのINとNOT INの使用」

注意:

これらの2つの使用方法を組み合せることはできません。

「NOT INとNull値」で説明しているように、NOT IN条件を使用する際は、null値の効果に注意してください。

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

この使用方法では、問合せはSELECT-FROM-WHERE問合せになり、1つの引数が同じタイプの引数のリスト内に含まれているメンバーであるかどうか、または引数のリストが一連の同様なリストのメンバーであるかどうかがテストされます。

in_condition_membership::=

(arith_expr::=およびnon_mt_arg_list_set::= )

non_mt_arg_list_set::=

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と一致している必要があります。

問合せQ1とデータ・ストリームS0があるとします。ストリームS0には、スキーマ(c1 integer, c2 integer)があります。次の例は、問合せが返すリレーションを示しています。Q1では、non_mt_arg_list_setは((50,4),(4,5))です。これに含まれている各non_mt_arg_listが、条件(c1, c2)の左にあるnon_mt_arg_list内の引数の数およびタイプと一致している必要があります。

<query id="Q1"><![CDATA[
select c1,c2 from S0[range 1] where (c1,c2) in ((50,4),(4,5))
]]></query>

Timestamp   Tuple
1000        50, 4
2000        30, 6
3000          , 5
4000        22,
h 200000000

Timestamp   Tuple Kind  Tuple
1000:       +           50,4
2000:       -           50,4

6.8.2 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はすべてのV2ストリーム要素を返します。

<view id="V1" schema="c1"><![CDATA[
select * from S1[range 10 slide 10] where 1=2
]]></view>
<view id="V2" schema="c1"><![CDATA[
select * from S1[range 10 slide 10] where c1=2
]]></view>
<query id="Q1"><![CDATA[
V2 not in V1
]]></query>

7 共通のOracle CQL DDL句

この章では、Oracle Continuous Query Language (Oracle CQL)のデータ定義言語(DDL)に含まれる句のリファレンスを提供します。

この章の内容は次のとおりです。

- 共通の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文の詳細は、「Oracle CQL文」を参照してください。

7.2 array_type

目的

すべて同じ型の一連のcomplex_typeコンポーネントで構成されるOracle CQLデータ・カートリッジの型を指定するには、array_type句を使用します。

注意:

Oracle CQLでは1次元配列のみをサポートしています。このため、java.lang.String[]は使用できますが、java.lang.String[][]は使用できません。

前提条件

なし。

構文

array_type::=

セマンティクス

配列宣言

配列型はOracle CQLデータ・カートリッジcomplex_typeのqualified_type_nameを使用して宣言します。complextypeの配列のみがサポートされます。Oracle CQL Javaデータ・カートリッジに同等の型が定義されていなければ、Oracle CQL単純型の配列を宣言することはできません。

配列アクセス

complex_type配列要素には、整数索引でアクセスします。索引は、データ・カートリッジ実装によって0または1で始まります。

配列へのアクセス時に、Oracle CQLで新しい配列型のインスタンスを直接インスタンス化することはサポートされていません。たとえば、次の文は使用できません。

SELECT java.lang.String[10] ...

例

次の例は、Javaクラスとしてイベント・タイプを作成する方法を示しています。このJavaクラスは、パッケージcom.mypackageで定義されたOracle CQLデータ・カートリッジ複合型MyClassの配列としてイベント・プロパティを指定します。

package com.myapplication.event;

import java.util.Date;

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::=を参照してください。

配列アクセスの例

次の例に、Oracle CQLデータ・カートリッジ複合型の配列アクセスを使用する、次の問合せを登録する方法を示します。

- ビューv1は配列a1の3番目の要素にアクセスします。この配列には、Oracle CQLデータ・カートリッジ複合型com.mypackage.MyClassのインスタンスが含まれます。

- 問合せq1は配列field1の最初の要素にアクセスします。この配列は、Oracle CQLデータ・カートリッジ複合型a1で定義されます。

<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>

7.3 attr

目的

ストリーム要素または疑似列を指定するには、attr句を使用します。

attr句は次のOracle CQL文で使用できます。

- arith_expr::=

- order_expr::=

前提条件

なし。

構文

図7-1 attr::=

identifier::=および例7-1

セマンティクス

identifier

ストリーム要素の識別子を指定します。

次を指定できます

- StreamOrViewName.ElementName

- ElementName

- CorrelationName.PseudoColumn

- PseudoColumn

例については、「例」を参照してください。

例7-1 pseudo_column

特定のストリーム要素、すべてのストリーム要素、またはMATCH_RECOGNIZE句の相関名に関連するストリーム要素に関連付けられているタイムスタンプを指定します。

例については、次の項を参照してください。

- 例

- SELECTでのELEMENT_TIMEの使用

- GROUP BYでのELEMENT_TIMEの使用

- PATTERNでのELEMENT_TIMEの使用

詳細については、「疑似列」を参照してください。

例

ストリームとそれに対応する有効な属性句を次に示します。

- ItemTempStream.temp

- temp

- B.element_time

- element_time

<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>

7.4 attrspec

目的

ストリーム要素の識別子とデータ型を定義するには、attrspec句を使用します。

前提条件

なし。

構文

図7-2 attrspec::=

(fixed_length_datatype::=およびvariable_length_datatype::=).

セマンティクス

identifier

ストリーム要素の識別子を指定します。

fixed_length_datatype

ストリーム要素のデータ型を固定長のデータ型として指定します。

構文については、「fixed_length_datatype::=」を参照してください。

variable_length_datatype

ストリーム要素のデータ型を可変長のデータ型として指定します。

構文については、「variable_length_datatype::=」を参照してください。

integer

可変長データ型の長さを指定します。

7.5 complex_type

目的

次の項目を定義するOracle CQLデータ・カートリッジの型を指定するには、complex_type句を使用します。

- メンバー・フィールド(静的またはインスタンス)

- メンバー・メソッド(静的またはインスタンス)

- コンストラクタ

フィールドの型、およびメソッドの戻り値の型およびパラメータ・リストは、複合型または単純型です。

複合型は修飾型名(ピリオド「.」で区切られた一連の識別子)と所属するデータ・カートリッジのオプション名(link::=を参照)で識別されます。リンク名を指定しない場合、Oracle Stream Analyticsでは、この複合型がJavaクラスであると想定されます(つまり、この複合型がJavaデータ・カートリッジに属するとOracle Stream Analyticsで見なされます)。

前提条件

complextypeを提供するOracle CQLデータ・カートリッジが、実行時にOracle Stream Analyticsサーバーによってロードされている必要があります。

構文

complex_type::=

(link::=)

セマンティクス

fieldname

fieldname句を使用して、Oracle CQLデータ・カートリッジ複合型の静的フィールドを指定します。

フィールド・アクセス

ORDER BY句内の式で生成された複合型l-valueは使用できません。現在、SELECT句およびWHERE句内の式のみ、複合型l-valueを生成できます。

qualified_type_nameを使用してアクセスできるのは、静的フィールドのみです。静的でないフィールドにアクセスするには、まず、複合型をインスタンス化しておく必要があります。

メソッド・アクセス

複合型のセッター・メソッドにアクセスすると、他の問題が発生する可能性があります。他の問題が発生すると、同時実行性と共有の機会が低下します。たとえば、セッター・メソッドを呼び出して、ビューに依存する他の問合せと共有しているビュー属性(イベント・プロパティなど)の値を変更すると、メソッド呼出しによって発生した他の問題により、問合せの結果が変わる可能性があります。

qualified_type_nameを使用してアクセスできるのは、静的メソッドのみです。静的でないフィールドにアクセスするには、まず、複合型をインスタンス化しておく必要があります。

コンストラクタ呼出し

qualified_type_nameを使用してアクセスできるのは、静的フィールドおよび静的メソッドのみです。静的でないフィールドまたは静的でないメソッドにアクセスするには、まずいずれかのコンストラクタを呼び出して、複合型をインスタンス化する必要があります。

例

フィールド・アクセスの例: complex_type

次の例に、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)が必要です。

<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

次の例に、Oracle CQLデータ・カートリッジ複合型のメソッド・アクセスを使用する、次の問合せを登録する方法を示します。

- 問合せq1は、Oracle CQLデータ・カートリッジ複合型a1で定義されたメソッドmyMethodにアクセスします。この問合せは、空のパラメータ・リストでメソッドにアクセスします。

- 問合せq2は、問合せq1とは別の署名を使用して、Oracle CQLデータ・カートリッジ複合型a1で定義されたメソッドmyMethodにアクセスします。このケースでは、問合せは3つの引数パラメータ・リストでメソッドにアクセスします。

- 問合せq3は、Oracle CQLデータ・カートリッジ複合型MyTypeで定義されたメソッドmyStaticMethodにアクセスします。この問合せは、1つのパラメータでメソッドにアクセスします。静的メソッドの場合、リンク(@myCartridge)が必要です。

<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

次の例に、Oracle CQLデータ・カートリッジ複合型のコンストラクタ呼出しを使用する、次の問合せを登録する方法を示します。

- 問合せq1は、パッケージjava.langで定義されたコンストラクタStringを呼び出します。このケースでは、問合せは空の引数リストでコンストラクタを呼び出します。

- 問合せq2は、パッケージjava.langで定義されたコンストラクタStringを呼び出します。このケースでは、問合せは1つの引数パラメータ・リストでコンストラクタを呼び出し、返されたStringインスタンスで定義された静的でないメソッドsubstringを呼び出します。

<query id="q1"><![CDATA[
SELECT java.lang.String() …
]]></query>
<query id="q2"><![CDATA[
SELECT java.lang.String(“food").substring(0,1) …
]]></query>

7.6 const_bigint

目的

big integerの数値リテラルを指定するには、const_bigint句を使用します。

const_bigint句は次のOracle CQL文で使用できます。

- func_expr::=

詳細は、「数値リテラル」を参照してください。

前提条件

なし。

構文

const_bigint::=

7.7 const_int

目的

整数の数値リテラルを指定するには、const_int句を使用します。

const_int句は次のOracle CQL文で使用できます。

- func_expr::=

- order_expr::=

詳細は、「数値リテラル」を参照してください。

前提条件

なし。

構文

const_int::=

7.8 const_string

目的

定数のStringテキスト・リテラルを指定するには、const_string句を使用します。

const_string句は次のOracle CQL文で使用できます。

- func_expr::=

- order_expr::=

- condition::=

- 図7-4

- 図16-26

- 図16-31

詳細は、「テキスト・リテラル」を参照してください。

前提条件

なし。

構文

図7-3 const_string::=

7.9 const_value

目的

リテラル値を指定するには、const_value句を使用します。

const_value句は次のOracle CQL文で使用できます。

- arith_expr::=

- condition::=

詳細は、「リテラル」を参照してください。

前提条件

なし。

構文

図7-4 const_value::=

例7-2

図7-5 interval_value

例7-2 interval_value

期間の定数値を引用符付きの文字列として指定します。次に例を示します。

INTERVAL '4 5:12:10.222' DAY TO SECOND(3)

詳細は、「期間リテラル」を参照してください。

const_string

引用符付きのString定数値を指定します。

詳細は、「テキスト・リテラル」を参照してください。

null

null定数値を指定します。

詳細は、「Null」を参照してください。

const_int

int定数値を指定します。

詳細は、「数値リテラル」を参照してください。

bigint

bigint定数値を指定します。

詳細は、「数値リテラル」を参照してください。

float

float定数値を指定します。

詳細は、「数値リテラル」を参照してください。

7.10 identifier

目的

既存のOracle CQLスキーマ オブジェクトを参照するには、identifier句を使用します。

identifier句は次のOracle CQL文で使用できます。

- 図16-20

- aggr_expr::=

- func_expr::=

- 図7-1

- 図7-2

- 図7-9

- 図7-8

- 図16-8

- measure_column::=

- 問合せ

- 図16-5

- ビュー

前提条件

スキーマ・オブジェクトが存在している必要があります。

構文

図7-6 identifier::=

const_stringおよびExample 7-3

例7-3 unreserved_keyword::=

セマンティクス

const_string

識別子をStringとして指定します。

詳細は、「スキーマ・オブジェクトのネーミング・ルール」を参照してください。

[A-Z]

識別子を単一の大文字として指定します。

unreserved_keyword

識別子として使用できる名前です。

詳細は、次を参照してください。

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

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。

7.11 l-value

目的

整数リテラルを指定するには、l-value句を使用します。

前提条件

なし。

構文

l-value::=

7.12 methodname

目的

Oracle CQLデータ・カートリッジ複合型のメソッドを指定するには、methodname句を使用します。

前提条件

なし。

構文

methodname::=

(link::=)

7.13 non_mt_arg_list

目的

1つ以上の引数をストリーム要素を使用する算術式として指定するには、non_mt_arg_list句を使用します。

non_mt_arg_list句は次のOracle CQL文で使用できます。

- decode::=

- func_expr::=

- condition::=

- non_mt_arg_list_set::=

前提条件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

non_mt_arg_list::=

(arith_expr::=)

セマンティクス

arith_expr

引数値に解決される算術式を指定します。

7.14 non_mt_attr_list

目的

1つ以上の引数をストリーム要素として直接指定するには、non_mt_attr_list句を使用します。

non_mt_attr_list句は次のOracle CQL文で使用できます。

- 図15-6

- 図16-9

- 図16-12

前提条件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

図7-7 non_mt_attr_list::=

セマンティクス

attr

引数をストリーム要素として直接指定します。

7.15 non_mt_attrname_list

目的

1つ以上のストリーム要素を名前で指定するには、non_mt_attrname_list句を使用します。

non_mt_attrname_list句は次のOracle CQL文で使用できます。

- ビュー

前提条件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

図7-8 non_mt_attrname_list::=

セマンティクス

identifier

ストリーム要素を名前で指定します。

7.16 non_mt_attrspec_list

目的

ストリーム要素の識別子とデータ型を定義する1つ以上の属性仕様を指定するには、non_mt_attrspec_list句を使用します。

non_mt_attrspec_list句は次のOracle CQL文で使用できます。

- ビュー

前提条件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

non_mt_attrspec_list::=

セマンティクス

attrspec

属性の識別子とデータ型を指定します。

7.17 non_mt_cond_list

目的

AND、OR、XORおよびNOTの論理演算子の任意の組合せを使用して1つ以上の条件を指定するには、non_mt_cond_list句を使用します。

non_mt_cond_list句は次のOracle CQL文で使用できます。

- 図15-5

- searched_case::=

- 図16-11

- 図16-19

詳細は、「条件」を参照してください。

前提条件

なし。

構文

non_mt_cond_list::=

(condition::=、between_condition::=)

セマンティクス

condition

比較条件を指定します。

詳細は、「比較条件」を参照してください。

構文については、「condition::=」を参照してください。

between_condition

範囲に含まれているかをテストする条件を指定します。

詳細は、「範囲条件」を参照してください。

構文については、「between_condition::=」を参照してください。

7.18 out_of_line_constraint

目的

このout_of_line_constraint句は、任意のデータ型のタプルを主キー整合性制約で制限するために使用します。

USE UPDATE SEMANTICSのリレーションに対する問合せを構成しようとしている場合は、1つ以上のストリーム要素を主キーとして宣言する必要があります。この制約は、1つ以上のストリーム要素の値で構成される複合主キーを指定するために使用します。

out_of_line_constraint句は、次のOracle CQL文で使用できます。

- 問合せ

詳細は、次を参照してください。

- Null

前提条件

out_of_line_constraintで指定したタプルには、null値を含めることができません。

構文

out_of_line_constraint::=

セマンティクス

non_mt_attrname_list

主キー整合性制約で制限する1つ以上のタプルを指定します。

7.19 param_list

目的

関数パラメータ・リストに類似した、Oracle CQLデータ・カートリッジ複合型のメソッドまたはコンストラクタのゼロ個以上のパラメータのカンマ区切りリストを指定するには、param_list句を使用します。

param_list句は次のOracle CQL文で使用できます。

- link::=

前提条件

なし。

構文

param_list::=

(arith_expr::=)

7.20 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::=

(arith_expr::=およびlink::=)

セマンティクス

package_name

package_name句を使用して、Oracle CQLデータ・カートリッジ・パッケージ名を指定します。

class_name

class_name句を使用して、Oracle CQLデータ・カートリッジClassの名前を指定します。

7.21 query_ref

目的

既存のOracle CQL問合せを名前で参照するには、query_ref句を使用します。

次のOracle CQL文でOracle CQL問合せを参照できます。

- ビュー

前提条件

問合せが存在している必要があります(「Query」を参照)。

構文

図7-9 query_ref::=

セマンティクス

identifier

問合せの名前を指定します。これは、以降のOracle CQL文で問合せを参照するのに使用する名前です。

7.22 time_spec

目的

日数、時間数、分数、秒数、ミリ秒数またはナノ秒数で期間を定義するにはtime_spec句を使用します。

デフォルト: 単位を指定しない場合、Oracle Stream Analyticsでは[second|seconds]が想定されます。

time_spec句は次のOracle CQL文で使用できます。

- 図15-9

- 「問合せセマンティクス」のwindows_type

前提条件

なし。

構文

図7-10 time_spec::=

図7-11 time_unit::=

セマンティクス

integer

時間単位の数を指定します。

time_unit

時間単位を指定します。

7.23 xml_attribute_list

目的

1つ以上のXML属性を指定するには、xml_attribute_list句を使用します。

xml_attribute_list句は次のOracle CQL文で使用できます。

- xmlelement_expr

前提条件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

xml_attribute_list::=

セマンティクス

xml_attr_list

1つ以上のXML属性を指定します。

<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>

7.24 xml_attr_list

目的

1つ以上のXML属性を指定するには、xml_attr_list句を使用します。

xml_attr_list句は次のOracle CQL文で使用できます。

- xml_attribute_list

- xmlforest_expr

- xml_agg_expr

前提条件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

xml_attr_list::=

( arith_expr::=)

セマンティクス

xml_attr

XML属性を指定します。

7.25 xqryargs_list

目的

XML問合せに1つ以上の引数を指定するには、xqryargs_list句を使用します。

non_mt_arg_list句は次のOracle CQL文で使用できます。

- xmlexists

- xmlquery

- func_expr::=

前提条件

参照しているストリーム要素がある場合は、ストリームが存在している必要があります。

構文

xqryargs_list::=

( arith_expr::=)

セマンティクス

xqryarg

ストリーム要素の値をXQuery変数またはXPath演算子にバインドする句。

1つ以上のストリーム要素を使用する任意の算術式を(arith_expr::=を参照)、指定されたXQueryの変数またはXPath演算子("."など)に引用符付きの文字列としてバインドできます。

第II部 関数

この部は、次の章で構成されています。

- 組込みの単一行関数

- 組込みの集計関数

- Colt単一行関数

- Colt集計関数

- java.lang.Math関数

- ユーザー定義関数

8 組込みの単一行関数

この章では、Oracle Continuous Query Language (Oracle CQL)の単一行関数のリファレンスを提供します。単一行関数は、問い合せたストリームまたはビューのすべての行について単一行の結果を返します。

この章の内容は次のとおりです。

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

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 Stream Analyticsに通知します。

8.2 concat

構文

目的

concatは、char2に連結されたchar1をchar[]として返すか、byte2に連結されたbyte1をbyte[]として返します。返されるcharは、char1と同じ文字セット内にあります。そのデータ型は、引数のデータ型によって決まります。

concatを使用すると、任意の組合せの文字、バイトおよび数値データ型を連結できます。concatでは、数値を文字列に自動変換します。

この関数は、連結演算子(||)に相当します。

xmltypeの引数を連結するには、xmlconcatを使用します。詳細は、「xmlconcat」を参照してください。

例

concat関数

「concat」に示す問合せchr_concatと、「concat」に示すデータ・ストリームS4があるとします。ストリームS4のスキーマは(c1 char(10))です。この問合せは、「concat」に示すリレーションを返します。

例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">
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

8.3 hextoraw

構文

目的

hextorawは、char文字セット内の16進数を含むcharをRAW値に変換します。

関連項目:

rawtohex

例

問合せq6とデータ・ストリームSBytがあるとします。ストリームSBytのスキーマは(c1 integer, c2 char(10))です。この問合せはリレーションを返します。

<query id="q6"><![CDATA[
select * from SByt[range 2]
where
hextoraw(c2) between and hextoraw("5600")
]]></query>

Timestamp   Tuple
1000        1,"51c1"
2000        2,"52"
3000        3,"53aa"
4000        4,"5"
5000         ,"55ef"
6000        6,
h 8000
h 200000000

Timestamp   Tuple Kind  Tuple
3000        +           3,"53aa"
5000        -           3,"53aa"
5000        +            ,"55ef"
7000        -            ,"55ef"

8.4 length

構文

目的

length関数は、char式またはbyte式の長さをintとして返します。lengthでは、入力文字セットで定義されている文字を使用して長さを計算します。

char式の場合は、すべての末尾の空白が長さに含まれます。式がnullの場合、この関数はnullを返します。

例

問合せchr_lenとデータ・ストリームS2があるとします。ストリームS2のスキーマは(c1 char(10), c2 integer)です。この問合せはリレーションを返します。

<query id="chr_len"><![CDATA[
select length(c1) from S2[range 5]
]]></query>

Timestamp   Tuple
1000
2000       hi
8000       hi1
9000
15000       xyz
h 200000000

Timestamp   Tuple Kind  Tuple
1000:      +           0
2000:      +           2
6000:      -           0
7000:      -           2
8000:      +           3
9000:      +           0
13000:      -           3
14000:      -           0
15000:      +           3
20000:      -           3

8.5 lk

構文

目的

char1が正規表現char2に一致する場合、lkはブール値trueを返します。それ以外の場合は、falseを返します。

この関数は、LIKE条件に相当します。詳細は、次の項を参照してください。

例

問合せq291とデータ・ストリームSLk1があるとします。ストリームSLk1のスキーマは(first1 char(20), last1 char(20))です。この問合せはリレーションを返します。

<query id="q291"><![CDATA[
select * from SLk1
where
lk(first1,"^Ste(v|ph)en$") = true
]]></query>

Timestamp   Tuple
1           Steven,King
2           Sten,Harley
3           Stephen,Stiles
4           Steven,Markles
h 200000000

Timestamp   Tuple Kind  Tuple
1:          +           Steven,King
3:          +           Stephen,Stiles
4:          +           Steven,Markles

8.6 nvl

構文

目的

nvlを使用すると、空白として返されるnullを問合せの結果内の文字列に置き換えることができます。expr1がnullの場合、NVLはexpr2を返します。expr1がnullでない場合、NVLはexpr1を返します。

引数expr1およびexpr2は任意のデータ型にすることができます。これらのデータ型が異なる場合、Oracle Stream Analyticsでは一方の型をもう一方に暗黙的に変換します。暗黙的な変換を行うことができない場合、Oracle Stream Analyticsはエラーを返します。暗黙的な変換は、次のように実行されます。

- expr1が文字データの場合、Oracle Stream Analyticsは、expr2を文字データに変換してから、expr1の文字セットでそれらを比較してVARCHAR2を返します。

- expr1が数値の場合、Oracle Stream Analyticsによって数値の優先度の最も高い引数が判定され、もう一方の引数がこのデータ型に暗黙的に変換されて、そのデータ型が戻されます。

例

問合せq281とデータ・ストリームSNVLがあるとします。ストリームSNVLのスキーマは(c1 char(20), c2 integer)です。この問合せはリレーションを返します。

<query id="q281"><![CDATA[
select nvl(c1,"abcd") from SNVL
]]></query>

Timestamp   Tuple
1              ,1
2            ab,2
3           abc,3
4              ,4
h 200000000

Timestamp   Tuple Kind  Tuple
1:          +           abcd
2:          +           ab
3:          +           abc
4:          +           abcd

8.7 prev

構文

目的

prevは、現在のイベントが属するパーティション内にある、現在のイベントの前に発生したイベントのストリーム属性(関数の引数identifier2)の値を返します。該当する前のイベントがない場合は、NULLと評価されます。

指定されるストリーム要素の型は、次のいずれかになります。

- integer

- bigint

- float

- double

- byte

- char

- interval

- timestamp

この関数の戻り値の型は、指定されたストリーム属性の型によって異なります(関数の引数identifier2)。

説明:

- identifier1.identifier2: identifier1はPATTERN句で使用されDEFINE句で定義される相関変数の名前で、identifier2はprevによって前のイベントの値が返されるストリーム属性の名前です。

- const_int1: この引数の値がnの場合、現在のイベントが属するパーティション内のn個前のイベントを指定します。このようなイベントが存在する場合、n個前のイベントの属性値(引数identifier2で指定される)が返され、それ以外の場合はNULLが返されます。

- const_bigint: 時間範囲をナノ秒で指定し、現在のイベントより前の特定の時間範囲以内に発生した以前のイベントのみを探す場合に使用します。

問合せでPARTITION BYがprev関数と使用され、入力データに多数の異なるパーティション・キー値(つまり多数のパーティション)が含まれる場合、パーティションごとに以前のイベントを格納するために消費される合計メモリーは大きくなる可能性があります。そのような場合は、時間範囲(3番目の引数で、できるかぎり大きな範囲値を指定)を使用して、このメモリーを可能なかぎり再利用できるようにします。

例

prev(identifier1.identifier2)

問合せq2とデータ・ストリームS1があるとします。ストリームS1のスキーマは(c1 integer)です。この例では、パターンAをA.c1 = prev(A.c1)と定義します。つまり、現在のストリーム要素のc1の値が現在のストリーム要素の直前にあるストリーム要素のc1の値と一致する場合に、パターンAが一致します。この問合せはストリームを返します。

<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>

Timestamp   Tuple
1000        35
3000        35
4000        10
5000         7

Timestamp   Tuple Kind  Tuple
5000:       +           35,7

prev(identifier1.identifier2, const_int)

問合せq35とデータ・ストリームS15があるとします。ストリームS15のスキーマは(c1 integer, c2 integer)です。この例では、パターンAをA.c1 = prev(A.c1,3)と定義します。つまり、現在のストリーム要素のc1の値が現在のストリーム要素の3つ前にあるストリーム要素のc1の値と一致する場合に、パターンAが一致します。この問合せはストリームを返します。

<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>

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

Timestamp   Tuple Kind  Tuple
4000:       +          45
5000:       +          45
6000:       +          45
7000:       +          45
8000:       +          45
12000:       +          43
13000:       +          52
15000:       +          43

prev(identifier1.identifier2, const_int, const_bigint)

問合せq36とデータ・ストリームS15があるとします。ストリームS15のスキーマは(c1 integer, c2 integer)です。この例では、パターンAをA.c1 = prev(A.c1,3,5000000000L)と定義します。つまり、次の場合にパターンAが一致します。

- 現在のイベントのc1の値が、現在のイベントが属するパーティション内の3つ前のイベントのc1の値と一致する場合、および

- 現在のイベントのタイムスタンプと3つ前のイベントのタイムスタンプの差が、5000000000Lナノ秒以下である場合。

この問合せは出力ストリームを返します。出力ストリームには、8000での出力はありません。次の例は、パーティション(c2属性の値によるパーティション化)の内容を示します。8000のイベントはここに含まれています。

Timestamp   Tuple
1000        45,20
6000        45,20
7000        45,20
8000        45,20

次の例に示すように、3つ前のイベント(1000でのイベント)のc1の値が現在のイベント(8000でのイベント)のc1の値と等しくても、範囲条件は満たされません。これら2つのイベントのタイムスタンプの差が5000000000ナノ秒を超えているためです。前のタプルは存在しないものとして処理され、prevはNULLを返すため、条件は一致しません。

<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>

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

Timestamp   Tuple Kind  Tuple
5000:       +           45

8.8 rawtohex

構文

目的

rawtohexは、RAW値を含むbyteをchar文字セット内の16進数に変換します。

関連項目:

hextoraw

例

問合せbyte_to_hexとデータ・ストリームS5があるとします。ストリームS5のスキーマは(c1 integer, c2 byte(10))です。この問合せでは、rawtohex関数を使用して、10バイトのRAW値を、現在のロケールの文字セット内にある同等の10個の16進数に変換します。この問合せはリレーションを返します。

<query id="byte_to_hex"><![CDATA[
select rawtohex(c2) from S5[range 4]
]]></query>

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

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:      -

8.9 systimestamp

構文

目的

systimestampは、Oracle Stream Analyticsサーバーが存在するシステムのシステム日付(小数で表す秒数とタイムゾーンを含む)を返します。戻り値の型は、TIMESTAMP WITH TIME ZONEです。

例

問合せq106とデータ・ストリームS0があるとします。ストリームS0のスキーマは(c1 float, c2 integer)です。この問合せはリレーションを返します。

<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>

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

Timestamp   Tuple Kind  Tuple
1002:  +           0.14,15
400000:  +           0.3 ,30
500000:  +           0.3 ,35
600000:  +               ,35
100000000:  +           4.04,40

8.10 to_bigint

構文

目的

入出力の型

この関数の入出力の型は次のとおりです。

入力の型

出力の型

INTEGER

BIGINT

TIMESTAMP

BIGINT

CHAR

BIGINT

例

問合せq282とデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。この問合せはリレーションを返します。

<query id="q282"><![CDATA[
select nvl(to_bigint(c1), 5.2) from S11
]]></query>

Timestamp   Tuple
10        1,abc
2000         ,ab
3400        3,abc
4700         ,a
h 8000
h 200000000

Timestamp   Tuple Kind  Tuple
10:       +           1
2000:       +           5.2
3400:       +           3
4700:       +           5.2

8.11 to_boolean

構文

目的

to_booleanは、bigint式またはinteger式の引数に対して値trueまたはfalseを返します。

例

問合せq282とデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。この問合せはリレーションを返します。

<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>

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

Timestamp   Tuple Kind  Tuple
1000      +           true,-2147483648
1000      -           true,-2147483648
4000      +           true,-12345678901
4000      -           true,-12345678901
7000      +           ,
7000      -           ,

8.12 to_char

構文

目的

to_charは、integer、double、bigint、float、timestampまたはinterval式の引数に対してcharの値を返します。bigintの引数がcharの精度を超える場合、Oracle Stream Analyticsはエラーを返します。

例

問合せq282とデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。この問合せはリレーションを返します。

<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>

Timestamp   Tuple
1000        99,99999, 99.9, 99.9999, "4 1:13:48.10", "08/07/2004 11:13:48", cep

Timestamp   Tuple Kind  Tuple
1000:       +           99,99999,99.9,99.9999,4 1:13:48.10,08/07/2004 11:13:48

8.13 to_double

構文

目的

to_doubleは、bigint、integerまたはfloat式の引数に対してdoubleの値を返します。bigintの引数がdoubleの精度を超える場合、Oracle Stream Analyticsはエラーを返します。

例

問合せq282とデータ・ストリームS11があるとします。ストリームS11のスキーマは(c1 integer, name char(10))です。この問合せはリレーションを返します。

<query id="q282"><![CDATA[
select nvl(to_double(c1), 5.2) from S11
]]></query>

Timestamp   Tuple
10        1,abc
2000         ,ab
3400        3,abc
4700         ,a
h 8000
h 200000000

Timestamp   Tuple Kind  Tuple
10:       +           1
2000:       +           5.2
3400:       +           3
4700:       +           5.2

8.14 to_float

構文

目的

to_floatは、bigintまたはintegerの引数と同等のfloatの数値を返します。bigintの引数がfloatの精度を超える場合、Oracle Stream Analyticsはエラーを返します。

例

問合せq1とデータ・ストリームS11があるとします。ストリームS1のスキーマは(c1 integer, name char(10))です。この問合せはリレーションを返します。

<query id="q1"><![CDATA[
select nvl(to_float(c1), 5.2) from S11
]]></query>

Timestamp   Tuple
10        1, abc
2000         , ab
3400        3, abc
4700         , a
h 8000
h 200000000

Timestamp   Tuple Kind  Tuple
10:+ 1.02000:+ 5.23400:+ 3.04700:+ 5.2

8.15 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データ型に変換します。

例

問合せq277とデータ・ストリームSTs2があるとします。ストリームSTs2のスキーマは(c1 integer, c2 char(20))です。この問合せはリレーションを返します。

<query id="q277"><![CDATA[
select * from STs2
where
to_timestamp(c2,"yyMMddHHmmss") = to_timestamp("09/07/2005 10:13:48")
]]></query>

Timestamp   Tuple
1           1,"040807111348"
2           2,"050907101348"
3           3,"041007111348"
4           4,"060806111248"
h 200000000

Timestamp   Tuple Kind  Tuple
2:          +           2,050907101348

8.16 xmlcomment

構文

目的

xmlcommentは、二重引用符で区切られた定数Stringの引数をxmltypeとして返します。

xmlcommentを使用すると、整形式のXMLコメントを問合せ結果に追加できます。

この関数は、次の引数をとります。

- quoted_string_double_quotes: 二重引用符で区切られたString定数。

この関数の戻り値の型はxmltypeです。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。

例

問合せtkdata64_q1とデータ・ストリームtkdata64_Sがあるとします。ストリームtkdata64_Sのスキーマは(c1 char(30))です。この問合せはリレーションを返します。

<query id="tkdata64_q1"><![CDATA[
select xmlconcat(xmlelement("parent", c1), xmlcomment("this is a comment"))
from tkdata64_S
]]></query>

Timestamp   Tuple
c 30
1000        "san jose"
1000        "mountain view"
1000
1000        "sunnyvale"
1003
1004        "belmont"

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-->

8.17 xmlconcat

構文

目的

xmlconcatは、カンマで区切られたxmltypeの引数の連結をxmltypeとして返します。

xmlconcatを使用すると、任意の組合せのxmltypeの引数を連結できます。

この関数は、次の引数をとります。

- non_mt_arg_list: カンマで区切られたxmltypeの引数のリスト。詳細は、次の項を参照してください。

この関数の戻り値の型はxmltypeです。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。

この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、次の項を参照してください。

xmltype以外のデータ型を連結するには、CONCATを使用します。詳細は、「concat」を参照してください。

例

問合せtkdata64_q1とデータ・ストリームtkdata64_Sがあるとします。ストリームtkdata64_Sのスキーマは(c1 char(30))です。この問合せはリレーションを返します。

<query id="tkdata64_q1"><![CDATA[
select
xmlconcat(xmlelement("parent", c1), xmlcomment("this is a comment"))
from tkdata64_S
]]></query>

Timestamp   Tuple
c 30
1000        "san jose"
1000        "mountain view"
1000
1000        "sunnyvale"
1003
1004        "belmont"

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-->

8.18 xmlexists

構文

目的

xmlexistsは、XMLデータのストリームに対する連続した問合せを作成します。この問合せでは、指定したXQueryをXMLデータが満たすかどうかを示すbooleanを返します。

この関数は、次の引数をとります。

- const_string: xqryargs_listでバインドするXMLストリーム要素のデータにOracle Stream Analyticsが適用するXQuery。詳細は、次の項を参照してください。

- xqryargs_list: ストリーム要素とXQuery変数またはXPath演算子との間の1つまたは複数のバインディングのリスト。詳細は、次の項を参照してください。

この関数の戻り値の型はbooleanです。XQueryを満たす場合はtrue、それ以外の場合はfalseです。

この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、次の項を参照してください。

関連項目:

- xmlquery

例

問合せq1とXMLデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 integer, c2 xmltype)です。この例では、ストリーム要素c2の値が現在のノード(".")にバインドされ、ストリーム要素c1 + 1の値がXQuery変数xにバインドされます。この問合せはリレーションを返します。

<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>

Timestamp   Tuple
3           1, "<PDRecord><PDName>hello</PDName></PDRecord>"
4           2, "<PDRecord><PDName>hello</PDName><PDName>hello1</PDName></PDRecord>"
5           3, "<PDRecord><PDId>4</PDId><PDName>hello1</PDName></PDRecord>"
6           4, "<PDRecord><PDId>46</PDId><PDName>hello2</PDName></PDRecord>"

Timestamp   Tuple Kind  Tuple
3:          +           false
4:          +           false
5:          +           true
6:          +           false

8.19 xmlquery

構文

目的

xmlqueryは、XMLデータのストリームに対する連続した問合せを作成します。この問合せでは、指定したXQueryを満たすXMLデータを返します。

この関数は、次の引数をとります。

- const_string: xqryargs_listでバインドするXMLストリーム要素のデータにOracle Stream Analyticsが適用するXQuery。詳細は、次の項を参照してください。

- xqryargs_list: ストリーム要素とXQuery変数またはXPath演算子との間の1つまたは複数のバインディングのリスト。詳細は、次の項を参照してください。

この関数の戻り値の型はxmltypeです。正確なスキーマはXMLデータの入力ストリームのスキーマによって異なります。

この関数は、SQLXのストリームを処理する場合に特に役立ちます。詳細は、次の項を参照してください。

関連項目:

- xmlexists

例

問合せとXMLデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 integer, c2 xmltype)です。この例では、ストリーム要素c2の値が現在のノード(".")にバインドされ、ストリーム要素c1 + 1の値がXQuery変数xにバインドされます。この問合せはリレーションを返します。

<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>

Timestamp   Tuple
3           1, "<PDRecord><PDName>hello</PDName></PDRecord>"
4           2, "<PDRecord><PDName>hello</PDName><PDName>hello1</PDName></PDRecord>"
5           3, "<PDRecord><PDId>4</PDId><PDName>hello1</PDName></PDRecord>"
6           4, "<PDRecord><PDId>46</PDId><PDName>hello0</PDName></PDRecord>"
7           5, "<PDRecord><PDId>5</PDId><PDName>hello2</PDName></PDRecord>"

Timestamp   Tuple Kind  Tuple
3:          +
4:          +
5:          +           "<PDName>hello1</PDName>"
6:     +
7:          +           "<PDName>hello2</PDName>"

9 組込みの集計関数

この章では、Oracle Continuous Query Language (Oracle CQL)に含まれる組込みの集計関数のリファレンスを提供します。組込みの集計関数は、問合せが返すすべての値の集計操作を行います。

この章の内容は次のとおりです。

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

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

表9-1に、Oracle CQLに用意されている組込みの集計関数を示します。

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

型

関数

集計

- listagg

- max

- min

- xmlagg

集計(増分計算)

- avg

- count

- sum

拡張集計

- first

- last

選択した重複タプルの各セットで1つのコピーのみがOracle Stream Analyticsから返されるようにするには、distinctを指定します。重複タプルとはselectリスト内の各式と一致する値を持つタプルです。詳細は、次の項を参照してください。

Oracle Stream Analyticsは、ネストされた集計はサポートしていません。

注意:

組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle Stream Analyticsに通知します。

詳細は、次を参照してください。

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

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

Oracle CQLでは、where句はgroup by句およびhaving句の前に適用されます。つまり、次のOracle CQL文は無効です。

<query id="q1"><![CDATA[
select * from InputChanel[rows 4 slide 4] as ic where count(*) = 4
]]></query>

かわりに、次のOracle CQL文を使用する必要があります。

<query id="q1"><![CDATA[
select * from InputChanel[rows 4 slide 4] as ic where count(*) = 4
]]></query>

9.2 avg

構文

目的

avgは、exprの平均値を返します。

この関数は、bigint、floatまたはintデータ型を引数として使用します。また、引数の数値データ型に関係なくfloatを返します。

入出力の型

次の表に、入力の型および対応する出力の型を示します。

入力の型

出力の型

INT

FLOAT

BIGINT

FLOAT

FLOAT

FLOAT

DOUBLE

DOUBLE

BIGDECIMAL

BIGDECIMAL

例

問合せfloat_avgとデータ・ストリームS3があるとします。ストリームS3のスキーマは(c1 float)です。この問合せはリレーションを返します。平均値が数字でない場合、avg関数はNaNの結果を返します。

<query id="float_avg"><![CDATA[
select avg(c1) from S3[range 5]
]]></query>

Timestamp   Tuple
1000
2000        5.5
8000        4.4
9000
15000       44.2
h 200000000

Timestamp   Tuple Kind  Tuple
1000:      -
1000:      +            0.0
2000:      -            0.0
2000:      +            5.5
6000:      -            5.5
6000:      +            5.5
7000:      -            5.5
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:      +

9.3 count

構文

目的

countは、問合せが返すタプル数をintの値として返します。

表9-2に示すように、戻り値は引数によって異なります。

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

入力引数

戻り値

arith_expr

arith_exprがnullでない場合のタプルの数。

*

重複とnullを含む、すべてのタプルの数。

identifier.*

相関変数identifierと一致する、重複とnullを含む、すべてのタプルの数。

identifier.attr

attrがnullでない場合に、相関変数identifierと一致するタプルの数。

countは、nullを返しません。

例

問合せq2とデータ・ストリームS2があるとします。ストリームS2のスキーマは(c1 integer, c2 integer)です。この問合せはリレーションを返します。

<query id="q2"><![CDATA[
SELECT COUNT(c2), COUNT(*) FROM  S2 [RANGE 10]
]]></query>

Timestamp   Tuple
1000        1,2
2000        1,
3000        1,4
6000        1,6

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
6000:                    +           3,4

9.4 first

構文

目的

firstは、指定されたパターンに最初に一致する、指定されたストリーム要素の値を返します。

指定されるストリーム要素の型は、次のいずれかになります。

- bigint

- integer

- byte

- char

- float

- interval

- timestamp

この関数の戻り値の型は、指定されたストリーム要素の型によって異なります。

この関数は、ピリオドで区切られた次の値で構成される1つの引数を使用します。

- identifier1: DEFINE句で指定されたパターンの名前。

- identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

関連項目:

- last

例

問合せq9とデータ・ストリームS0があるとします。ストリームS0のスキーマは(c1 integer, c2 float)です。この例では、パターンCをC.c1 = 7と定義します。また、firstcをfirst(C.c2)と定義します。つまり、最初にc1 = 7になった場合に、firstcは値c2と等しくなります。この問合せはリレーションを返します。

<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>

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

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

9.5 last

構文

目的

lastは、指定されたパターンに最後に一致する、指定されたストリーム要素の値を返します。

指定されるストリーム要素の型は、次のいずれかになります。

- bigint

- integer

- byte

- char

- float

- interval

- timestamp

この関数の戻り値の型は、指定されたストリーム要素の型によって異なります。

この関数は、ピリオドで区切られた次の値で構成される1つの引数を使用します。

- identifier1: DEFINE句で指定されたパターンの名前。

- identifier2: CREATE STREAM文で指定されたストリーム要素の名前。

関連項目:

- first

例

問合せq9とデータ・ストリームS0があるとします。ストリームS1のスキーマは(c1 integer, c2 float)です。この例では、パターンCをC.c1 = 7と定義します。また、lastcをlast(C.c2)と定義します。つまり、最後にc1 = 7になった場合に、lastcは値c2と等しくなります。この問合せはリレーションを返します。

<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>

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

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

9.6 listagg

構文

目的

listaggは、その関数の引数に相当するJavaの値を含むjava.util.Listを返します。

関数の引数としてユーザー定義のクラスが使用される場合、そのクラスはequalsメソッドを実装する必要があります。

例

<view id="v1"><![CDATA[
ISTREAM(select c1, listAgg(c3) as l1,
java.util.LinkedHashSet(listAgg(c3)) as set1
from S1
group by c1)
]]></view>

<query id="q1"><![CDATA[
select v1.l1.size(), v1.set1.size()
from v1
]]></query>

Timestamp     Tuple
1000          orcl, 1, 15, 400
1000          msft, 1, 15, 400
2000          orcl, 2, 20, 300
2000          msft, 2, 20, 300
5000          orcl, 4, 5, 200
5000          msft, 4, 5, 200
7000          orcl, 3, 10, 100
7000          msft, 3, 20, 100
h 20000000

Timestamp   Tuple Kind   Tuple
1000:          +        1,1
1000:          +        1,1
2000:          +        2,2
2000:          +        2,2
5000:          +        3,3
5000:          +        3,3
7000:          +        4,4
7000:          +        4,3

9.7 max

構文

目的

maxは、exprの最大値を返します。そのデータ型は引数のデータ型によって異なります。

例

問合せtest_max_timestampとデータ・ストリームS15があるとします。ストリームS15のスキーマは(c1 int, c2 timestamp)です。この問合せはリレーションを返します。

<query id="test_max_timestamp"><![CDATA[
select max(c2) from S15[range 2]
]]></query>

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

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:       +

9.8 min

構文

目的

minは、exprの最小値を返します。そのデータ型は引数のデータ型によって異なります。

例

問合せtest_min_timestampとデータ・ストリームS15があるとします。ストリームS15のスキーマは(c1 int, c2 timestamp)です。この問合せはリレーションを返します。

<query id="test_min_timestamp"><![CDATA[
select min(c2) from S15[range 2]
]]></query>

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

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:       +

9.9 sum

構文

目的

sumは、exprの値の合計を返します。この関数は、bigint、floatまたはinteger式を引数として使用します。また、引数の数値データ型と同じデータ型を返します。

例

問合せq3とデータ・ストリームS1があるとします。ストリームS1のスキーマは(c1 integer, c2 bigint)です。この問合せはリレーションを返します。rangeの詳細は、次を参照してください。

<query id="q3"><![CDATA[
select sum(c2) from S1[range 5]
]]></query>

Timestamp   Tuple
1000         5,
1000        10,5
2000          ,4
3000        30,6
5000        45,44
7000        55,3
h 200000000

Timestamp   Tuple Kind  Tuple
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:      +

9.10 xmlagg

構文

目的

xmlaggは、集計されたXMLドキュメントとしてXMLフラグメントの集合を返します。nullを返す引数は結果から削除されます。

ORDER BY句を使用すると、フラグメントの順序を制御できます。

例

xmlagg関数とxmlelement関数

問合せtkdata67_q1と入力リレーションがあるとします。ストリームtkdata67_S0のスキーマは(c1 integer, c2 float)です。この問合せでは、xmlelementを使用してストリーム要素からXMLフラグメントを作成し、xmlaggを使用してそれらのXMLフラグメントをXMLドキュメントに集計します。この問合せはリレーションを返します。

<query id="tkdata67_q1"><![CDATA[
select
c1,
xmlagg(xmlelement("c2",c2))
from
tkdata67_S0[rows 10]
group by c1
]]></query>

Timestamp           Tuple
1000               15, 0.1
1000               20, 0.14
1000               15, 0.2
4000               20, 0.3
10000               15, 0.04
h 12000

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句

問合せtkxmlAgg_q5と入力リレーションがあるとします。ストリームtkxmlAgg_S1のスキーマは(c1 int, c2 xmltype)です。この問合せでは、xmltypeストリーム要素を選択し、XMLAGGを使用してそれらをXMLドキュメントに集計します。また、ORDER BY句を使用してXMLフラグメントを並べ替えます。この問合せはリレーションを返します。

<query id="tkxmlAgg_q5"><![CDATA[
select
xmlagg(c2),
xmlagg(c2 order by c1)
from
tkxmlAgg_S1[range 2]
]]></query>

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>"

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オープン・ソース・ライブラリに基づいています。

詳細は、「関数」を参照してください。

この章の内容は次のとおりです。

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

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 Stream Analyticsに通知します。

詳細は、次を参照してください。

- 関数

- データ型

- http://dsd.lbl.gov/~hoschek/colt/

10.2 beta

構文

目的

betaは、cern.jet.stat.Gammaに基づいています。入力引数のベータ関数(図10-1を参照)をdoubleとして返します。

図10-1 cern.jet.stat.Gamma beta

この関数は、次の引数をとります。

- double1: xの値。

- double2: yの値。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/random/Beta.html#Beta(double, double, cern.jet.random.engine.RandomEngine)を参照してください。

例

問合せqColt28について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt28"><![CDATA[
select beta(c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           3.1415927
1000:       +           1.899038
1200:       +           1.251922
2000:       +           4.226169

10.3 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。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/random/Beta.html#Beta(double, double, cern.jet.random.engine.RandomEngine)を参照してください。

例

問合せqColt35について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt35"><![CDATA[
select beta1(c2,c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.66235894
1200:       +           0.873397
2000:       +           0.44519535

10.4 betaComplemented

構文

目的

betaComplementedは、cern.jet.stat.Probabilityに基づいています。ベータ密度関数(図10-2を参照)の右側の尾(xから無限大)で示す領域をdoubleとして返します。

この関数は、次の引数をとります。

- double1: ベータ分布のアルファ・パラメータa。

- double2: ベータ分布のベータ・パラメータb。

- double3: 積分終了点x。

詳細は、次を参照してください。

- incompleteBeta

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#betaComplemented(double, double, double)

例

問合せqColt37について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt37"><![CDATA[
select betaComplemented(c2,c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.66235894
1200:       +           0.873397
2000:       +           0.44519535

10.5 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で計算される二項係数。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#binomial(double, long)を参照してください。

例

問合せqColt6について考えてみます。スキーマ(c1 integer, c2 double, c3 long)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt6"><![CDATA[
select binomial(c2,c3) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           -0.013092041
1000:       +           -0.012374863
1200:       +           -0.0010145549
2000:       +           -0.0416

10.6 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で計算される二項係数。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/random/Binomial.html#Binomial(int, double, cern.jet.random.engine.RandomEngine)を参照してください。

例

問合せqColt7について考えてみます。スキーマ(c1 integer, c2 float, c3 long)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt7"><![CDATA[
select binomial1(c3,c3) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           1.0
1200:       +           1.0
2000:       +           1.0

10.7 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。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#binomial(int, int, double)を参照してください。

例

問合せqColt34について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt34"><![CDATA[
select binomial2(c1,c1,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           1.0
1200:       +           1.0
2000:       +           1.0

10.8 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。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#binomialComplemented(int, int, double)を参照してください。

例

問合せqColt38について考えてみます。スキーマ(integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt38"><![CDATA[
select binomialComplemented(c1,c1,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

10.9 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に設定されたビット・マスクを返します。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/colt/bitvector/QuickBitVector.html#bitMaskWithBitsSetFromTo(int, int)

- leastSignificantBit

- mostSignificantBit

例

問合せqColt53について考えてみます。スキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

query id="qColt53"><![CDATA[
select bitMaskWithBitsSetFromTo(c1,c1) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           2
1000:       +           16
1200:       +           8
2000:       +           256

10.10 ceil

構文

目的

ceilは、cern.jet.math.Arithmeticに基づいています。doubleの引数以上の最小のlongを返します。

丸めエラーが発生する可能性があるため、このメソッドは(float) java.lang.Math.ceil(long)を使用する場合よりも安全です。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#ceil(double)

- ceil1

例

問合せqColt1について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt1"><![CDATA[
select ceil(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           1
1200:       +           1
2000:       +           1

10.11 chiSquare

構文

目的

chiSquareは、cern.jet.stat.Probabilityに基づいています。自由度がvのカイ2乗確率密度関数(図10-6を参照)の左側の尾(0からx)で示す領域をdoubleとして返します。

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

この関数は次の引数を使用します(すべての引数は正の値であることが必要です)。

- double1: 自由度v。

- double2: 積分終了点x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#chiSquare(double, double)を参照してください。

例

問合せqColt39について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt39"><![CDATA[
select chiSquare(c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

10.12 chiSquareComplemented

構文

目的

chiSquareComplementedは、cern.jet.stat.Probabilityに基づいています。自由度がvのカイ2乗確率密度関数(図10-6を参照)の右側の尾(xから無限大)で示す領域をdoubleとして返します。

この関数は次の引数を使用します(すべての引数は正の値であることが必要です)。

- double1: 自由度v。

- double2: 積分終了点x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#chiSquareComplemented(double, double)を参照してください。

例

問合せqColt40について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt40"><![CDATA[
select chiSquareComplemented(c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

10.13 errorFunction

構文

目的

errorFunctionは、cern.jet.stat.Probabilityに基づいています。図10-7に示す積分を使用して、doubleの引数の正規分布のエラー関数をdoubleとして返します。

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

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#errorFunction(double)を参照してください。

例

問合せqColt41について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt41"><![CDATA[
select errorFunction(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5204999
1000:       +           0.6778012
1200:       +           0.79184324
2000:       +           0.42839235

10.14 errorFunctionComplemented

構文

目的

errorFunctionComplementedは、cern.jet.stat.Probabilityに基づいています。図10-8に示す積分を使用して、doubleの引数の正規分布の相補エラー関数をdoubleとして返します。

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

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#errorFunctionComplemented(double)を参照してください。

例

問合せqColt42について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt42"><![CDATA[
select errorFunctionComplemented(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.47950011
1000:       +           0.3221988
1200:       +           0.20815676
2000:       +           0.57160765

10.15 factorial

構文

目的

factorialは、cern.jet.math.Arithmeticに基づいています。integerの正の引数の階乗をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#factorial(int)を参照してください。

例

問合せqColt8について考えてみます。スキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt8"><![CDATA[
select factorial(c1) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +               1.0
1000:       +              24.0
1200:       +               6.0
2000:       +           40320.0

10.16 floor

構文

目的

floorは、cern.jet.math.Arithmeticに基づいています。doubleの引数以下の最大のlongの値を返します。

丸めエラーが発生する可能性があるため、このメソッドは(double) java.lang.Math.floor(double)を使用する場合よりも安全です。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#floor(double)

- floor1

例

問合せqColt2について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt2"><![CDATA[
select floor(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0
1000:       +           0
1200:       +           0
2000:       +           0

10.17 gamma

構文

目的

gammaは、cern.jet.stat.Gammaに基づいています。doubleの引数のガンマ関数をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#gamma(double, double, double)を参照してください。

例

問合せqColt29について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt29"><![CDATA[
select gamma(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.7724539
1000:       +           1.2980554
1200:       +           1.0768307
2000:       +           2.2181594

10.18 gamma1

構文

目的

gamma1は、cern.jet.stat.Probabilityに基づいています。ガンマ確率密度関数(図10-9を参照)の積分(0からx)をdoubleとして返します。

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

この関数は、次の引数をとります。

- double1: ガンマ分布のアルファ値a

- double2: ガンマ分布のベータ値またはラムダ値b

- double3: 積分終了点x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/random/Gamma.html#Gamma(double, double, cern.jet.random.engine.RandomEngine)を参照してください。

例

問合せqColt36について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt36"><![CDATA[
select gamma1(c2,c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5204999
1000:       +           0.55171627
1200:       +           0.59975785
2000:       +           0.51785487

10.19 gammaComplemented

構文

目的

gammaComplementedは、cern.jet.stat.Probabilityに基づいています。ガンマ確率密度関数(図10-10を参照)の積分(xから無限大)をdoubleとして返します。

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

この関数は、次の引数をとります。

- double1: ガンマ分布のアルファ値a

- double2: ガンマ分布のベータ値またはラムダ値b

- double3: 積分終了点x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#gammaComplemented(double, double, double)を参照してください。

例

問合せqColt43について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt43"><![CDATA[
select gammaComplemented(c2,c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.47950011
1000:       +           0.44828376
1200:       +           0.40024218
2000:       +           0.48214513

10.20 getSeedAtRowColumn

構文

目的

getSeedAtRowColumnは、cern.jet.random.engine.RandomSeedTableに基づいています。あらかじめ定義されているシードの(外見上は膨大な)マトリックスから決定論的なシードをintegerとして返します。

この関数は、次の引数をとります。

- integer1: rowの値。[0,Integer.MAX_VALUE]の形式が望ましいですが、そうでなくてもかまいません。

- integer2: columnの値。[0,1]の形式が望ましいですが、そうでなくてもかまいません。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/random/engine/RandomSeedTable.html#getSeedAtRowColumn(int, int)を参照してください。

例

問合せqColt27について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt27"><![CDATA[
select getSeedAtRowColumn(c1,c1) from SColtFunc
]]></query>

Tmestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           253987020
1000:       +           1289741558
1200:       +           417696270
2000:       +           350557787

10.21 hash

構文

目的

hashは、cern.colt.map.HashFunctionsに基づいています。指定されたdoubleの値に対してintegerのハッシュコードを返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/colt/map/HashFunctions.html#hash(double)を参照してください。

例

問合せqColt56について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt56"><![CDATA[
select hash(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +            1071644672
1000:       +            1608935014
1200:       +            2146204385
2000:       +           -1613129319

10.22 hash1

構文

目的

hash1は、cern.colt.map.HashFunctionsに基づいています。指定されたfloatの値に対してintegerのハッシュコードを返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/colt/map/HashFunctions.html#hash(float)を参照してください。

例

問合せqColt57について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt57"><![CDATA[
select hash1(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1302214522
1000:       +           1306362078
1200:       +           1309462552
2000:       +           1300047248

10.23 hash2

構文

目的

hash2は、cern.colt.map.HashFunctionsに基づいています。指定されたintegerの値に対してintegerのハッシュコードを返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/colt/map/HashFunctions.html#hash(int)を参照してください。

例

問合せqColt58について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt58"><![CDATA[
select hash2(c1) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           4
1200:       +           3
2000:       +           8

10.24 hash3

構文

目的

hash3は、cern.colt.map.HashFunctionsに基づいています。指定されたlongの値に対してintegerのハッシュコードを返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/colt/map/HashFunctions.html#hash(long)を参照してください。

例

問合せqColt59について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt59"><![CDATA[
select hash3(c3) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           8
1000:       +           6
1200:       +           12
2000:       +           4

10.25 i0

構文

目的

i0は、cern.jet.math.Besselに基づいています。doubleの引数の階数0の変更済のベッセル関数をdoubleとして返します。

この関数は、i0(x) = j0(ix)と定義されます。

範囲は[0,8]と(8,infinity)の2つの区間に分けられます。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#i0(double)

- j0

例

問合せqColt12について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt12"><![CDATA[
select i0(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.0634834
1000:       +           1.126303
1200:       +           1.2080469
2000:       +           1.0404018

10.26 i0e

構文

目的

i0eは、cern.jet.math.Besselに基づいています。doubleの引数の階数0の指数スケールが適用された変更済のベッセル関数をdoubleとして返します。

この関数は、i0e(x) = exp(-|x|) j0(ix)と定義されます。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#i0e(double)

- j0

例

問合せqColt13について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt13"><![CDATA[
select i0e(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.64503527
1000:       +           0.55930555
1200:       +           0.4960914
2000:       +           0.6974022

10.27 i1

構文

目的

i1は、cern.jet.math.Besselに基づいています。doubleの引数の階数1の変更済のベッセル関数をdoubleとして返します。

この関数は、i1(x) = -i j1(ix)と定義されます。

範囲は[0,8]と(8,infinity)の2つの区間に分けられます。各区間では、チェビシェフ多項式展開が使用されます。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#i1(double)

- j1

例

問合せqColt14について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt14"><![CDATA[
select i1(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.2578943
1000:       +           0.37187967
1200:       +           0.49053898
2000:       +           0.20402676

10.28 i1e

構文

目的

i1eは、cern.jet.math.Besselに基づいています。doubleの引数の階数1の指数スケールが適用された変更済のベッセル関数をdoubleとして返します。

この関数は、i1(x) = -i exp(-|x|) j1(ix)と定義されます。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#i1e(double)

- j1

例

問合せqColt15について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt15"><![CDATA[
select i1e(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.1564208
1000:       +           0.18466999
1200:       +           0.20144266
2000:       +           0.13676323

10.29 incompleteBeta

構文

目的

incompleteBetaは、cern.jet.stat.Gammaに基づいています。0からxまで評価される不完全ベータ関数をdoubleとして返します。

この関数は、次の引数をとります。

- double1: ベータ分布のアルファ値a

- double2: ベータ分布のベータ値b

- double3: 積分終了点x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Gamma.html#incompleteBeta(double, double, double)を参照してください。

例

問合せqColt30について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt30"><![CDATA[
select incompleteBeta(c2,c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.66235894
1200:       +           0.873397
2000:       +           0.44519535

10.30 incompleteGamma

構文

目的

incompleteGammaは、cern.jet.stat.Gammaに基づいています。引数の不完全ガンマ関数をdoubleとして返します。

この関数は、次の引数をとります。

- double1: ガンマ分布のアルファ値a。

- double2: 積分終了点x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Gamma.html#incompleteGamma(double, double)を参照してください。

例

問合せqColt31について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt31"><![CDATA[
select incompleteGamma(c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.6826895
1000:       +           0.6565891
1200:       +           0.6397422
2000:       +           0.7014413

10.31 incompleteGammaComplement

構文

目的

incompleteGammaComplementは、cern.jet.stat.Gammaに基づいています。引数の補足の不完全ガンマ関数をdoubleとして返します。

この関数は、次の引数をとります。

- double1: ガンマ分布のアルファ値a。

- double2: 積分開始点x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Gamma.html#incompleteGammaComplement(double, double)を参照してください。

例

問合せqColt32について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt32"><![CDATA[
select incompleteGammaComplement(c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.3173105
1000:       +           0.34341094
1200:       +           0.3602578
2000:       +           0.29855874

10.32 j0

構文

目的

j0は、cern.jet.math.Besselに基づいています。doubleの引数の階数0の第1種ベッセル関数をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#j0(double)を参照してください。

例

問合せqColt16について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt16"><![CDATA[
select j0(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.9384698
1000:       +           0.8812009
1200:       +           0.8115654
2000:       +           0.9603982

10.33 j1

構文

目的

j1は、cern.jet.math.Besselに基づいています。doubleの引数の階数1の第1種ベッセル関数をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#j1(double)を参照してください。

例

問合せqColt17について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt17"><![CDATA[
select j1(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.24226846
1000:       +           0.32899573
1200:       +           0.40236986
2000:       +           0.19602658

10.34 jn

構文

目的

jnは、cern.jet.math.Besselに基づいています。引数の階数nの第1種ベッセル関数をdoubleとして返します。

この関数は、次の引数をとります。

- integer1: ベッセル関数の階層n。

- double2: ベッセル関数を計算する値x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#jn(int, double)を参照してください。

例

問合せqColt18について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt18"><![CDATA[
select jn(c1,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.24226846
1000:       +           6.1009696E-4
1200:       +           0.0139740035
2000:       +           6.321045E-11

10.35 k0

構文

目的

k0は、cern.jet.math.Besselに基づいています。doubleの引数の階数0の変更済の第3種ベッセル関数をdoubleとして返します。

範囲は[0,8]と(8, infinity)の2つの区間に分けられます。各区間では、チェビシェフ多項式展開が使用されます。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#k0(double)を参照してください。

例

問合せqColt19について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt19"><![CDATA[
select k0(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.92441905
1000:       +           0.6605199
1200:       +           0.49396032
2000:       +           1.1145291

10.36 k0e

構文

目的

k0eは、cern.jet.math.Besselに基づいています。doubleの引数の階数0の指数スケールが適用された変更済の第3種ベッセル関数をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#k0e(double)を参照してください。

例

問合せqColt20について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt20"><![CDATA[
select k0e(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.5241094
1000:       +           1.3301237
1200:       +           1.2028574
2000:       +           1.662682

10.37 k1

構文

目的

k1は、cern.jet.math.Besselに基づいています。doubleの引数の階数1の変更済の第3種ベッセル関数をdoubleとして返します。

範囲は[0,2]と(2, infinity)の2つの区間に分けられます。各区間では、チェビシェフ多項式展開が使用されます。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#k1(double)を参照してください。

例

問合せqColt21について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt21"><![CDATA[
select k1(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.6564411
1000:       +           1.0502836
1200:       +           0.7295154
2000:       +           2.1843543

10.38 k1e

構文

目的

k1eは、cern.jet.math.Besselに基づいています。doubleの引数の階数1の指数スケールが適用された変更済の第3種ベッセル関数をdoubleとして返します。

この関数は、k1e(x) = exp(x) * k1(x)と定義されます。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#k1e(double)

- k1

例

問合せqColt22について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt22"><![CDATA[
select k1e(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           2.7310097
1000:       +           2.1150115
1200:       +           1.7764645
2000:       +           3.258674

10.39 kn

構文

目的

knは、cern.jet.math.Besselに基づいています。引数の階数nの変更済の第3種ベッセル関数をdoubleとして返します。

この関数は、次の引数をとります。

- integer1: ベッセル関数の階層の値n。

- double2: ベッセル関数を計算する値x。

範囲は[0,9.55]と(9.55, infinity)の2つの区間に分けられます。低域では昇べき級数が使用され、高域では漸近展開が使用されます。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#kn(int, double)を参照してください。

例

問合せqColt23について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt23"><![CDATA[
select kn(c1,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +             1.6564411
1000:       +           191.99422
1200:       +            10.317473
2000:       +             9.7876858E8

10.40 leastSignificantBit

構文

目的

leastSignificantBitは、cern.colt.bitvector.QuickBitVectorに基づいています。integerの引数の状態がtrueの最下位ビットの索引を(integerとして)返します。状態がtrueのビットがない場合は、32を返します。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/colt/bitvector/QuickBitVector.html#leastSignificantBit(int)

- bitMaskWithBitsSetFromTo

- mostSignificantBit

例

問合せqColt54について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt54"><![CDATA[
select leastSignificantBit(c1) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0
1000:       +           2
1200:       +           0
2000:       +           3

10.41 log

構文

目的

logは、cern.jet.math.Arithmeticに基づいています。図10-11に示す計算の結果をdoubleとして返します。

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

この関数は、次の引数をとります。

- double1: base。

- double2: value。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#log(double, double)を参照してください。

例

問合せqColt3について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt3"><![CDATA[
select log(c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           1.0
1200:       +           1.0
2000:       +           1.0

10.42 log10

構文

目的

log10は、cern.jet.math.Arithmeticに基づいています。doubleの値の10を底とする対数をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#log10(double)を参照してください。

例

問合せqColt4について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt4"><![CDATA[
select log10(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           -0.30103
1000:       +           -0.15490197
1200:       +           -0.050610002
2000:       +           -0.39794

10.43 log2

構文

目的

log2は、cern.jet.math.Arithmeticに基づいています。doubleの値の2を底とする対数をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#log2(double)を参照してください。

例

問合せqColt9について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt9"><![CDATA[
select log2(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           -1.0
1000:       +           -0.5145732
1200:       +           -0.16812278
2000:       +           -1.321928

10.44 logFactorial

構文

目的

logFactorialは、cern.jet.math.Arithmeticに基づいています。integerの引数の階乗の自然対数(底はe)をdoubleとして返します。

引数の値がk<30の場合、この関数はO(1)の表内の結果をルックアップします。引数の値がk>=30の場合、この関数はスターリングの近似を使用します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#logFactorial(int)を参照してください。

例

問合せqColt10について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt10"><![CDATA[
select logFactorial(c1) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +            0.0
1000:       +            3.1780539
1200:       +            1.7917595
2000:       +           10.604603

10.45 logGamma

構文

目的

logGammaは、cern.jet.stat.Gammaに基づいています。doubleの引数のガンマ関数の自然対数(底はe)をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Gamma.html#logGamma(double)を参照してください。

例

問合せqColt33について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt33"><![CDATA[
select logGamma(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5723649
1000:       +           0.26086727
1200:       +           0.07402218
2000:       +           0.7966778

10.46 longFactorial

構文

目的

longFactorialは、cern.jet.math.Arithmeticに基づいています。integerの引数(範囲はk >= 0 && k < 21)の階乗をlongとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#longFactorial(int)を参照してください。

例

問合せqColt11について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt11"><![CDATA[
select longFactorial(c1) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           24
1200:       +           6
2000:       +           40320

10.47 mostSignificantBit

構文

目的

mostSignificantBitは、cern.colt.bitvector.QuickBitVectorに基づいています。integerの引数の状態がtrueの最上位ビットの索引を(integerとして)返します。状態がtrueのビットがない場合は、-1を返します。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/colt/bitvector/QuickBitVector.html#mostSignificantBit(int)

- bitMaskWithBitsSetFromTo

- leastSignificantBit

例

問合せqColt55について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt55"><![CDATA[
select mostSignificantBit(c1) from SColtFunc
]]></view>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0
1000:       +           2
1200:       +           1
2000:       +           3

10.48 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。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#negativeBinomial(int, int, double)を参照してください。

例

問合せqColt44について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt44"><![CDATA[
select negativeBinomial(c1,c1,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.75
1000:       +           0.94203234
1200:       +           0.99817264
2000:       +           0.28393665

10.49 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。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#negativeBinomialComplemented(int, int, double)を参照してください。

例

問合せqColt45について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt45"><![CDATA[
select negativeBinomialComplemented(c1,c1,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.25
1000:       +           0.05796766
1200:       +           0.0018273441
2000:       +           0.7160633

10.50 normal

構文

目的

normalは、cern.jet.stat.Probabilityに基づいています。負の無限大からdoubleの引数xに積分される、正規(ガウス)確率密度関数(図10-14を参照)で示す領域をdoubleとして返します。

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

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#normal(double)を参照してください。

例

問合せqColt46について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt46"><![CDATA[
select normal(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.69146246
1000:       +           0.7580363
1200:       +           0.81326705
2000:       +           0.65542173

10.51 normal1

構文

目的

normal1は、cern.jet.stat.Probabilityに基づいています。負の無限大からxに積分される、正規(ガウス)確率密度関数(図10-15を参照)で示す領域をdoubleとして返します。

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

この関数は、次の引数をとります。

- double1: 正規分布のmean。

- double2: 正規分布の分散v。

- double3: 積分の限界x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#normal(double, double, double)を参照してください。

例

問合せqColt47について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt47"><![CDATA[
select normal1(c2,c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.5
1200:       +           0.5
2000:       +           0.5

10.52 normalInverse

構文

目的

normalInverseはcern.jet.stat.Probabilityに基づいています。負の無限大からxに積分される、正規(ガウス)確率密度関数で示す領域がdoubleの引数yに等しい場合のdoubleの値xを返します(平均が0、分散が1であることを前提としています)。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#normalInverse(double)を参照してください。

例

問合せqColt48について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt48"><![CDATA[
select normalInverse(c2) from SColtFunc
]]></view>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.5244005
1200:       +           1.226528
2000:       +           0.2533471

10.53 poisson

構文

目的

poissonは、cern.jet.stat.Probabilityに基づいています。ポアソン分布の初項kの合計(図10-16を参照)をdoubleとして返します。

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

この関数は、次の引数をとります。

- integer1: 項数k。

- double2: ポアソン分布の平均m。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#poisson(int, double)を参照してください。

例

問合せqColt49について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt49"><![CDATA[
select poisson(c1,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.909796
1000:       +           0.9992145
1200:       +           0.9870295
2000:       +           1.0

10.54 poissonComplemented

構文

目的

poissonComplementedは、cern.jet.stat.Probabilityに基づいています。ポアソン分布の項k+1から無限大までの合計(図10-17を参照)をdoubleとして返します。

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

この関数は、次の引数をとります。

- integer1: 初項k。

- double2: ポアソン分布の平均m。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#poissonComplemented(int, double)を参照してください。

例

問合せqColt50について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt50"><![CDATA[
select poissonComplemented(c1,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.09020401
1000:       +           7.855354E-4
1200:       +           0.012970487
2000:       +           5.043364E-10

10.55 stirlingCorrection

構文

目的

stirlingCorrectionは、cern.jet.math.Arithmeticに基づいています。integerの引数の階乗の自然対数(底はe)のスターリングの近似の補正項(図10-18を参照)をdoubleとして返します。

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

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Arithmetic.html#stirlingCorrection(int)を参照してください。

例

問合せqColt5について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt5"><![CDATA[
select stirlingCorrection(c1) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.08106147
1000:       +           0.020790672
1200:       +           0.027677925
2000:       +           0.010411265

10.56 studentT

構文

目的

studentTは、cern.jet.stat.Probabilityに基づいています。自由度がk > 0のスチューデントのt分布の負の無限大からtへの積分(図10-19を参照)をdoubleとして返します。

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

この関数は、次の引数をとります。

- double1: 自由度k。

- double2: 積分終了点t。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#studentT(double, double)を参照してください。

例

問合せqColt51について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt51"><![CDATA[
select studentT(c2,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.621341
1000:       +           0.67624015
1200:       +           0.7243568
2000:       +           0.5930112

10.57 studentTInverse

構文

目的

studentTInverseはcern.jet.stat.Probabilityに基づいています。負の無限大からtに積分される、スチューデントのt確率密度関数で示す領域が1-alpha/2に等しい場合のdoubleの値tを返します。返される値は、talpha[size]の通常のスチューデントのt分布のルックアップ表に相当します。この関数では、studentt関数を使用して、繰り返し戻り値を確認します。

この関数は、次の引数をとります。

- double1: 確率alpha。

- integer2: データ・セット・サイズ。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Probability.html#studentTInverse(double, int)

- studentT

例

問合せqColt52について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt52"><![CDATA[
select studentTInverse(c2,c1) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           0.4141633
1200:       +           0.15038916
2000:       +           0.8888911

10.58 y0

構文

目的

y0は、cern.jet.math.Besselに基づいています。doubleの引数の階数0の第2種ベッセル関数をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#y0(double)を参照してください。

例

問合せqColt24について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt24"><![CDATA[
select y0(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           -0.44451874
1000:       +           -0.19066493
1200:       +           -0.0031519707
2000:       +           -0.60602456

10.59 y1

構文

目的

y1は、cern.jet.math.Besselに基づいています。floatの引数の階数1の第2種ベッセル関数をdoubleとして返します。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#y1(double)を参照してください。

例

問合せqColt25について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt25"><![CDATA[
select y1(c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           -1.4714724
1000:       +           -1.1032499
1200:       +           -0.88294965
2000:       +           -1.780872

10.60 yn

構文

目的

ynは、cern.jet.math.Besselに基づいています。doubleの引数の階数nの第2種ベッセル関数をdoubleとして返します。

この関数は、次の引数をとります。

- integer1: ベッセル関数の階層の値n。

- double2: ベッセル関数を計算する値x。

詳細は、https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/math/Bessel.html#yn(int, double)を参照してください。

例

問合せqColt26について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSColtFuncの場合、この問合せはリレーションを返します。

<query id="qColt26"><![CDATA[
select yn(c1,c2) from SColtFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

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オープン・ソース・ライブラリに基づいています。

詳細は、「関数」を参照してください。

この章の内容は次のとおりです。

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

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 Stream Analyticsに通知します。

リレーションの出力例では、最初のタプルの出力は次のようになります。

-9223372036854775808:+

この値は-Long.MIN_VALUE()であり、使用できる最大の負のタイムスタンプを表します。

詳細は、次を参照してください。

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

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

- 関数

- データ型

- 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 Event Processingでは、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句の前に適用されます。つまり、次のOracle CQL文は無効です。

<query id="q1"><![CDATA[
select * from InputChannel[rows 4 slide 4] as ic where geometricMean(c3) > 4
]]></query>

かわりに、次の例に示すOracle CQL文を使用する必要があります。

<query id="q1"><![CDATA[
select * from InputChannel[rows 4 slide 4] as ic, myGeoMean = geometricMean(c3) where myGeoMean > 4
]]></query>

詳細は、次を参照してください。

- 図16-11

- 図16-12

- 図16-19

11.2 autoCorrelation

構文

目的

autoCorrelationはcern.jet.stat.Descriptive.autoCorrelation(DoubleArrayList data, int lag, double mean, double variance)に基づいています。入力引数のデータ列の自己相関をdoubleとして返します。

注意:

この関数のセマンティクスは「lag1」とは異なります。

この関数は次のタプル引数を使用します。

- double1: データ値。

- int1: ラグ。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#autoCorrelation(cern.colt.list.DoubleArrayList, int, double, double)

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

例

問合せqColtAggr1について考えてみます。スキーマ(c3 double)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr1"><![CDATA[
select autoCorrelation(c3, 0) from SColtAggrFunc
]]></query>

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

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

11.3 correlation

構文

目的

correlationはcern.jet.stat.Descriptive.correlation(DoubleArrayList data1, double standardDev1, DoubleArrayList data2, double standardDev2) に基づいています。入力引数の2つのデータ列の相関をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値1。

- double2: データ値2。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#correlation(cern.colt.list.DoubleArrayList, double, cern.colt.list.DoubleArrayList, double)

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

例

問合せqColtAggr2について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr2"><![CDATA[
select correlation(c3, c3) from SColtAggrFunc
]]></query>

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

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

11.4 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。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#covariance(cern.colt.list.DoubleArrayList, cern.colt.list.DoubleArrayList)

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

例

問合せqColtAggr3について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr3"><![CDATA[
select covariance(c3, c3) from SColtAggrFunc
]]></query>

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

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

11.5 geometricMean

構文

目的

geometricMeanはcern.jet.stat.Descriptive.geometricMean(DoubleArrayList data)に基づいています。入力引数のデータ列の幾何平均(図11-2を参照)をdoubleとして返します。

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

この関数は次のタプル引数を使用します。

- double1: データ値。

幾何平均が意味を成すには、最小のデータ値が0以下にならないようにしてください。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#geometricMean(cern.colt.list.DoubleArrayList)

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

例

問合せqColtAggr6について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr6"><![CDATA[
select geometricMean(c3) from SColtAggrFunc
]]></query>

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

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

11.6 geometricMean1

構文

目的

geometricMean1はcern.jet.stat.Descriptive.geometricMean(double sumOfLogarithms)に基づいています。入力引数のデータ列の幾何平均(図11-3を参照)をdoubleとして返します。

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

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#geometricMean(cern.colt.list.DoubleArrayList)

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

例

問合せqColtAggr7について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr7"><![CDATA[
select geometricMean1(c3) from SColtAggrFunc
]]></query>

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

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           Infinity
1000:       -           Infinity
1000:       +           Infinity
1200:       -           Infinity
1200:       +           Infinity
2000:       -           Infinity
2000:       +           Infinity

11.7 harmonicMean

構文

目的

harmonicMeanは、cern.jet.stat.Descriptive.harmonicMean(int size, double sumOfInversions)に基づいています。データ列の調和平均をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#harmonicMean(int, double)

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

例

問合せqColtAggr8について考えてみます。スキーマ(c3 double)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr8"><![CDATA[
select harmonicMean(c3) from SColtAggrFunc
]]></query>

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

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

11.8 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: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#kurtosis(cern.colt.list.DoubleArrayList, double, double)

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

例

問合せqColtAggr12について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr12"><![CDATA[
select kurtosis(c3) from SColtAggrFunc
]]></query>

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

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

11.9 lag1

構文

目的

lag1はcern.jet.stat.Descriptive.lag1(DoubleArrayList data, double mean)に基づいています。データ・セットの自己相関lag - 1をdoubleとして返します。

注意:

この関数のセマンティクスは「autoCorrelation」とは異なります。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#lag1(cern.colt.list.DoubleArrayList, double)

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

例

問合せqColtAggr14について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr14"><![CDATA[
select lag1(c3) from SColtAggrFunc
]]></query>

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

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

11.10 mean

構文

目的

meanはcern.jet.stat.Descriptive.mean(DoubleArrayList data)に基づいています。データ列の算術平均(図11-5を参照)をdoubleとして返します。

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

次の表に、入力の型および対応する出力の型を示します。

入力の型

出力の型

INT

DOUBLE

BIGINT

DOUBLE

FLOAT

DOUBLE

DOUBLE

DOUBLE

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#mean(cern.colt.list.DoubleArrayList)

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

例

問合せqColtAggr16について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr16"><![CDATA[
select mean(c3) from SColtAggrFunc
]]></query>

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

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

11.11 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: データ値。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#meanDeviation(cern.colt.list.DoubleArrayList, double)

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

例

問合せqColtAggr17について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr17"><![CDATA[
select meanDeviation(c3) from SColtAggrFunc
]]></query>

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

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

11.12 median

構文

目的

medianは、cern.jet.stat.Descriptive.median(DoubleArrayList sortedData)に基づいています。ソートされたデータ列の中央値をdoubleとして返します。

次の表に、入力の型および対応する出力の型を示します。

表11-2 入力と出力の型

入力の型

出力の型

INT

DOUBLE

BIGINT

DOUBLE

FLOAT

DOUBLE

DOUBLE

DOUBLE

注意:

入力値の型がINTの場合は、戻り値の型もINTになり、除算した値のfloorになります。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#median(cern.colt.list.DoubleArrayList)

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

例

問合せqColtAggr18について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr18"><![CDATA[
select median(c3) from SColtAggrFunc
]]></query>

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

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

11.13 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。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#moment(cern.colt.list.DoubleArrayList, int, double)

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

例

問合せqColtAggr21について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr21"><![CDATA[
select moment(c3, c1, c3) from SColtAggrFunc
]]></query>

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

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

11.14 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。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#pooledMean(int, double, int, double)

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

例

問合せqColtAggr22について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr22"><![CDATA[
select pooledMean(c3, c3) from SColtAggrFunc
]]></query>

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

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

11.15 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。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#pooledVariance(int, double, int, double)

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

例

問合せqColtAggr23について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr23"><![CDATA[
select pooledVariance(c3, c3) from SColtAggrFunc
]]></query>

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

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

11.16 product

構文

目的

productはcern.jet.stat.Descriptive.product(DoubleArrayList data)に基づいています。データ列の積(図11-10を参照)をdoubleとして返します。

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

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#product(cern.colt.list.DoubleArrayList)

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

例

問合せqColtAggr24について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr24"><![CDATA[
select product(c3) from SColtAggrFunc
]]></query>

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

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

11.17 quantile

構文

目的

quantileは、cern.jet.stat.Descriptive.quantile(DoubleArrayList sortedData, double phi)に基づいています。ファイの変位値、つまり、データ要素のファイ・パーセントがelem未満である場合のelem要素をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

- double2: ファイ。割合を示します。0 <= phi <= 1を満たす必要があります。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#quantile(cern.colt.list.DoubleArrayList, double)

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

例

問合せqColtAggr26について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr26"><![CDATA[
select quantile(c3, c2) from SColtAggrFunc
]]></query>

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

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

11.18 quantileInverse

構文

目的

quantileInverseは、cern.jet.stat.Descriptive.quantileInverse(DoubleArrayList sortedList, double element)に基づいています。<= element(0.0 <= phi <= 1.0)である要素の割合ファイをdoubleとして返します。elementが包含されておらず、包含される2つの要素間に存在する場合、この関数は線形補間を実行します。

この関数は次のタプル引数を使用します。

- double1: データ。

- double2: element。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#quantileInverse(cern.colt.list.DoubleArrayList, double)

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

例

問合せqColtAggr27について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr27"><![CDATA[
select quantileInverse(c3, c3) from SColtAggrFunc
]]></query>

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

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

11.19 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。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#rankInterpolated(cern.colt.list.DoubleArrayList, double)

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

例

問合せqColtAggr29について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr29"><![CDATA[
select rankInterpolated(c3, c3) from SColtAggrFunc
]]></query>

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

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

11.20 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: データ値。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#rms(int, double)

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

例

問合せqColtAggr30について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr30"><![CDATA[
select rms(c3) from SColtAggrFunc
]]></query>

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

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

11.21 sampleKurtosis

構文

目的

sampleKurtosisは、cern.jet.stat.Descriptive.sampleKurtosis(DoubleArrayList data, double mean, double sampleVariance)に基づいています。データ列の標本尖度(超過係数)をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sampleKurtosis(cern.colt.list.DoubleArrayList, double, double)

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

例

問合せqColtAggr31について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr31"><![CDATA[
select sampleKurtosis(c3) from SColtAggrFunc
]]></query>

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

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           NaN
1200:       -           NaN
1200:       +           NaN
2000:       -           NaN
2000:       +           -1.1999999999999993

11.22 sampleKurtosisStandardError

構文

目的

sampleKurtosisStandardErrorは、cern.jet.stat.Descriptive.sampleKurtosisStandardError(int size)に基づいています。標本尖度の標準誤差をdoubleとして返します。

この関数は次のタプル引数を使用します。

- int1: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sampleKurtosisStandardError(int)

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

例

問合せqColtAggr33について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr33"><![CDATA[
select sampleKurtosisStandardError(c1) from SColtAggrFunc
]]></query>

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

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           0.0
1000:       -           0.0
1000:       +           Infinity
1200:       -           Infinity
1200:       +           Infinity
2000:       -           Infinity
2000:       +           2.6186146828319083

11.23 sampleSkew

構文

目的

sampleSkewは、cern.jet.stat.Descriptive.sampleSkew(DoubleArrayList data, double mean, double sampleVariance)に基づいています。データ列の標本歪度をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sampleSkew(cern.colt.list.DoubleArrayList, double, double)

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

例

問合せqColtAggr34について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr34"><![CDATA[
select sampleSkew(c3) from SColtAggrFunc
]]></query>

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

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:       -
10:       +           NaN
1000:       -           NaN
1000:       +           NaN
1200:       -           NaN
1200:       +           0.0
2000:       -           0.0
2000:       +           0.0

11.24 sampleSkewStandardError

構文

目的

sampleSkewStandardErrorは、cern.jet.stat.Descriptive.sampleSkewStandardError(int size)に基づいています。標本歪度の標準誤差をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sampleSkewStandardError(int)

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

例

問合せqColtAggr36について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr36"><![CDATA[
select sampleSkewStandardError(c1) from SColtAggrFunc
]]></query>

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

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

11.25 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: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sampleVariance(cern.colt.list.DoubleArrayList, double)

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

例

問合せqColtAggr38について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr38"><![CDATA[
select sampleVariance(c3) from SColtAggrFunc
]]></query>

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

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

11.26 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: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#skew(cern.colt.list.DoubleArrayList, double, double)

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

例

問合せqColtAggr41について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr41"><![CDATA[
select skew(c3) from SColtAggrFunc
]]></query>

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

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

11.27 standardDeviation

構文

目的

standardDeviationは、cern.jet.stat.Descriptive.standardDeviation(double variance)に基づいています。分散からの標準偏差をdoubleとして返します。

次の表に、入力の型および対応する出力の型を示します。

入力の型

出力の型

INT

DOUBLE

BIGINT

DOUBLE

FLOAT

DOUBLE

DOUBLE

DOUBLE

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#standardDeviation(double)

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

例

問合せqColtAggr44について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr44"><![CDATA[
select standardDeviation(c3) from SColtAggrFunc
]]></query>

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

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

11.28 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: データ値。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#standardError(int, double)

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

例

問合せqColtAggr45について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr45"><![CDATA[
select standardError(c3) from SColtAggrFunc
]]></query>

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

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

11.29 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: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sumOfInversions(cern.colt.list.DoubleArrayList, int, int)

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

例

問合せqColtAggr48について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr48"><![CDATA[
select sumOfInversions(c3) from SColtAggrFunc
]]></query>

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

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:        -
10:        +           0.025
1000:       -           0.025
1000:       +           0.058333333333333334
1200:       -           0.058333333333333334
1200:       +           0.10833333333333334
2000:       -           0.10833333333333334
2000:       +           0.20833333333333334

11.30 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: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sumOfLogarithms(cern.colt.list.DoubleArrayList, int, int)

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

例

問合せqColtAggr49について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr49"><![CDATA[
select sumOfLogarithms(c3) from SColtAggrFunc
]]></query>

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

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:        -
10:        +           3.6888794541139363
1000:       -           3.6888794541139363
1000:       +           7.090076835776092
1200:       -           7.090076835776092
1200:       +           10.085809109330082
2000:       -           10.085809109330082
2000:       +           12.388394202324129

11.31 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。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sumOfPowerDeviations(cern.colt.list.DoubleArrayList, int, double)

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

例

問合せqColtAggr50について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr50"><![CDATA[
select sumOfPowerDeviations(c3, c1, c3) from SColtAggrFunc
]]></query>

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

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

11.32 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。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sumOfPowers(cern.colt.list.DoubleArrayList, int)

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

例

問合せqColtAggr52について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr52"><![CDATA[
select sumOfPowers(c3, c1) from SColtAggrFunc
]]></query>

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

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

11.33 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: データ値。

詳細は、次の章を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sumOfSquaredDeviations(int, double)

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

例

問合せqColtAggr53について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr53"><![CDATA[
select sumOfSquaredDeviations(c3) from SColtAggrFunc
]]></query>

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

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

11.34 sumOfSquares

構文

目的

sumOfSquaresはcern.jet.stat.Descriptive.sumOfSquares(DoubleArrayList data)に基づいています。データ列の平方の合計(図11-20を参照)をdoubleとして返します。

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

この関数は次のタプル引数を使用します。

- double1: データ値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#sumOfSquares(cern.colt.list.DoubleArrayList)

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

例

問合せqColtAggr54について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr54"><![CDATA[
select sumOfSquares(c3) from SColtAggrFunc
]]></query>

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

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

11.35 trimmedMean

構文

目的

trimmedMeanは、cern.jet.stat.Descriptive.trimmedMean(DoubleArrayList sortedData, double mean, int left, int right)に基づいています。昇順にソートされたデータ列のトリム平均をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

- int1: left。

- int2: right。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#trimmedMean(cern.colt.list.DoubleArrayList, double, int, int)

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

例

問合せqColtAggr55について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr55"><![CDATA[
select trimmedMean(c3, c1, c1) from SColtAggrFunc
]]></query>

Timestamp   Tuple
10        0, 0.5, 40.0, 8
1000        0, 0.7, 30.0, 6
1200        0, 0.89, 20.0, 12
2000        1, 0.4, 10.0, 4
h 8000
h 200000000

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

11.36 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)

次の表に、入力の型および対応する出力の型を示します。

入力の型

出力の型

INT

DOUBLE

BIGINT

DOUBLE

FLOAT

DOUBLE

DOUBLE

DOUBLE

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#variance(int, double, double)

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

例

問合せqColtAggr57について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr57"><![CDATA[
select variance(c3) from SColtAggrFunc
]]></query>

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

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

11.37 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: 加重値。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#weightedMean(cern.colt.list.DoubleArrayList, cern.colt.list.DoubleArrayList)

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

例

問合せqColtAggr58について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr58"><![CDATA[
select weightedMean(c3, c3) from SColtAggrFunc
]]></query>

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

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

11.38 winsorizedMean

構文

目的

winsorizedMeanは、cern.jet.stat.Descriptive.winsorizedMean(DoubleArrayList sortedData, double mean, int left, int right)に基づいています。ソートされたデータ列のウィンザライズド平均をdoubleとして返します。

この関数は次のタプル引数を使用します。

- double1: データ値。

- int1: left。

- int2: right。

詳細は、次を参照してください。

- https://dst.lbl.gov/ACSSoftware/colt/api/cern/jet/stat/Descriptive.html#winsorizedMean(cern.colt.list.DoubleArrayList, double, int, int)

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

例

問合せqColtAggr60について考えてみます。スキーマ(c1 integer, c2 float, c3 double, c4 bigint)を持つデータ・ストリームSColtAggrFuncの場合、この問合せはリレーションを返します。

<query id="qColtAggr60"><![CDATA[
select winsorizedMean(c3, c1, c1) from SColtAggrFunc
]]></query>

Timestamp   Tuple
10        1, 0.5, 40.0, 8
1000        0, 0.7, 30.0, 6
1200        1, 0.89, 20.0, 12
2000        1, 0.4, 10.0, 4
h 8000

Timestamp   Tuple Kind  Tuple
-9223372036854775808:+
10:             -
10:          +           40.0
1000:        -           40.0
1000:        +           35.0
1200:        -           35.0
1200:        +           30.000000000000004
2000:        -           30.000000000000004
2000:        +           25

12 java.lang.Math関数

この章では、Oracle Continuous Query Language (Oracle CQL)に含まれるjava.lang.Math関数のリファレンスを提供します。

詳細は、次の項を参照してください。

この章の内容は次のとおりです。

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

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 Stream Analyticsに通知します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.htmlを参照してください。

12.2 abs

構文

目的

absは、integerの入力引数の絶対値をintegerとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#abs(int)を参照してください。

例

問合せq66について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q66"><![CDATA[
select abs(c1) from SFunc
]]></query>

Timestamp   Tuple
10         1,0.5,8
1000        -4,0.7,6
1200        -3,0.89,12
2000         8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           4
1200:       +           3
2000:       +           8

12.3 abs1

構文

目的

absは、longの入力引数の絶対値をlongとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#abs(long)を参照してください。

例

問合せq67について考えてみます。スキーマ(c1 integer, c2 float, c3 long)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q67"><![CDATA[
select abs1(c3) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,-6
1200        3,0.89,-12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           8
1000:       +           6
1200:       +           12
2000:       +           4

12.4 abs2

構文

目的

abs2は、floatの入力引数の絶対値をfloatとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#abs(float)を参照してください。

例

問合せq68について考えてみます。スキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q68"><![CDATA[
select abs2(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,-0.7,6
1200        3,-0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5
1000:       +           0.7
1200:       +           0.89
2000:       +           0.4

12.5 abs3

構文

目的

abs3は、doubleの入力引数の絶対値をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#abs(double)を参照してください。

例

問合せq69について考えてみます。スキーマ(c1 integer, c2 float, c3 bigint, c4 double)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q69"><![CDATA[
select abs3(c4) from SFunc
]]></query>

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

Timestamp   Tuple Kind  Tuple
10:       +           0.25334
1000:       +           4.64322
1200:       +           1.4672272
2000:       +           2.66777

12.6 acos

構文

目的

acosは、0.0からpiの範囲の、doubleの角度の逆余弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#acos(double)を参照してください。

例

問合せq73について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q73"><![CDATA[
select acos(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.0471976
1000:       +           0.79539883
1200:       +           0.4734512
2000:       +           1.1592795

12.7 asin

構文

目的

asinは、-pi/2からpi/2の範囲の、doubleの角度の逆正弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#asin(double)を参照してください。

例

問合せq74について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q74"><![CDATA[
select asin(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5235988
1000:       +           0.7753975
1200:       +           1.0973451
2000:       +           0.41151685

12.8 atan

構文

目的

atanは、-pi/2からpi/2の範囲の、doubleの角度の逆正接をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#atan(double)を参照してください。

例

問合せq75について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q75"><![CDATA[
select atan(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.4636476
1000:       +           0.61072594
1200:       +           0.7272627
2000:       +           0.3805064

12.9 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)を参照してください。

例

問合せq63について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q63"><![CDATA[
select atan2(c2,c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.7853982
1000:       +           0.7853982
1200:       +           0.7853982
2000:       +           0.7853982

12.10 cbrt

構文

目的

cbrtは、doubleの引数の立方根をdoubleとして返します。

正の有限のaの場合は、cbrt(-a) == -cbrt(a)になります。つまり、負の値の立方根は、その値の大きさの立方根の負量です。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#cbrt(double)を参照してください。

例

問合せq76について考えてみます。スキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q76"><![CDATA[
select cbrt(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.7937005
1000:       +           0.887904
1200:       +           0.9619002
2000:       +           0.73680633

12.11 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)

例

問合せq77について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q77"><![CDATA[
select ceil1(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           1.0
1200:       +           1.0
2000:       +           1.0

12.12 cos

構文

目的

cosは、doubleの角度の三角法の余弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#cos(double)を参照してください。

例

問合せq61について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q61"><![CDATA[
select cos(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.87758255
1000:       +           0.7648422
1200:       +           0.62941206
2000:       +           0.921061

12.13 cosh

構文

目的

coshは、doubleの値の双曲線余弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#cosh(double)を参照してください。

例

問合せq78について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

tkdata140.cqlx、data/inpSColtFunc.txt、log/outSColtcosh.txt

<query id="q78"><![CDATA[
select cosh(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.127626
1000:       +           1.255169
1200:       +           1.4228927
2000:       +           1.0810723

12.14 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

例

問合せq79について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q79"><![CDATA[
select exp(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.6487212
1000:       +           2.0137527
1200:       +           2.4351296
2000:       +           1.4918247

12.15 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

例

問合せq80について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q80"><![CDATA[
select expm1(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.6487213
1000:       +           1.0137527
1200:       +           1.4351296
2000:       +           0.49182472

12.16 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)

例

問合せq81について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q81"><![CDATA[
select floor1(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

12.17 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)を参照してください。

例

問合せq82について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q82"><![CDATA[
select hypot(c2,c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.70710677
1000:       +           0.98994946
1200:       +           1.2586501
2000:       +           0.56568545

12.18 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)を参照してください。

例

問合せq72について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q72"><![CDATA[
select IEEEremainder(c2,c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           0.0
1200:       +           0.0
2000:       +           0.0

12.19 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

例

問合せq83について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q83"><![CDATA[
select log1(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           -0.6931472
1000:       +           -0.35667497
1200:       +           -0.11653383
2000:       +           -0.9162907

12.20 log101

構文

目的

log101は、doubleの値の10を底とする対数をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#log10(double)を参照してください。

例

問合せq84について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q84"><![CDATA[
select log101(c2) from SFunc
]]></query>

Timestamp   Tuple
10            1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:           +           -0.30103
1000:       +           -0.15490197
1200:       +           -0.050610002
2000:       +           -0.39794

12.21 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

例

問合せq85について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q85"><![CDATA[
select log1p(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.4054651
1000:       +           0.53062826
1200:       +           0.63657683
2000:       +           0.33647224

12.22 pow

構文

目的

powは、2番目のdoubleの引数を指数として累乗する最初のdoubleの引数(底)の値をdoubleとして返します。

この関数は、次の引数をとります。

- double1: 底。

- double2: 累乗の指数。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#pow(double,%20double)を参照してください。

例

問合せq65について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q65"><![CDATA[
select pow(c2,c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.70710677
1000:       +           0.7790559
1200:       +           0.9014821
2000:       +           0.69314486

12.23 rint

構文

目的

rintは、doubleの引数に最も近く、数学的整数に等しいdoubleの値を返します。数学的整数である2つのdoubleの値がどちらも等しく近い場合、結果は同等の整数値になります。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#rint(double)を参照してください。

例

問合せq86について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q86"><![CDATA[
select rint(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.0
1000:       +           1.0
1200:       +           1.0
2000:       +           0.0

12.24 round

構文

目的

roundは、引数に最も近いintegerを返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#round(float)を参照してください。

入出力の型

この関数の入出力の型は次のとおりです。

入力の型

出力の型

DOUBLE

DOUBLE

INTEGER

INTEGER

FLOAT

FLOAT

BIGINT

BIGINT

BIGDECIMAL

BIGDECIMAL

例

問合せq87について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q87"><![CDATA[
select round(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           1
1200:       +           1
2000:       +           0

12.25 round1

構文

目的

round1は、floatの引数に最も近いintegerを返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#round(float)を参照してください。

例

問合せq88について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q88"><![CDATA[
select round1(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1
1000:       +           1
1200:       +           1
2000:       +           0

12.26 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)を参照してください。

例

問合せq70について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q70"><![CDATA[
select signum(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,-0.7,6
1200        3,-0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           -1.0
1200:       +           -1.0
2000:       +           1.0

12.27 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)を参照してください。

例

問合せq71について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはリレーションを返します。

<query id="q71"><![CDATA[
select signum1(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,-0.7,6
1200        3,-0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.0
1000:       +           -1.0
1200:       +           -1.0
2000:       +           1.0

12.28 sin

構文

目的

sinは、doubleの角度の三角法の正弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#sin(double)を参照してください。

例

問合せq60について考えてみます。スキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q60"><![CDATA[
select sin(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.47942555
1000:       +           0.64421767
1200:       +           0.7770717
2000:       +           0.38941833

12.29 sinh

構文

目的

sinhは、doubleの値の双曲線正弦をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#sinh(double)を参照してください。

例

問合せq89について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q89"><![CDATA[
select sinh(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5210953
1000:       +           0.75858366
1200:       +           1.012237
2000:       +           0.41075233

12.30 sqrt

構文

目的

sqrtは、doubleの値の正しく丸められた正の平方根をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#sqrt(double)を参照してください。

例

問合せq64について考えてみます。スキーマ(c1 integer, c2 float, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q64"><![CDATA[
select sqrt(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.70710677
1000:       +           0.83666
1200:       +           0.9433981
2000:       +           0.6324555

12.31 tan

構文

目的

tanは、doubleの角度の三角法の正接をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#tan(double)を参照してください。

例

問合せq62について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q62"><![CDATA[
select tan(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.5463025
1000:       +           0.8422884
1200:       +           1.2345995
2000:       +           0.42279324

12.32 tanh

構文

目的

tanhは、doubleの値の双曲線正接をdoubleとして返します。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#tanh(double)を参照してください。

例

問合せq90について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q90"><![CDATA[
select tanh(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.46211717
1000:       +           0.6043678
1200:       +           0.7113937
2000:       +           0.37994897

12.33 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

例

問合せq91について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q91"><![CDATA[
select todegrees(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           28.64789
1000:       +           40.107044
1200:       +           50.993244
2000:       +           22.918312

12.34 toradians

構文

目的

toradiansは、度数で測定されるdoubleの角度を、ラジアン単位で測定されるほぼ等しいdoubleの角度に変換します。

詳細は、次を参照してください。

- http://java.sun.com/javase/6/docs/api/java/lang/Math.html#toRadians(double)

- todegrees

- cos

例

問合せq92について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q92"><![CDATA[
select toradians(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           0.008726646
1000:       +           0.012217305
1200:       +           0.0155334305
2000:       +           0.006981317

12.35 ulp

構文

目的

ulpは、doubleの引数のULPの大きさをdoubleとして返します。この場合、引数値のULPは、この浮動小数点値と次に大きいdoubleの値との間の正の距離です。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#ulp(double)を参照してください。

例

問合せq93について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはストリームを返します。

<query id="q93"><![CDATA[
select ulp(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

Timestamp   Tuple Kind  Tuple
10:       +           1.110223E-16
1000:       +           1.110223E-16
1200:       +           1.110223E-16
2000:       +           5.551115E-17

12.36 ulp1

構文

目的

ulp1は、floatの引数のULPの大きさをfloatとして返します。floatの値のULPは、この浮動小数点値と次に大きいfloatの値との間の正の距離です。

詳細は、http://java.sun.com/javase/6/docs/api/java/lang/Math.html#ulp(float)を参照してください。

例

問合せq94について考えてみます。スキーマ(c1 integer, c2 double, c3 bigint)を持つデータ・ストリームSFuncの場合、この問合せはリレーションを返します。

<query id="q94"><![CDATA[
select ulp1(c2) from SFunc
]]></query>

Timestamp   Tuple
10        1,0.5,8
1000        4,0.7,6
1200        3,0.89,12
2000        8,0.4,4

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)で使用するユーザー定義関数を記述して、組込み関数を使用する場合よりも高度な操作やアプリケーション固有の操作をストリーム・データに対して実行する方法について説明します。

詳細は、「関数」を参照してください。

この章の内容は次のとおりです。

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

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

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

ユーザー定義関数をJavaで作成し、Oracle CQLやOracle CQL組込み関数には用意されていない機能を提供できます。集計値または単一値(非集計)を返すユーザー定義関数を作成できます。

たとえば、次の場所でユーザー定義関数を使用できます。

- SELECT文のselectリスト

- WHERE句の条件

注意:

ユーザー定義のウィンドウを作成することもできます(「ユーザー定義のストリームからリレーションへのウィンドウ演算子」を参照)。

ユーザー定義関数をOracle CQL問合せで使用できるようにするには、ユーザー定義関数の実装クラスが含まれたJARファイルをOracle Stream Analyticsサーバー・クラス・パスに配置するか、JARファイルを含めるようにOracle Stream Analyticsサーバー・クラス・パスを変更する必要があります。

詳細は、次を参照してください。

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

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

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

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

- 関数

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

次の種類のユーザー定義関数を作成できます。

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

- ユーザー定義集計関数

オーバーロード関数の作成、および組込み関数のオーバーライドができます。

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

単一行ユーザー定義関数は、問合せのストリームまたはビューの各行ごとに単一の結果行を返す関数(たとえば、concat組込み関数のような動作です)。

詳細は、「ユーザー定義単一行関数の実装方法」を参照してください。

13.1.1.2 ユーザー定義集計関数

ユーザー定義集計は、com.bea.wlevs.processor.AggregationFunctionFactoryを実装し、単一のタプルのかわりにタプルのグループに基づいて単一の集計結果を返す関数(たとえば、sum組込み関数のような動作です)。

可能な場合は、増分処理を行うように集計関数を実装することを検討します。これにより、新しいイベントの到着時の(再)計算コストがこれまでのイベントの合計数ではなく新しいイベントの数に比例するようになるため、スケーラビリティとパフォーマンスが向上します。

詳細は、「ユーザー定義集計関数の実装方法」を参照してください。

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

ユーザー定義関数では、「Oracle CQL組込みデータ型」のリストに示されている組込みOracle CQLデータ型をすべてサポートします。Oracle CQLデータ型とそれらに相当するJavaのデータ型のリストは、その項の表を参照してください。

そこに示されているOracle CQLデータ型は、ユーザー定義関数の登録に使用するOracle CQL文で指定できるデータ型です。Javaの等価のデータ型は、ユーザー定義の関数の実装で使用できるJavaデータ型です。

実行時、Oracle Stream AnalyticsによりOracle CQLデータ型とJavaの同等のデータ型との間でマッピングが行われます。ユーザー定義関数でリストにないデータ型が返された場合は、Oracle Stream AnalyticsによりClassCastExceptionがスローされます。

データ変換の詳細は、「データ型変換」を参照してください。

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

Oracle Stream Analyticsキャッシュには、Oracle CQL文またはユーザー定義関数からアクセスできます。

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

この項の内容は、次のとおりです。

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

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

詳細は、「Oracle CQLのユーザー定義関数の概要」を参照してください。

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

ユーザー定義の単一行関数を実装するには、関数を実行するために呼び出すpublicコンストラクタとpublicメソッドを提供するJavaクラスを実装します。

ユーザー定義の単一行関数を実装するには:

1. Javaクラスを実装します。

「ユーザー定義関数のデータ型」に説明されているように、戻り値のデータ型がサポートされているデータ型に対応していることを確認します。

ユーザー定義関数からOracle Stream Analyticsキャッシュへのアクセスの詳細は、ユーザー定義関数とOracle Stream Analyticsサーバー・キャッシュを参照してください。

package com.bea.wlevs.example.function;

public class MyMod {
public Object execute(int arg0, int arg1) {
return new Integer(arg0 % arg1);
}
}

2. ユーザー定義関数のJava実装クラスをコンパイルして、Oracle Stream Analyticsアプリケーション・アセンブリ・ファイルでクラスを登録します。

<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で、名前によって一意に識別できる必要があります(メソッドがオーバーライドされないように)。

3. SELECT文のselectリストまたはWHERE句の条件でユーザー定義関数を呼び出します。

...
<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. 後述の例に示すように、Javaクラスを実装します。
可能な場合は、増分処理を行うように集計関数を実装することを検討します。これにより、新しいイベントの到着時の(再)計算コストがこれまでのイベントの合計数ではなく新しいイベントの数に比例するようになるため、スケーラビリティとパフォーマンスが向上します。ユーザー定義集計関数では増分処理がサポートされています。

「ユーザー定義関数のデータ型」に説明されているように、戻り値のデータ型がサポートされているデータ型に対応していることを確認します。

ユーザー定義関数からOracle Stream Analyticsキャッシュへのアクセスの詳細は、ユーザー定義関数とOracle Stream Analyticsサーバー・キャッシュを参照してください。

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実装クラスをコンパイルして、Oracle Stream Analyticsアプリケーション・アセンブリ・ファイルでクラスを登録します。

<wlevs:processor id="testProcessor">
<wlevs:listener ref="providerCache"/>
<wlevs:listener ref="outputCache"/>
<wlevs:cache-source ref="testCache"/>
<wlevs:function function-name="var" is-incremental="true">
<bean class="com.bea.wlevs.test.functions.Variance"/>
</wlevs:function>
</wlevs:processor>

関数の要素のis-incremental属性をtrueに設定して、ユーザー定義関数varが増分実装を持つことを示す必要があります。is-incremental関数をtrueに設定すると、Oracle Stream Analyticsが現在の処理ウィンドウからイベントをパージするときにhandleMinusメソッドを呼び出すことが保証されます。この属性をfalse (デフォルト)に設定すると、handleMinus関数は呼び出されず、かわりにhandlePlusメソッドの呼出しごとにOracle Stream Analyticsによって現在のウィンドウのイベントの完全なセットが提供されます。

3. SELECT文のselectリストまたはWHERE句の条件でユーザー定義関数を呼び出します。

...
<query id="uda6"><![CDATA[
select var(c2) from S4[range 3]
]]></query>
...

実行時、ユーザー定義の集計が実行され、該当するウィンドウで新しいイベントがアクティブになった場合は集計を再計算する必要があります(集計が定義されているセットに新しいメンバーが追加されたため)。これを行うため、Oracle Stream Analyticsでは適切なhandlePlus*メソッドを呼び出して、(アクティブなセット全体のかわりに)新しいイベントのみを適切なハンドラ・コンテキストに渡します。新しいイベントを含めるようにこの状態を更新できるようになります。このようにして、増分的な方法で集計が再計算されます。

同様に、該当するウィンドウのイベントが期限切れになった場合は集計を再計算する必要があります(集計が定義されているセットからメンバーが失われたため)。これを行うため、Oracle Stream Analyticsでは適切なhandleMinusメソッドを呼び出して、(アクティブなセット全体のかわりに)期限切れのイベントのみを適切なハンドラ・コンテキストに渡します。ここでも、増分的な方法でイベントの期限切れに対応するように、ハンドラ・コンテキストの状態を増分的に更新できます。

第III部 Oracle CQLの使用

この部は、次の章で構成されています。

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

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

- Oracle CQL文

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

この章では、Oracle Continuous Query Language (Oracle CQL)の問合せ、ビューおよび結合のリファレンスと使用方法のガイドラインを提供します。 Oracle CQLの問合せおよびビューを使用して、ストリームおよびリレーションからの要素データの選択、処理、フィルタ処理を行います。

QUERY文を使用して作成した最上位のSELECT文は問合せと呼ばれます。

副問合せは、ビューのメカニズムによって別の問合せのなかにネストされたまたは組み込まれた問合せです。

VIEW文を使用して作成した最上位のVIEW文はビューと呼ばれます。

結合は、複数のストリーム、ビューまたはリレーションから行を結合する問合せです。

この章の内容は次のとおりです。

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

- 問合せ

- ビュー

- 結合

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

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

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

詳細は、次を参照してください。

- 表記規則

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

- Oracle CQLの基本要素

- 共通のOracle CQL DDL句

- Oracle CQL文

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

Oracle CQL問合せは、Oracle CQL構文で表され、1つ以上のストリームまたはビューからデータを取得するために、Oracle Stream Analytics CQLプロセッサで実行される操作です。詳細は、「問合せ」を参照してください。

Oracleの副問合せは、ビューのメカニズムによって別の問合せのなかにネストされたまたは組み込まれた問合せです。詳細は、「ビュー」を参照してください。

Oracle CQLのビューは、ストリームまたはリレーションに関する代替の選択を表します。詳細は、「ビュー」を参照してください。

Oracle Stream Analyticsでは、問合せのFROM句に複数のストリームがある場合は常に結合が行われます。詳細は、「結合」を参照してください。

次の例は、procという名前のプロセッサのOracle CQLプロセッサ・コンポーネント構成ファイルに定義された一般的な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>

次の例に示すように、rules要素の子要素viewまたはqueryには各Oracle CQL文が含まれています。

- rule: ユーザー定義ウィンドウを登録または作成するOracle CQL文を含みます。rule要素id属性はウィンドウの名前と一致する必要があります。
rule要素でrange_slideという名前のユーザー定義ウィンドウを登録するOracle CQL文が指定されています。rule要素idはウィンドウの名前と一致する必要があります。

- view: Oracle CQL view文(Oracle CQLで副問合せに相当するもの)を含みます。view要素のid属性はビューの名前を定義します。
view要素でOracle CQL view文(Oracle CQLでの副問合せ)が指定されています。

- query: Oracle CQL select文を含みます。query要素のid属性は問合せの名前を定義します。
query要素でOracle CQL問合せ文が指定されています。問合せq1は、ビューlastEventsから選択します。デフォルトでは、問合せの結果はダウンストリーム・チャネルに出力されます。selector要素を使用して、チャネル構成でこの動作を制御できます。

各Oracle CQL文は<![CDATA[ ... ]]>タグで囲み、末尾にセミコロン(;)は付けません。

詳細は、次を参照してください。

- 表記規則

- Oracle CQL文

14.2 問合せ

問合せは、データ・ストリームおよびビューからの情報を抽出する主な手段です。

query::=

query句自体は、次のいずれかの部分で構成されます。

- sfw_block: CQL問合せを表すには、このselect-from-where句を使用します。
詳細は、「Select、From、Whereブロック」を参照してください。

- idstream_clause: 問合せに適用されるリレーションからストリームへの入力IStreamまたは削除DStream演算子を指定するには、この句を使用します。
詳細は、「IDStream句」を参照してください。

- rstream: 問合せに適用されるリレーションからストリームへのRStream演算子を指定するには、この句を使用します。
詳細は、「リレーションからストリームへのRStream演算子」を参照してください。

- binary: 2つの問合せまたはビューで返されるタプルの集合演算を実行するには、この句を使用します。
詳細は、「Binary句」を参照してください。

次の項では、作成できる基本的な問合せの種類について説明しています。

- 単純な問合せ

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

- ユーザー定義ウィンドウの問合せ

- MATCH_RECOGNIZEの問合せ

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

- XMLTABLEの問合せ

- 関数TABLEの問合せ

- キャッシュの問合せ

詳細は、次を参照してください。

- 問合せ結果のソート

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

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

14.2.1 問合せの構成要素

この項では、Oracle CQL問合せの作成に使用する基本的な構成要素について概説します。

- Select、From、Whereブロック

- Select句

- From句

- Where句

- Group By句

- Order By句

- Having句

- Binary句

- IDStream句

14.2.1.1 Select、From、Whereブロック

sfw_blockを使用して、Oracle CQL問合せの select、from、およびオプションのwhere句を指定します。

sfw_block::=

sfw_blockは次の部分で構成されます。

- Select句

- From句

- Where句

- Group By句

- Order By句

- Having句

14.2.1.2 Select句

問合せの結果セットに必要なストリーム要素を指定するには、この句を使用します。select_clauseでは*演算子を使用してすべてのストリーム要素を指定するか、1つ以上のストリーム要素のリストを指定できます。

select_clause::=

SELECTキーワードの後で、from_clauseの前に置かれた式のリストはselectリストと呼ばれます。selectリストでは、1つ以上のストリームまたはビューからOracle Stream Analyticsによって返される要素のセットに含まれるようにする1つ以上のストリーム要素を指定します。ストリーム要素の個数、データ型および長さはselectリストの要素によって決まります。

オプションで、選択した重複タプルの各セットで1つのコピーのみがOracle Stream Analyticsから返されるようにするには、distinctを指定します。重複タプルとはselectリスト内の各式と一致する値を持つタプルです。

詳細については、「図16-3」を参照してください。

14.2.1.3 From句

select_clauseで指定されたストリーム要素を提供するストリームおよびビューを指定するには、この句を使用します(「Select句」を参照)。

from_clauseでは、1つ以上のカンマ区切りのrelation_variable句を指定できます。

from_clause::=

relation_variable::=

relation_variable句で指定された任意のデータ・ソースから選択できます。

relation_variable句のAS演算子で別名を定義してselectリストの直前の式にラベルを付け、その名前で結果を参照できます(「relation_variable句の別名」を参照)。

共通するストリーム要素名を持つ複数のストリーム、ビューまたはリレーション間で結合を作成する場合は(「結合」を参照)、各ストリーム、ビューまたはリレーションの名前を使用して、ストリーム要素名を修飾する必要があります。次の例は、ストリーム名を使用して、OrderStreamのcustomerIDストリーム要素とCustomerStreamのcustomerIDストリーム要素を区別する方法を示します。

<query id="q0"><![CDATA[
select * from OrderStream, CustomerStream
where
OrderStream.customerID = CustomerStream.customerID
]]></query>

それ以外の場合、完全修飾されたストリーム要素名はオプションです。ただし、ストリーム名の参照を常に明示的に修飾することをお薦めします。完全修飾されたストリーム要素名によって、多くの場合Oracle Event Processingでの処理が軽減されます。

詳細は、次を参照してください。

- MATCH_RECOGNIZEの問合せ

- XMLTABLEの問合せ

- 関数TABLEの問合せ

14.2.1.4 Where句

select_clauseで結果が返される条件を指定するには、このオプションの句を使用します(「Select句」を参照)。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

詳細は、次を参照してください。

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

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

14.2.1.5 Group By句

結果をグループ化(分割)するには、このオプションの句を使用します。この句では、結果セットの順序は保証されません。グループ化を並べ替えるには、order by句を使用します。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

詳細は、次を参照してください。

- Group By句

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

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

14.2.1.6 Order By句

すべての結果または上位n個の結果を並べ替えるには、このオプションの句を使用します。

詳細は、「問合せ結果のソート」を参照してください。

14.2.1.7 Having句

返されたストリーム要素のグループを指定されたconditionがTRUEのグループに制限するには、このオプションの句を使用します。この句を省略すると、Oracle Event Processingではすべてのグループのサマリー結果が返されます。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

詳細は、次を参照してください。

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

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

14.2.1.8 Binary句

2つの問合せまたはビューで返されるタプルで次の集合演算を実行するには、binary句を使用します。

- EXCEPT

- MINUS

- INTERSECT

- UNIONとUNION ALL

- INおよびNOT IN

14.2.1.9IDStream句

select-from-where句またはbinary句を使用し、その結果をIStreamまたはDStreamのいずれかのリレーションからストリームへの演算子として返すには、この句を使用します。

IStreamまたはDstream演算子とusing_clauseを組み合せることで、問合せ結果の差分を簡単に検出できます。

詳細は、次を参照してください。

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

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

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

14.2.2 単純な問合せ

次の例に、単一のストリームからすべてのストリーム要素を選択する単純な問合せを示します。

<query id="q0"><![CDATA[
select * from OrderStream where orderAmount > 10000.0
]]></query>

詳細は、問合せを参照してください。

14.2.3 組込みウィンドウの問合せ

次の例に、組込みのタプルベースのストリームからリレーションへのウィンドウ演算子を使用して、スキーマ(c1 integer, c2 float)を持つストリームS2からすべてのストリーム要素を選択する問合せを示します。

tkdata2.cqlx

<query id="BBAQuery"><![CDATA[
select * from S2 [range 5 minutes] where S2.c1 > 10
]]></query>

詳細は、次を参照してください。

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

14.2.4 ユーザー定義ウィンドウの問合せ

次の例に、ユーザー定義JavaクラスMyRangeSlideWindow.javaに基づくタイプrange_slideのユーザー定義ウィンドウを使用して、スキーマ(c1 integer, c2 float)を持つストリームS12からすべてのストリーム要素を選択する問合せを示します。

<rule id="range_slide"><![CDATA[
register window range_slide(winrange int, winslide int) implement using "MyRangeSlideWindow"
]]></rule>
<query id="q79"><![CDATA[
select * from S12 [range_slide(10,5)]
]]></query>

詳細は、「ユーザー定義のストリームからリレーションへのウィンドウ演算子」を参照してください。

14.2.5 MATCH_RECOGNIZEの問合せ

次の例に、ItemTempStreamのストリーム要素間の複雑な関係を表す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>

詳細は、次を参照してください。

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

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

Oracle CQLプロセッサを使用すると、リレーショナル・データベース表をイベント・ソースとして指定できます。このイベント・ソースで問合せを実行したり、他のイベント・ソースと結合したりできます。

詳細は、「Oracle CQL問合せとリレーショナル・データベース表」を参照してください。

14.2.7 XMLTABLEの問合せ

この問合せを使用して、XPathまたはXQuery式の結果をタプルにマップします。

XMLTABLEには次の副句があります。

- XMLNAMESPACES: オプション。問合せの式で使用できる一連のXMLネームスペースの宣言を持つ文字列。

- XQuery_string: XMLの問合せに使用するためのXQueryまたはXPath文字列を持つ文字列。

- PASSING BY VALUE: 入力に使用されるXMLを指します。

- COLUMNS: オプション。結果の出力プロパティを定義します。

- PATH: オプション。そのプロパティの値をXMLから取得する場所を指すXPath式を指定するCOLUMNSの副句。

次の例は、ビューv1、およびそのビューに対する問合せq1を示します。ビューはxmltypeストリーム要素を持つストリームS1から選択します。ビューv1はXMLTABLE句でXPath式を使用して、xmltypeストリーム要素のデータを解析します。ビューのスキーマのデータ型は、COLUMNS句で解析されたデータのデータ型と一致することに注意してください。問合せq1は他の任意のデータ・ソースの場合と同様に、このビューから選択します。XMLTABLE句はXMLネームスペースもサポートしています。

<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>

詳細は、次を参照してください。

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

- SQL/XML (SQLX)

14.2.8 関数TABLEの問合せ

TABLE句を使用して、Oracle CQL問合せのFROM句内の組込みまたはユーザー定義関数から返された複数の行にアクセスします。TABLE句は返された複数の行をOracle CQLリレーションに変換します。これは外部リレーションであるため、TABLE関数句とストリームを結合する必要があります。

table_clause::=

(object_expr、identifier、datatype::=)

次の点に注意してください。

- 関数は、配列型またはCollection型を返す必要があります。

- TABLE関数句とストリームを結合する必要があります。

次の例は、1つのパラメータ(InputPoints.point)を渡して、Oracle SpatialメソッドgetContainingGeometriesを呼び出すデータ・カートリッジTABLE句を示しています。このメソッドの戻り値Collectionには別名validGeometriesが作成されます。TABLE句が戻すリレーションには別名R2が作成されます。

<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>

次の例に、パラメータを指定せずに関数getAllGeometries@spatialを呼び出したために、データ・カートリッジTABLE句と別のストリームとの結合に失敗した、無効なデータ・カートリッジTABLEの問合せを示します。Oracle Stream Analyticsでは、結合ストリームに要素が到着したときにのみデータ・カートリッジ・メソッドを呼び出します。

<query id="q2"><![CDATA[
RSTREAM (
SELECT
R2.validGeometries.shape as containingGeometry
FROM
TABLE (getAllGeometries@spatial () as validGeometries) AS R2
)
]]></query>

その他の例は、「関数」を参照してください。

14.2.9 キャッシュの問合せ

Oracle CQLプロセッサを使用すると、キャッシュをイベント・ソースとして指定できます。Nowウィンドウを使用する場合にのみ、このイベント・ソースで問合せを実行したり、他のイベント・ソースと結合できます。

Oracle Stream Analyticsのキャッシュ・イベント・ソースはプル・データ・ソースです。つまり、Oracle Stream Analyticsは、データ・ストリーム上でのイベントの到着時にイベント・ソースをポーリングします。

詳細は、「Oracle CQL問合せとOracle Stream Analyticsサーバー・キャッシュ」を参照してください。

14.2.10 問合せ結果のソート

問合せで選択された行を並べ替えるには、ORDER BY句を使用します。

order_by_clause::=

位置のソートは次のような場合に有効です。

- selectリストの式が長い場合に並べ替えを行うには、式全体を繰り返すかわりにORDER BY句で位置を指定できます。

- UNION、INTERSECT、MINUSまたはUNION ALLなどの集合演算子を含む複合問合せの場合、ORDER BY句では明示的な式のかわりに位置または別名を指定する必要があります。また、ORDER BY句は最後のコンポーネント問合せでのみ使用できます。ORDER BY句は、複合問合せ全体で返されたすべての行の並べ替えを行います。

ORDER BY句で、Oracle Stream Analyticsが値をソートするメカニズムは、Javaのロケールによって指定されます。

14.2.11 問合せ結果の差分の検出

DIFFERENCE USING句を使用すると、問合せのIStreamまたはDStreamの差分を簡単に検出できます。

using_clause::=

次の問合せについて考えてみます。

<query id="q0">
ISTREAM (
SELECT c1 FROM S [RANGE 1 NANOSECONDS]
)    DIFFERENCE USING (c1)
</query>

表14-1に、この問合せのサンプル入力を示します。リレーション列にはリレーションS [RANGE 1 NANOSECONDS]の内容を示し、出力列にはDIFFERENCE USINGを適用後の問合せ結果を示します。この句を使用すると、IStream出力の差分のみを簡単に検出できます。

表14-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を指定する場合、次の項目で列を指定できます。

- 属性名: 属性名で選択する場合に、このオプションを使用します。

- 別名: 別名が指定されている式の結果を含める場合に、このオプションを使用します。

- 位置: 別名が指定されていない式の結果を含める場合に、このオプションを使用します。
位置は、左から右に読み取る、1で始まる正の整数の、定数として指定します。

次の例では、式funct(c2, c3)の結果を、DIFFERENCE USING句のusinglistで位置(3)によって示しています。

<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演算子の両方で使用できます。

詳細は、次を参照してください。

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

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

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

Oracle CQL問合せをパラメータ化し、:n文字列をプレースホルダーとして使用して、実行時にパラメータ値をバインドできます。ここで、nは、params要素内の置換値の位置に相当する正の整数です。

注意:

ビューをパラメータ化することはできません。

次の例に、パラメータ化された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つのパラメータが指定されます。

この項の内容は、次のとおりです。

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

- bindings要素

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

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

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

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

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

Oracle CQL文の中で算術式またはStringリテラルが有効な任意の場所に、プレースホルダーを指定できます。次に例を示します。

- SELECTリストの項目

- WHERE句の述語

- WINDOWコンストラクト(RANGE、SLIDE、ROWSおよびPARTITION BYなど)

- PATTERN期間句

詳細は、次を参照してください。

- arith_expr

- リテラル

14.2.12.2 bindings要素

パラメータ値は、bindings要素によって包含されます。processorごとに1つのbindings要素がある場合があります。

各パラメータ化された問合せについて、bindings要素に、問合せと同じidのbinding要素が含まれている必要があります。

binding要素には、1つ以上のparams要素が含まれている必要があります。各params要素には、一意のid、および対応する問合せ内のプレースホルダー文字(:n)の数と等しいパラメータ値のカンマ区切りのリストが含まれている必要があります。

パラメータ値の順序は、:1は最初のパラメータ値、:2は2番目のパラメータ値などというように、パラメータ化された問合せ内のプレースホルダー文字(:n)に相当します。プレースホルダー文字(:n)は任意の順序で使用できます。つまり、:1は、問合せ内で:2の前か後の最初のパラメータ値に相当します。1つのプレースホルダーの番号は問合せ内で1回のみ使用できます。

詳細は、次を参照してください。

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

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

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

バインディングによってパラメータ化された問合せがインスタンス化される際、Oracle Stream Analyticsでは、queryId_paramIdという名前の新しい問合せが実行時に作成されます。たとえば、MarketRuleバインディングによってインスタンス化される最初の問合せの実行時の名前はMarketRule_nasORCLになります。

実行時のネーミングの競合を回避するため、問合せのIDおよびパラメータIDの組合せが一意であることを確認してください。

14.2.12.4 パラメータ値の表記規則

各params要素には、一意のid、および対応する問合せ内のプレースホルダー文字(:n)の数と等しいパラメータ値のカンマ区切りのリストが含まれている必要があります。

表14-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 Stream Analyticsでは、この問合せは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

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

各params要素により、新しいパラメータを使用して新しいOracle CQL問合せが効率的に実行されます。ルールの実行時に、Oracle CQLはパラメータ値を左から右に向かってプレースホルダー文字に置換します。

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

JMXまたはwlevs.Adminを使用することで、params要素のid属性で設定した1つのパラメータを動的に変更または削除できます。

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

CQLProcessorMBean.replaceAllBoundParameters()メソッドを使用して、パラメータ化された問合せ内のパラメータをプログラム的に置換する場合、メソッドによって置換されない既存のパラメータはすべて問合せから自動的に削除されます。

14.2.13 副問合せ

副問合せは、ソース・リレーション/ストリームを指定する問合せのFROM句で指定できます。それ以降のサポートは、SET問合せにも拡張されます。

CREATE QUERY q0 AS
SELECT  prodid, sum(sales)
FROM (SELECT prodid AS prodid, sales AS sales FROM sales_stream [RANGE 24 HOURS]) AS foo
GROUP BY prodid;

14.3 ビュー

問合せは、データ・ストリームおよびリレーションからの情報を抽出する主な手段です。ビューは、ストリームまたはリレーションでの代替の選択項目を表し、副問合せの作成に使用できます。

ビューは、同じプロセッサにある問合せからのみアクセス可能で、この範囲を越えて公開することはできません。

ビューの定義で、任意の問合せタイプを指定できます。詳細は、「問合せ」を参照してください。

view文の詳細は、「ビュー」を参照してください。

注意:

副問合せは、UNION、UNION ALLおよびMINUSなどのバイナリ・セット演算子とともに使用されます。副問合せでは、問合せに正しい優先順位が適用されるようカッコを使用します。

問合せBBAQueryはビューMAXBIDMINASKからの選択を行い、このビューはBIDMAXなどの他のビューからの選択を行い、それらのビューはさらに他のビューからの選択を行います。最終的に、lastEventsなどのビューが実際のイベント・ソースであるfilteredStreamからの選択を行います。これらの各ビューは、1つ以上の基本ストリームから派生した個別のストリームを表しています。

<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>

この方法を使用して、副問合せと同様の結果を得ることができます。ただし、ビューを使用することで、問合せの複雑さをより柔軟に制御でき、名前によって他の問合せでビューを再利用できます。

14.3.1 ビューと結合

共通するストリーム要素名を持つ複数のビューで結合を作成する場合は、ストリームの名前を使用してストリーム要素名を修飾する必要があります。次の例は、ビュー名を使用して、BIDMAXビューのseqストリーム要素とASKMINビューのseqストリーム要素を区別する方法を示します。

<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 Stream Analyticsでの処理が軽減されます。

詳細は、「結合」を参照してください。

14.3.2 ビューとスキーマ

イベント属性名のスペース区切りリストを使用して、ビューのオプションのスキーマを定義できます。

<view id="MAXBIDMINASK" schema="cusip bidseq"><![CDATA[
select ...
]]></view>

14.4 結合

結合は、複数のストリーム、ビューまたはリレーションから行を結合する問合せです。Oracle Stream Analyticsでは、問合せのFROM句に複数のストリームがある場合は常に結合が行われます。問合せのselectリストでは、それらの任意のストリームから任意のストリーム要素を選択できます。いずれか2つのストリームで共通するストリーム要素名がある場合は、ストリーム名を使用して、問合せ全体を通じてそれらのストリーム要素に対するすべての参照を修飾し、曖昧さを避ける必要があります。

共通するストリーム要素名を持つ複数のストリーム、ビューまたはリレーションで結合を作成する場合は、各ストリーム、ビューまたはリレーションの名前を使用して、ストリーム要素名を修飾する必要があります。次の例は、ストリーム名を使用して、OrderStreamストリームのcustomerIDストリーム要素と CustomerStreamストリームのcustomerIDストリーム要素を区別する方法を示します。

<query id="q0"><![CDATA[
select * from OrderStream[range 5] as orders, CustomerStream[range 3] as customers where
orders.customerID = customers.customerID
]]></query>

それ以外の場合、完全修飾されたストリーム要素名はオプションです。ただし、ストリーム名の参照を常に明示的に修飾することをお薦めします。完全修飾されたストリーム要素名によって、多くの場合Oracle Stream Analyticsでの処理が軽減されます。

Oracle Stream Analyticsでは、次のタイプの結合がサポートされます。

- 内部結合

- 外部結合

注意:

キャッシュに対して結合を行う場合は、「キャッシュに対する結合の作成」に説明されている追加の問合せの制限に従う必要があります。

14.4.1 内部結合

デフォルトでは、Oracle Stream Analyticsは内部結合(単純結合とも呼ばれる)を実行します。これは、複数のストリームから結合条件を満たすストリーム要素のみを返す結合です。

次の例は、スキーマ(c1 integer, c2 float)を持つストリームS0とスキーマ(c1 integer, c2 float)を持つストリームS1の間の内部結合を使用する問合せq4を作成する方法を示します。

<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>

14.4.2 外部結合

外部結合は、単純結合の結果を拡張します。外部結合では、結合条件を満たすすべての行に加えて、他の表に結合条件を満たす行が含まれていなくても表の一部またはすべての行が返されます。

外部結合は、LEFTまたはRIGHT OUTER JOIN ... ON構文を使用して、問合せのFROMで指定します。

from_clause::=

次の例は、スキーマ(c1 integer, c2 float)を持つストリームS0と、スキーマ(c1 integer, c2 float)を持つストリームS1の間で、左外部結合を使用する問合せq5を作成する方法を示します。

<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句の検索条件またはフィルタ条件とは別個に結合条件を指定できます。

次の種類の外部結合を実行できます。

- 左外部結合

- 右外部結合

- 外部結合の見直し

14.4.2.1 左外部結合

ストリームAおよびBの外部結合を実行し、Aのすべてのストリーム要素を返す(左外部結合の)問合せを作成するには、FROM句でLEFT OUTER JOIN構文を使用します。Bに一致するストリーム要素がないAのすべてのストリーム要素については、Oracle Event ProcessingによってBのストリーム要素を含むselectリスト式でnullが返されます。

<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>

14.4.2.2 右外部結合

ストリームAおよびBの外部結合を実行し、Bのすべてのストリーム要素を返す(右外部結合の)問合せを作成するには、FROM句でRIGHT OUTER JOIN 構文を使用します。Aに一致するストリーム要素がないBのすべてのストリーム要素については、Oracle Event ProcessingによってAのストリーム要素を含むselectリスト式でnullが返されます。

<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>

14.4.2.3 外部結合の見直し

前の外部結合を参照する、または見直す外部結合を作成できます。

<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>

14.5 Oracle CQL問合せとOracle Stream Analyticsサーバー・キャッシュ

Oracle Stream Analyticsキャッシュには、Oracle CQL文またはユーザー定義関数からアクセスできます。

この項の内容は、次のとおりです。

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

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

キャッシュに対して結合を行うOracle CQL問合せを作成する場合、次の制限に従う必要があります。

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

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

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

- 複数の条件と非等値

詳細は、「結合」を参照してください。

14.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 ...

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

副句で、キャッシュ・キー属性に対する算術演算は使用できません。

キャッシュ・キー属性では算術演算を使用できないため、次の述語は無効です。

... CACHE.C1 + 5 = S.C1 AND CACHE.C2 = S.C2 ...

14.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 ...

14.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 ...

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

以下を使用して、Oracle CQL問合せからリレーショナル・データベース表にアクセスできます。

- 表ソース: 表ソースを使用して、ストリームを「即時」ウィンドウのみ、かつ単一のデータベース表に対してのみ結合できます。

注意:

表ソースの変更が、ストリーム・データと適宜調整されないため、表ソースを「即時」ウィンドウを使用してイベント・ストリームにのみ結合でき、かつ単一のデータベース表のみ結合できる場合があります。詳細は、「S[now]」を参照してください。

任意の複雑なSQL問合せおよび複数の表を自分のOracle SQL問合せと統合するには、かわりにOracle JDBCデータ・カートリッジの使用を検討してください。

- Oracle JDBCデータ・カートリッジ: Oracle JDBCデータ・カートリッジを使用して、任意の複雑なSQL問合せおよび複数の表、データソースを自分のOracle CQL問合せと結合する場合があります。

注意:

XMLTYPEは表ソースでサポートされません。

いずれの場合でも、データソースはOracle Stream Analyticsサーバーのconfig.xmlファイルで定義する必要があります。

Oracle Stream Analyticsのリレーショナル・データベース表イベント・ソースはプル・データ・ソースです。つまり、Oracle Stream Analyticsは、データ・ストリーム上でのイベントの到着時にイベント・ソースをポーリングします。

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

Oracle CQL問合せ内のOracle CQLデータ・カートリッジ・タイプには、Oracle CQLネイティブ・タイプの場合と同様の方法でアクセスできます。

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

この章では、Oracle Continuous Query Language (Oracle CQL)のMATCH_RECOGNIZE句に関するリファレンスと使用情報を提供します。この句とその副句は、Oracle CQL問合せでパターン認識を実行します。

FROM句内の複数のストリームとのパターン一致もサポートされています。

この章の内容は次のとおりです。

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

- MEASURES句

- PATTERN句

- DEFINE句

- PARTITION BY句

- ALL MATCHES句

- WITHIN句

- DURATION句

- INCLUDE TIMER EVENTS句

- SUBSET句

- MATCH_RECOGNIZEの例

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

MATCH_RECOGNIZE句によってOracle CQL問合せのパターン認識が実行されます。この問合せにより、DEFINE句の条件についてPATTERN句の正規表現を満たすイベント(タプル)のMEASURES句の値がエクスポートされます(SELECT内への包含が可能になります)。

<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::=

(図15-6、図15-1、pattern_def_dur_clause::=)

pattern_def_dur_clause::=

(図15-2、図15-7、図15-3、図15-9、図15-11)

MATCH_RECOGNIZEを使用して、着信イベントの属性の条件を定義し、相関変数と呼ばれるidentifiersを使用して、これらの条件を識別します。前の例では、相関変数A、BおよびCが定義されています。入力ストリームの連続するイベントのシーケンスがこれらの条件を満たす場合は、パターンが構成されます。

MATCH_RECOGNIZE問合せの出力は常にストリームです。

主なMATCH_RECOGNIZE副句には次のものがあります。

- MEASURES: 指定するパターンと一致するイベントの属性値をエクスポートします(SELECT内への包含を可能にする)。
「MEASURES句」を参照してください。

- PATTERN: 1つ以上の相関変数に対し、正規表現として一致するパターンを指定します。
「PATTERN句」を参照してください。

- DEFINE: 1つ以上の相関変数に関する条件を指定します。
「DEFINE句」を参照してください。

パターン認識を調整するには、次のようなオプションのMATCH_RECOGNIZE副句を使用できます。

- PARTITION BY句

- ALL MATCHES句

- WITHIN句

- DURATION句

- INCLUDE TIMER EVENTS句

- SUBSET句

詳細は、次を参照してください。

- MATCH_RECOGNIZE句とWHERE句

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

- 集計の参照

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

- firstとlastの使用

- prevの使用

- MATCH_RECOGNIZEの例

15.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句を適用する問合せ内のビューから選択します。

次の例に示す2つのビュー、e1p1とe2p2は、それぞれWHERE句をストリームSに適用して、必要なイベントのためにストリームを事前フィルタ処理します。問合せqは、これらの2つのビューからいずれかを選択し、イベントのフィルタ処理済ストリーム上にMATCH_RECOGNIZEを適用します。

<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>

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

MATCH_RECOGNIZE句では、次の一致タイプが識別されます。

- シングルトン: パターンで1回のみ発生し、SUBSETで定義されず、二者択一の有効範囲でなく、パターン量指定子で量が指定されない場合、相関変数はシングルトンです。
このような相関変数への参照では、単一のイベントが参照されます。

- グループ: パターンで2回以上発生し、SUBSETで定義され、二者択一の有効範囲内であるか、またはパターン量指定子で量が指定される場合、相関変数はグループです。
このような相関変数への参照では、イベント・グループが参照されます。

MEASURES句とDEFINE句内のシングルトンおよびグループの相関変数を参照する場合、次のルールに従います。

- シングルトンの相関変数の場合、集計ではなく個別のイベント属性のみを参照できます。

- グループの相関変数の場合は、次のルールがあります。

- 個別のイベント属性を参照する場合は、その相関変数と一致する最後のイベントの値が返されます。
相関変数とまだ一致していない場合、NULLが返されます。count(A.*)については、相関変数Aとまだ一致していない場合、0が返されます。

相関変数が、同じ変数の定義内で参照される場合(DEFINE A as A.balance > 1000など)、現在のイベントの値が返されます。

- 集計を参照する場合は、これまでにその相関変数と一致したすべてのイベントに対して集計が実行されます。

詳細は、次を参照してください。

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

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

- DEFINE句内の属性の参照

15.1.3 集計の参照

MATCH_RECOGNIZE問合せのMEASURESおよびDEFINE句で、任意の組込み、Coltまたはユーザー定義の集計関数を使用できます。

集計関数を使用する場合、次を考慮してください。

- 実行中集計と最終集計

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

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

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

詳細は、次を参照してください。

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

- firstとlastの使用

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

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

- ユーザー定義集計関数

- MEASURES句

- DEFINE句

15.1.3.1 実行中集計と最終集計

DEFINE句では、相関変数Xに基づくすべての集計関数が集計を実行します。つまり、集計には、現在の一致を含め、Xのそれ以前のすべての一致が含まれます。相関変数Xがそれまでに完全に一致している場合、集計は最終となり、それ以外の場合は実行中となります。

MEASURES句は、一致が見つかった後で評価されるので、最後の一致で計算されるすべての集計は最後になります。

SUBSET句を使用する場合は、誤って暗黙的に実行中集計を行う可能性があることに注意してください。

...
PATTERN (X+ Y+)
SUBSET Z = (X, Y)
DEFINE
X AS X.price > 100,
Y AS sum(Z.price) < 1000
...

相関変数ZにはZが含まれるので、Yの定義にはY上の実行中集計が含まれます。

詳細は、次を参照してください。

- MEASURES句

- DEFINE句

- SUBSET句

15.1.3.2 同一の相関変数での操作

MEASURESとDEFINE句の両方で、同一の相関変数の属性にのみ集計関数を適用できます。

たとえば、集計関数correlationの使用は無効です。

...
MEASURES xycorr AS correlation(X.price, Y.price)
PATTERN (X+ Y+)
DEFINE
X AS X.price <= 10,
Y AS Y.price > 10
...

correlation集計関数は、複数の相関変数では機能しない場合があります。

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

DEFINE句では、まだ一致していない相関変数を参照できます。ただし、その場合は注意してください。

PATTERN (X+ Y+)
DEFINE
X AS count(Y.*) >= 3
Y AS Y.price > 10,

この構文は有効ですが、この例では、Xが一致した時点でYはまだ一致しておらず、Yは0であるので、パターンは一致しません。

希望の動作(「3回以上連続してYの価格が10を超える場合に一致」)を実装するには、このパターンを実装します。

PATTERN (Y+ X+)
DEFINE
Y AS Y.price > 10,
X AS count(Y.*) >= 3

詳細は、「*、identifier.*およびidentifier.attrのあるcountの使用」を参照してください。

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

DEFINE句では、集計関数を相関変数によって未修飾のイベント属性に適用する場合、集計は実行中集計です。

PATTERN ((RISE FALL)+)
DEFINE
RISE AS count(RISE.*) = 1 or RISE.price > FALL.price,
FALL AS FALL.price < RISE.price and count(*) > 1000

この問合せでは、価格は可能なかぎり上下しますが、少なくとも1000の一致があるパターンが検出されます。

詳細は、次を参照してください。

- 実行中集計と最終集計

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

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

組込み集計関数countの構文は次のとおりです。

(arith_expr::=)

表15-1に示すように、countの戻り値は引数によって異なります。

表15-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と一致するタプルの数。

Sのスキーマに属性accountとbalanceが含まれると想定します。この問合せでは、60分間で3回以上受信されていない各accountのイベントが返されます。

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を含むタプルの数」を意味します。

- count(A.balance)は、「balanceがNULLでない場合に相関変数Aと一致するすべてのタプルの数」を意味します。

詳細は、次を参照してください。

- count

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

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

- 集計の参照

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

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

15.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

- 集計の参照

15.1.4 prevの使用

prev組込み単一行関数を使用して、以前に一致したイベントのイベント属性にアクセスできます。以前に一致したイベントがない場合は、prev関数ではNULLが返されます。

prev関数では、以前の一致のオフセットを示す、オプションのゼロ以上の定整数の引数(N)を使用できます。このオフセットを指定する場合、prev関数では、現在の一致前のN番目に一致するイベントが返されます。以前に一致したイベントがない場合は、prev関数ではNULLが返されます。

prev関数をDEFINE句で使用する場合、この関数は現在定義済の相関変数のみにアクセスできます。

たとえば、相関変数の定義は次のようになります。

Y AS Y.price < prev(Y.price, 2)

ただし、次の相関変数定義は、相関変数Yの定義中、prev関数内の相関変数Xを参照するため無効です。

Y AS Y.price < prev(X.price, 2)

詳細は、次を参照してください。

- prev
DEFINE句

15.2 MEASURES句

MEASURES句は、指定するパターンと一致するイベントの属性値をエクスポートします(SELECT内への包含を可能にする)。

パーティション属性、属性別の順序、シングルトン変数、グループ変数の集計、およびMATCH_RECOGNIZE句のソースであるストリームの属性の集計を参照する相関変数に対して式を指定できます。

相関変数によって属性値を修飾して、相関変数の条件と一致するイベントの属性の値をエクスポートします。たとえば、MEASURES句内で、次のようにA.c1はイベント属性c1の値を参照します。

- AがDEFINE句で指定されている場合、相関変数Aに対応する条件と最後に一致すたタプル内。

- AがDEFINE句内で指定されていない場合、最後に処理されたタプル内。
これは、AはDEFINE句内で指定されていない場合に、Aは常にTRUEと見なされるからです。このため、入力内のすべてのタプルが効率よくAと一致します。

SELECT文内には、MEASURES句で指定する属性のみを含めることができます。

図15-1 pattern_measures_clause::=

(non_mt_measure_list::=)

non_mt_measure_list::=

(measure_column::=)

measure_column::=

(arith_expr::=)

pattern_measures_clauseは次のとおりです。

MEASURES
A.itemId as itemId

この項の内容は、次のとおりです。

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

詳細は、次を参照してください。

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

- 集計の参照

- DEFINE句

- 関数

15.2.1 MEASURES句内の相関変数用の関数

MEASURES句で、条件と一致するイベントの属性に単一行または集計関数を適用できます。

MEASURES句内の相関変数Z.c1にlast関数を適用できます。

<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>

MEASURES句内の次の点に注意してください。

- A.c1では、次の理由により、最初の一致および問合せで処理される最初のイベント内のc1の値のみがエクスポートされます。

- AはDEFINE句で指定されていないので、常にtrueになります。

- Aにパターン量指定子がないので、1回のみ一致します。

- 組込み集計関数lastでは、PATTERN句が満たされるときにZと一致する最後のイベント内のc1の値がエクスポートされます。

詳細は、次を参照してください。

- 集計の参照

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

- firstとlastの使用

- prevの使用

15.3 PATTERN句

PATTERN句は、1つ以上の相関変数に対し、正規表現として一致するパターンを指定します。

着信イベントは、指定された順序(左から右)でこれらの条件と一致する必要があります。

正規表現には、次のような相関変数を含むことができます。

- DEFINE句で定義される相関変数: 条件定義でTRUEに評価される場合にのみ、trueと見なされます。
「DEFINE句」を参照してください。

- DEFINE句で定義されていない相関変数: 常にTRUEと見なされ、すべての入力と一致します。

図15-2 pattern_clause::=

(regexp::=、図15-8)

この項の内容は、次のとおりです。

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

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

詳細は、次を参照してください。

- パターン検出

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

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

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

相関変数およびパターン量指定子で構成される正規表現としてパターンを表します。

regexp::=

(correlation_name::=、pattern_quantifier::=)

correlation_name::=

pattern_quantifier::=

表15-2は、Oracle CQLでサポートされるパターン量指定子(pattern_quantifier::=)のリストです。

表15-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との一致はより少なくなります。

詳細は、次を参照してください。

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

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

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

regexp_grp_alt構文が示すように、次を使用できます。

- 開カッコと閉カッコ((と)): 相関変数のグループ化

- 二者択一演算子(|): いずれか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、いずれか早い方」を意味します。

詳細は、次を参照してください。

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

- 二者択一演算子

15.4 DEFINE句

DEFINE句は、各相関変数のブール条件を指定します。

論理式または算術式を指定して、条件と一致するイベントの属性に単一行または集計関数を適用できます。

基本ストリームからの新しいタプルが受信されると、その時点で関連している相関変数の条件が評価されます。その定義の条件を満たしている場合、タプルは相関変数に一致したと見なされます。特定の入力は0個、1個または複数の相関変数と一致する可能性があります。入力の受信時に評価される関連条件は、PATTERN句の正規表現で管理されるロジックと、これまでの入力を処理した後のパターン認識処理の状態によって決定されます。

条件では、MATCH_RECOGNIZE句が適用されるストリームまたはストリームに評価されるビューのスキーマの任意の属性を参照できます。

PATTERN句の相関変数は、DEFINE句で指定する必要はありません。このような相関変数のデフォルトは、常にtrueの述語です。このような相関変数は、すべてのイベントに一致します。PATTERN句で使用されていない相関変数をDEFINE句に指定すると、エラーになります。

SUBSET句で定義される相関変数はいずれもDEFINE句で定義できません。

図15-3 pattern_definition_clause::=

(図15-4)

図15-4 non_mt_corrname_definition_list::=

(図15-5)

図15-5 correlation_name_definition::=

(correlation_name::=、non_mt_cond_list)

この項の内容は、次のとおりです。

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

- DEFINE句内の属性の参照

- DEFINE句内の相関変数間の参照

詳細は、次を参照してください。

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

- 集計の参照

- firstとlastの使用

- prevの使用

- PATTERN句

- SUBSET句

- 関数

15.4.1 DEFINE句内の相関変数用の関数

相関変数の定義では関数を使用できます。

次の例では、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)
...

次の例では、count関数を相関変数Bに適用して、定義が満たされる回数をカウントします。totalCountValueが、30分間に1000未満が2、3回ある場合に一致が認識されます。

...
MATCH_RECOGNIZE(
...
PATTERN(B*)
DURATION 30 MINUTES
DEFINE
B as (B.totalCountValue < 1000 and count(B.*) >= 2)
...

詳細は、次を参照してください。

- 集計の参照

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

- firstとlastの使用

- prevの使用

15.4.2 DEFINE句内の属性の参照

基本ストリームの属性を参照できます。

- 相関変数がない場合: c1 < 20

- 相関変数がある場合: A.c1 < 20

相関変数なしで属性を参照する場合、相関変数と最後に一致したタプルが評価の対象になります。

次の定義があるとします。

- DEFINE A as c1 < 20

- DEFINE A as A.c1 < 20

両方とも、最新の入力タプルである同じタプル内のc1を参照します。これは、最新の入力が相関変数と一致するものと想定し、入力着信時に、この相関変数の条件を評価するからです。

DEFINE句に定義されていない相関名を指定した場合は、各入力でtrueと見なされます。

相関変数AはPATTERN句内に存在しますが、DEFINE句では指定されていません。これは、相関名Aがすべての入力に対してtrueであることを意味します。PATTERN句で使用されていない相関名を定義するのは誤りです。

<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>

詳細は、次を参照してください。

- DEFINE句内の相関変数間の参照

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

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

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

- PATTERN句

15.4.3 相関変数間の参照

1つの相関変数の定義で、他の相関変数を参照できます。次の問合せについて考えてみます。

...
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の一致にアクセスするために使用されています。

詳細は、次を参照してください。

- DEFINE句内の属性の参照

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

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

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

- DEFINE句内の属性の参照

15.5 PARTITION BY句

MATCH_RECOGNIZE句の結果を分割するためのストリームの属性を指定するには、このオプションの句を使用します。

PARTITION BY句がない場合、すべてのストリーム属性は同じパーティションに属します。

図15-6 pattern_partition_clause::=

(non_mt_attr_list)

pattern_partition_clauseは次のとおりです。

PARTITION BY
itemId

パターン内のpartition by句は、partitionリスト内の属性に基づいて入力ストリームが論理的に分割され、その分割内でパターン・マッチングが行われることを意味します。

スキーマ(c1 integer, c2 integer)を持つストリームSがあるとします。

c1  c2
1000 10, 1
2000 10, 2
3000 20, 2
4000 20, 1

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

この問合せにPARTITION BY c2を追加すると、出力は次のように変わります。

3000:+ 2000, 3000, 2
4000:+ 1000, 4000, 1

これは、PARTITION BY句の追加により、一致が分割内でのみ行われるようになったためです。c2属性の値によって、1000と4000のタプルはある分割に属し、2000と3000のタプルは別の分割に属します。最初の分割で、Aは1000のタプルと一致し、Bは4000のタプルと一致します。3000のタプルもBの定義と一致しますが、タプルが別の分割に属しているため、最初の分割では一致として提示されません。

15.6 ALL MATCHES句

このオプション句を使用すると、重複するパターンに一致するようにOracle Stream Analyticsを構成できます。

ALL MATCHES句を指定すると、Oracle Stream Analyticsは想定される一致をすべて検索します。重複している一致、および同じイベントで開始される一致がある場合があります。この場合、パターン量指定子が「グリーディ」であっても「リラクタント」であっても、違いはありません。たとえば、次のようなパターンがあります。

ALL MATCHES
PATTERN (A* B)

次のように、同じ結果になります。

ALL MATCHES
PATTERN (A*? B)

ALL MATCHES句がない場合、重複する一致は返されず、アスタリスクなどの量指定子によって、一連の候補(および重複)一致のうち、優先して出力される一致が決定されます。重複する一致の残りは破棄されます。

図15-7 pattern_skip_match_clause::=

ALL MATCHESを使用する問合せtkpattern_q41と、データ・ストリームtkpattern_S11があるとします。ストリームtkpattern_S11のスキーマは(c1 integer, c2 integer)です。この問合せはストリームを返します。

問合せtkpattern_q41では、入力ストリーム値のプロットが英字Wの形になる場合に一致が報告されます。リレーションは、このWパターン一致の重複するインスタンスの例を示します。

重複するパターンのインスタンスには2つの種類があります。

- 全体: 全体的な重複の例: 入力に含まれる時間3000-9000および4000-9000の行は両方とも指定されたパターン式に一致します。ALL MATCHES句がない場合は、長い方(3000-9000)が使用されます。

- 部分: 部分的な重複の例: 入力に含まれる時間12000-21000および16000-23000の行は両方とも指定されたパターン式に一致します。ALL MATCHES句がない場合は、先に出現した方が使用されます。これは、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>

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

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

ALL MATCHES句では特定の入力が受信されると、一致するすべてのパターン・インスタンスが報告されます。たとえば、時間20000では{12,20}、{13,20}および{14,20}のすべてのタプルが出力されます。

詳細は、「パターン量指定子と正規表現」を参照してください。

15.7 WITHIN句

WITHIN句は、指定された時間内で一致が発生する場合にのみ、pattern_clause一致を出力するオプションの句です。

図15-8 within_clause::=

(time_spec)

つまり、次の場合にのみ発生します。

TL - TF < WD

説明:

- TL - パターンに一致する最後のイベントのタイムスタンプ。

- TF - パターンに一致する最初のイベントのタイムスタンプ。

- WD - WITHIN句で指定された期間。

WITHIN INCLUSIVE句は境界でのイベントの一致も試みます。すなわち、次の場合に一致を出力します。

TL - TF <= WD

一致が指定された期間内に完了した場合、イベントは発生するとただちに出力されます。すなわち、一致を出力できる場合、完了時のタイムスタンプとともに出力されます。WITHIN句は、DURATION句のように期間が期限切れになるのを待機しません。

WITHIN句の期間が期限切れになると、不完全な一致候補はすべて破棄されます。

詳細は、「WITHIN句を使用したパターン検出」を参照してください。

注意:

WITHIN句とDURATION句を併用することはできません。詳細は、「DURATION句」を参照してください。

15.8 DURATION句

DURATION句は、イベントの欠落を検出する問合せを作成する場合にのみ使用する必要のあるオプションの句です。イベントの欠落の検出では、特定の制限時間内に発生するはずの特定のイベントが時間内に発生しない状況が検出されます。

図15-9 duration_clause::=

(図7-10)

この句を使用すると、PATTERN句の正規表現が完全に一致し、DURATION句に指定された期間が期限切れになるまで他のイベントまたは入力が到着しない場合にのみ、一致が報告されます。期間は、パターンの一致の最初のイベントが到着した時点から計測されます。

DURATION句を使用する場合は、INCLUDE TIMER EVENTS句を使用する必要があります。詳細は、「INCLUDE TIMER EVENTS句」を参照してください。

この項の内容は、次のとおりです。

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

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

注意:

DURATION句とWITHIN句を併用することはできません。詳細は、「WITHIN句」を参照してください。

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

期間は、10などの定数値として指定できます。オプションで、秒数や分数などの時間単位を指定できます(図7-11を参照)。デフォルトの時間単位は秒数です。

DURATION 10を使用して10秒(10000ms)の遅延を指定する問合せtkpattern_q59と、データ・ストリームtkpattern_S19があるとします。ストリームtkpattern_S19のスキーマは(c1 integer)です。この問合せはストリームを返します。

<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>

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

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の時点で一致が報告されます。同様のロジックに従って、以降の出力が生成されます。

詳細は、「固定期間のイベント欠落の検出」を参照してください。

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

MULTIPLES OF句を指定した場合は、反復的なイベント欠落の検出が示されます。この場合、パターンが完全に一致した後にイベントが発生しないかぎり、期間値の倍数の時点で出力が送信されます。

DURATION MULTIPLES OF 10を使用して10秒(10000ms)の遅延を指定する問合せtkpattern_q75と、データ・ストリームtkpattern_S23があるとします。ストリームtkpattern_S23のスキーマは(c1 integer)です。この問合せはストリームを返します。

<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>

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

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およびそれ以降は同様に出力が行われます。

15.9 INCLUDE TIMER EVENTS句

イベント欠落の検出には、この句とDURATION句を併用します。

通常、たいていのパターン一致の問合せでは、パターン一致の出力は、常に入力イベントによって入力ストリーム上で一致するパターンに対してトリガーされます。唯一の例外は、イベント欠落の検出の問合せで、タイマーの期限切れイベントによって(入力ストリーム上の明示的な入力イベントではなく)出力がトリガーされる場合があります。

図15-10 pattern_inc_timer_evs_clause::=

(図15-2、図15-7、図15-3、図15-9、図15-11)

詳細は、「DURATION句」を参照してください。

15.10 SUBSET句

この句を使用すると、DEFINE句に定義された1つ以上の相関変数をグループにまとめることができます。MEASURESとDEFINEでは、他の任意の相関変数と同様にこの名前付きサブセットを使用できます。

次に例を示します。

SUBSET S1 = (Z,X)

サブセットの右側((Z,X))は、PATTERN句での定義に基づいた1つ以上の相関変数のカンマ区切りのリストです。

サブセットの左側(S1)は、右側の相関変数を結合したものです。

サブセットの右側にサブセット変数を含めることはできません。

図15-11 subset_clause::=

(図15-12)

図15-12 non_mt_subset_definition_list::=

(図15-13)

図15-13 subset_definition::=

(図15-14、図15-15)

図15-14 subset_name::=

(図7-3)

図15-15 non_mt_corr_list::=

(correlation_name::=)

例15-1の問合せq55と、例15-2のデータ・ストリーム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に一致するすべてのタプルを参照します。

この問合せはストリームを返します。

例15-1 SUBSET句の問合せ

<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>

例15-2 SUBSET句の問合せ

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

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

詳細は、次を参照してください。

- 実行中集計と最終集計

- MEASURES句

- PATTERN句

- DEFINE句

15.11 MATCH_RECOGNIZEの例

次に、基本的なMATCH_RECOGNIZEの実際の例を示します。

- パターン検出

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

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

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

15.11.1 パターン検出

図15-16に示すような株価変動について考えます。このデータは証券コード(索引番号または時間)および株価のストリームとして表すことができます。図15-16では、1～9日および12～19日の間に二番底パターンと呼ばれるトレーディングの一般的な現象が発生しています。このパターンは、W字形の株価変動(下降(X)、上昇(Y)、下降(W)、2度目の上昇(Z))として視覚化されます。

図15-16 パターン検出: 二番底の株価変動

例15-3は、スキーマ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番目の上昇部分に相当します。

例15-3 パターン検出

<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>

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

図15-17に示すような株価変動について考えます。このデータは証券コード(索引番号または時間)および株価のストリームとして表すことができます。この例では、複数の証券コードのデータがストリームに含まれています。図15-17では、銘柄BOFAの1～9日および12～19日の間に二番底パターンと呼ばれるトレーディングの一般的な現象が発生しています。このパターンは、W字形の株価変動(下降(X)、上昇(Y)、下降(W)、2度目の上昇(Z))として視覚化されます。

図15-17 Partition Byを使用したパターン検出: 株価変動

例15-4は、スキーマ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句を適用します。

例15-4 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>

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

問合せq1とデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 integer)です。この問合せはストリームを返します。

<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>

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

Timestamp   Tuple
8000        338
12000       52

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

問合せとデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 integer, c2 integer)です。表15-3で、これらの問合せの出力を比較します。

<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>

<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>

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

表15-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,

表15-3のqueryWithin問合せに示すように、候補一致はTimeStamp=1000のイベントで開始されます。WITHIN句の期間が3秒であるため、問合せは、TimeStamp=4000のイベントの前に完了した場合にのみ、一致を出力します。問合せがTimeStampe=4000のイベントを受け取ると、その時点までで最も長い一致が出力されます(ALL MATCHESを使用していないため)。TimeStamp=4000のイベントがBに一致しても、そのイベントは一致に含まれないことに注意してください。次の一致は、TimeStamp=4000のイベントから開始されます。このイベントもAに一致しており、以前の一致がTimeStamp=3000で終了しているためです。

表15-3のqueryWithinInclusive問合せに示すように、候補一致はTimeStamp=1000のイベントで開始されます。問合せがTimeStamp=4000のイベントを受け取る場合、問合せではWITHIN INCLUSIVEが使用され、イベントがBに一致するため、このイベントは一致に含められます。TimeStamp=5000のイベントはBに一致しますが、一致の開始(TimeStamp=1000)から測定した期間(3秒)を超えているため、パターンはこれ以上拡張されません。一致はTimeStamp=4000に終了しており、ALL MATCHESを使用していないため、Aと一致する場合であっても、次の一致はTimeStamp=4000に開始されません。

詳細は、次を参照してください。

- WITHIN句

- ALL MATCHES句

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

5つの異なる部屋を移動するオブジェクトがあるとします。オブジェクトは、毎回部屋1を出発し、5分以内に部屋5に到着する必要があります。図15-18は、オブジェクトの動きを示しています。このデータは、時間および部屋番号のストリームとして表すことができます。オブジェクトは、時間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を使用して、このようなイベント欠落を問い合せることができます。

図15-18 固定期間のイベント欠落の検出

次の例は、ストリームS (部屋番号を表すc1 integerスキーマを持つ)に対してイベントの欠落を検出する問合せqを示します。オブジェクトが部屋1を出発してから5分以内に部屋5に到着しなかった場合は毎回問合せによって部屋1を出発した時刻が返されます。

<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>

詳細は、「DURATION句」を参照してください。

16 Oracle CQL文

この章では、Oracle Continuous Query Language (Oracle CQL)のデータ定義言語(DDL)文について説明します。

この章の内容は次のとおりです。

- Oracle CQL文の概要

16.1 Oracle CQL文の概要

Oracle CQLでは次のDDL文をサポートしています。

- 問合せ

- ビュー

注意:

ストリーム入力の例で、hで始まる行(h 3800など)はハートビート入力タプルです。これは、ハートビート値よりも小さいタイムスタンプを持つこれ以上の入力がないことをOracle Event Processingに通知します。

詳細は、次を参照してください。

- 表記規則

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

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

- Oracle CQLの基本要素

- 共通のOracle CQL DDL句

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

16.2 問合せ

目的

後続のOracle CQL文のidentifierで参照されるOracle CQL問合せを定義するには、query文を使用します。

前提条件

問合せがストリームまたはビューを参照する場合は、ストリームまたはビューが存在している必要があります。

問合せがすでに存在する場合は、Oracle Event Processingサーバーで例外がスローされます。

詳細は、次を参照してください。

- ビュー

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

構文

<query></query>要素で問合せを表します。

query要素は1つの属性を持ちます。

- id: query要素のid属性としてidentifierを指定します。

<query id="q0"><![CDATA[
select * from OrderStream where orderAmount > 10000.0
]]></query>

図16-1 query::=

図16-2 sfw_block::=

図16-3 select_clause::=

図16-4 non_mt_projterm_list::=

図16-5 projterm::=

(arith_expr )

図16-6 from_clause::=

図16-7 non_mt_relation_list::=

図16-8 relation_variable::=

図16-9 window_type::=

図16-10 table_clause::=

図16-11 opt_where_clause::=

図16-12 opt_group_by_clause::=

図16-13 order_by_clause::=

図16-14 order_by_top_clause::=

図16-15 order_by_list::=

図16-16 orderterm::=

図16-17 null_spec::=

図16-18 asc_desc::=

図16-19 opt_having_clause::=

図16-20 binary::=

図16-21 idstream_clause::=

図16-22 using_clause::=

図16-23 usinglist::=

図16-24 usingterm::=

図16-25 usingexpr::=

図16-26 xmltable_clause::=

図16-27 xmlnamespace_clause::=

図16-28 xmlnamespaces_list::=

図16-29 xml_namespace::=

図16-30 xtbl_cols_list::=

図16-31 xtbl_col::=

16.2.1 問合せセマンティクス

named_query

Oracle CQL問合せ文自体を指定します。

構文については、問合せを参照してください。

query

Oracle CQL問合せは、次の任意の句から作成できます。

- sfw_block: select句、from句、および他のオプションの句。

- binary: オプションの句(通常は集合演算)。

- xstream_clause: sfw_block句またはbinary句にオプションのリレーションからストリームへの演算子を適用して、問合せから返される結果を制御します。

sfw_block

Oracle CQL問合せのselect、fromおよびその他のオプション句を指定します。次の任意の句を指定できます。

- select_clause: 指定のストリームまたはビューから選択するストリーム要素。

- from_clause: 問合せで選択するストリームまたはビュー。

- opt_where_clause: 問合せの選択に適用するオプションの条件。

- opt_group_by_clause: 問合せの結果に適用するオプションのグループ化条件。
order_by_clause: 問合せの結果に適用するオプションの順序付け条件。

- order_by_top_clause: 問合せの結果に含まれる上位n個の要素に適用するオプションの順序付け条件。

- opt_having_clause: 指定したconditionがTRUEのグループになるように、返されるストリーム要素のグループを制限するために問合せで使用するオプションの句。

select_clause

Oracle CQL問合せ文のselect句を指定します。

アスタリスク(*)を指定した場合、この句では重複とnullを含むすべてのタプルが返されます。

それ以外の場合は、必要になる個別のストリーム要素を指定します。

選択した重複タプルの各セットで1つのコピーのみが返されるようにするには、オプションでdistinctを指定します。重複タプルとはselectリスト内の各式と一致する値を持つタプルです。

non_mt_projterm_list

Oracle CQL問合せ文のselect句で射影条件または射影条件のカンマ区切りのリストを指定します。

projterm

Oracle CQL問合せ文のselect句で射影条件を指定します。要素のidentifierを使用すると、from_clauseに含まれる任意のストリームまたはビューから任意の要素を選択できます。

オプションで、射影条件に算術式を指定できます。

オプションで、ストリーム要素の名前をそのまま使用するかわりにASキーワードを使用して射影条件の別名を指定できます。

from_clause

問合せで選択する個別のストリームまたはビューを指定して、Oracle CQL文のfrom句を指定します。

外部結合を実行するには、LEFTまたはRIGHT OUTER JOIN ... ON構文を使用します。内部結合を実行するには、WHERE句を使用します。

non_mt_relation_list

Oracle CQL問合せ文のfrom句で、ストリームまたはビュー、またはストリームまたはビューのカンマ区切りのリストを指定します。

relation_variable

Oracle CQL問合せ文で選択されるストリームまたはビューを指定するには、relation_variable文を使用します。

ストリームまたはビューの登録または作成時に使用したidentifierによって、以前に登録または作成したストリームまたはビューを直接指定できます。オプションで、名前をそのまま使用するかわりにASキーワードを使用してストリームまたはビューの別名を指定します。

組込みのストリームからリレーションへの演算子を指定する場合は、window_type句を使用します。オプションで、名前をそのまま使用するかわりにASキーワードを使用してストリームまたはビューの別名を指定します。

データ・ストリーム用に最適化された高度な比較をストリームまたはビューに適用する場合は、pattern_recognition_clauseを使用します。オプションで、名前をそのまま使用するかわりにASキーワードを使用してストリームまたはビューの別名を指定します。

XPathおよびXQueryを使用してxmltypeストリーム要素を処理する場合は、xmltable_clauseを使用します。オプションで、名前をそのまま使用するかわりにASキーワードを使用してストリームまたはビューの別名を指定します。

リレーションとして、Oracle CQL問合せのFROM句内のデータ・カートリッジ関数から返された複数の行にアクセスする場合は、table_clauseを使用します。

詳細は、次を参照してください。

- ビュー

window_type

組込みのストリームからリレーションへの演算子を指定します。

詳細は、「ストリームからリレーションへの演算子(ウィンドウ)」を参照してください。

table_clause

データ・カートリッジのTABLE句を使用して、Oracle CQL問合せのFROM句内のデータ・カートリッジ関数から返された複数の行にアクセスします。

TABLE句は返された複数の行をOracle CQLリレーションに変換します。これは外部リレーションであるため、TABLE関数句とストリームを結合する必要があります。Oracle Event Processingでは、結合ストリームに要素が到着したときにのみデータ・カートリッジ・メソッドを呼び出します。

オプションのOFキーワードを使用して、返された配列型またはCollection型に含められる型を指定します。

ASキーワードを使用して、object_exprと返されたリレーションの別名を指定します。

次の点に注意してください。

- データ・カートリッジ・メソッドは、配列型またはCollection型を返す必要があります。

- TABLE関数句とストリームを結合する必要があります。

time_spec

範囲または分割された範囲のスライディング・ウィンドウがスライドする時間を指定します。

デフォルト: 単位を指定しない場合、Oracle Event Processingでは[second|seconds]が想定されます。

詳細は、「範囲ベースのストリームからリレーションへのウィンドウ演算子」および「分割されたストリームからリレーションへのウィンドウ演算子」を参照してください。

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句を適用する問合せ内のビューから選択します。

詳細は、次を参照してください。

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

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

- MATCH_RECOGNIZE句とWHERE句

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句で集計関数の結果をテストする必要があります。

詳細は、次を参照してください。

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

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

order_by_clause

1つ以上の並べ替え条件を含むカンマ区切りのリストとして、Oracle CQL問合せ文のORDER BY句を指定します。ORDER BY句を使用して、ルールの左側のストリーム要素が評価される順序を指定します。exprは、ディメンションまたはメジャー列に変換される必要があります。この句ではストリームが返されます。

ORDER BYとORDER BY ROWSのどちらでも、ソートの方向をASCまたはESCキーワードを使用して昇順または降順として指定できます。NULLS FIRSTまたはNULLS LASTを使用してソートする場合、null項目を最初または最後のどちらにリストするかも指定できます。

詳細は、次を参照してください。

- 問合せ結果のソート

order_by_top_clause

ROWSキーワードと要素数の整数(n)が後続する1つ以上の並べ替え条件を含むカンマ区切りのリストとして、Oracle CQL問合せ文のORDER BY句を指定します。この形式の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_list

(オプションの)ORDER BY句で、1つ以上の並べ替え条件のカンマ区切りのリストを指定します。

orderterm

ストリーム要素またはストリーム要素への位置指定索引 (constant int)。オプションで、NULLSキーワードを使用すると、nullを順序の最初または最後のどちらにするかを構成できます。

order_expr

order_exprにはattrまたはconstant_intを指定できます。attrには任意のストリーム要素または疑似列を指定できます。

null_spec

指定の並べ替え条件でnullを順序の最初にするか(NULLS FIRST)、または最後にするか(NULLS LAST)を指定します。

asc_desc

並べ替え条件が昇順(ASC)または降順(DESC)のどちらであるかを指定します。

opt_having_clause

HAVING句を使用して、返されたストリーム要素のグループを、指定されたconditionがTRUEのグループに制限します。この句を省略すると、Oracle Event Processingではすべてのグループのサマリー結果が返されます。

GROUP BYと HAVINGはopt_where_clauseの後に指定します。GROUP BYとHAVINGの両方を指定する場合は、どちらの順序でも指定できます。

Oracle CQLではWHERE句はGROUP BYまたはHAVINGの前に適用されるため、SELECT句で集計関数を指定する場合、WHERE句ではなくHAVING句で集計関数の結果をテストする必要があります。

詳細は、次を参照してください。

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

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

binary

2つのストリームまたはビューで返されるタプルで演算を実行するには、binary句を使用します。これらの多くでは、集合演算が実行され、オペランドとして2つのリレーションが返されます。ただし、UNION ALL演算子では、かわりに本来バインドされていない2つのストリームが返されます。

idstream_clause

問合せに適用されるリレーションからストリームへのIStreamまたはDStream演算子を指定するには、idstream_clauseを使用します。

詳細は、「リレーションからストリームへの演算子」を参照してください

using_clause

DIFFERENCE USING句を使用すると、問合せのIStreamまたはDStreamの差分を簡単に検出できます。

詳細は、「問合せ結果の差分の検出」を参照してください。

usinglist

usinglist句を使用して、問合せのIStreamまたはDStreamの差分検出に使用する列を指定します。次の項目によって列を指定できます。

- 属性名: 属性名で選択する場合に、このオプションを使用します。

- 別名: 別名が指定されている式の結果を含める場合に、このオプションを使用します。

- 位置: 別名が指定されていない式の結果を含める場合に、このオプションを使用します。
位置は、左から右に読み取る、1で始まる正の整数の、定数として指定します。

次の例では、式funct(c2, c3)の結果を、DIFFERENCE USING句のusinglistで位置(3)によって示しています。

<query id="q1">
ISTREAM (
SELECT c1, log(c4) as logval, funct(c2, c3) FROM S [RANGE 1 NANOSECONDS]
)    DIFFERENCE USING (c1, logval, 3)
</query>

詳細は、「問合せ結果の差分の検出」を参照してください。

xmltable_clause

XPathおよびXQueryを使用してxmltypeストリーム要素を処理するには、xmltable_clauseを使用します。XMLネームスペースの有無にかかわらず、XML表の1つ以上の列を含むカンマ区切りのリストを指定できます。

pattern_recognition_clause

データ・ストリーム用に最適化された高度な比較を実行するには、pattern_recognition_clauseを使用します。

詳細および例については、「MATCH_RECOGNIZEを使用したパターン認識」を参照してください。

16.2.2 問合せの例

詳細は、「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

単純な問合せの例

次の例に、ストリーム要素orderAmountが10000を超える場合のすべての(*)タプルをストリームOrderStreamから選択する単純な問合せq0を登録する方法を示します。

<query id="q0"><![CDATA[
select * from OrderStream where orderAmount > 10000.0
]]></query>

HAVINGの例

問合せq4とデータ・ストリームS2があるとします。ストリームS2のスキーマは(c1 integer, c2 integer)です。この問合せはリレーションを返します。

<query id="q4"><![CDATA[
select
c1,
sum(c1)
from
S2[range 10]
group by
c1
having
c1 > 0 and sum(c1) > 1
]]></query>

Timestamp   Tuple
1000        ,2
2000        ,4
3000        1,4
5000        1,
6000        1,6
7000        ,9
8000        ,

Timestamp   Tuple Kind  Tuple
5000:       +           1,2
6000:       -           1,2
6000:       +           1,3

BINARYの例: UNIONとUNION ALL

UNIONおよびUNION ALL演算子はどちらも、2つのオペランドを使用し、それらの要素を組み合せます。UNION ALL演算子の結果には、重複を含め、2つのオペランドのすべての要素が含まれます。UNION演算子の結果では重複が除外されます。

UNION演算子では2つのリレーションのみを受け入れ、その出力として1つのリレーションを生成します。この演算子では、重複を削除するために、Oracle CQLエンジンで両方のオペランドに含まれるすべての要素を追跡する必要があるので、ストリームは受け入れられません。本来バインドされないストリームでは、これは不可能です。

UNION ALL演算子では、2つのストリームを受け入れる(1つのストリームを生成する)か、2つのリレーションを受け入れる(1つのリレーションを生成する)かのいずれかです。1つのストリームと1つのリレーションをオペランドとして使用することは、どちらの演算子でも無効です。

それぞれがリレーションR1とR2の場合、UNION問合せq1はリレーション、UNION ALL問合せq2はリレーションを返します。

<query id="q1"><![CDATA[
R1 UNION R2
]]></query>
<query id="q2"><![CDATA[
R1 UNION ALL R2
]]></query>

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

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

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

注意:

UNIONは、出力の重複を削除する二項演算子の1つです。上記は、属性がCQLネイティブ・タイプである自明な例です。入力リレーションがOBJECTタイプ属性である場合、ユーザーはObject定義クラスにhashCode()およびequals()メソッドの正しい実装を追加して、CQLエンジンで2つの比較タプルのメンバー・オブジェクト属性の等価を計算できるようにする必要があります。

次の出力は、UNION ALLでオペランドとして2つのリレーションを使用して得られるものです。

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

Timestamp     Tuple
100000:    20,0.1
150000:    15,0.1
200000:    5,0.2
400000:    30,0.3
100000000:    8,4.04

Timestamp     Tuple
1001:    10,0.1
1002:    15,0.14
200000:    20,0.2
400000:    30,0.3
100000000:    40,4.04

次の出力は、UNION ALLでオペランドとして前述の2つのストリームを使用して得られるものです。すべての要素は、挿入されたイベントです。

Timestamp   Tuple Kind  Tuple
1001:  +           10,0.1
1002:  +           15,0.14
100000:  +           20,0.1
150000:  +           15,0.14
200000:  +           20,0.2
200000:  +           5,0.2
400000:  +           30,0.3
400000:  +           30,0.3
100000000:  +           40,4.04
100000000:  +           8,4.04

BINARYの例: INTERSECT

INTERSECT演算子では、両方のオペランド・リレーションにある要素のみを使用して、1つのリレーションを(重複を削除して)返します。

それぞれがリレーションR1とR2の場合、INTERSECT問合せq1はリレーションを返します。

<query id="q1"><![CDATA[
R1 INTERSECT R2
]]></query>

Timestamp   Tuple Kind  Tuple
1000:        +          10,30
1000:        +          10,40
2000:        +          11,20
3000:        -          10,30
3000:        -          10,40

Timestamp   Tuple Kind  Tuple
1000:       +           10,40
2000:       +           10,30
2000:       -           10,40
3000:       -           10,30

Timestamp   Tuple Kind  Tuple
1000:       +           10,40
2000:       +           10,30
2000:       -           10,40
3000:       -           10,30

BINARYの例: EXCEPTとMINUS

データベースのプログラミングと同様に、EXCEPT演算子とMINUS演算子は非常に似ています。どちらも2つのオペランドとしてリレーションを使用します。どちらも結果は、基本的に要素が1つ目のオペランド・リレーションの要素(2つ目のオペランド・リレーションには含まれていない)であるリレーションになります。

EXCEPTとMINUSの重要な違いは、次のように、1つ目と2つ目のリレーション・オペランドの間で発生する重複の処理方法にあります。

- EXCEPT演算子の結果は、1つ目のリレーションの要素で構成されるリレーションになり、2つ目のリレーションでも検出された要素はその検出数まで削除されます。つまり、ある要素が1つ目のリレーションでm回発生し、2つ目のリレーションでn回発生する場合、結果におけるその要素の数はmからnを引いた数となり、nがmより多い場合は0になります。

- MINUS演算子の結果は、1つ目のリレーションの要素から2つ目のリレーションでも検出された要素を引いた要素で構成され、それぞれのリレーションでそれらの要素がいくつ検出されたかは関係ありません。MINUS演算子では、1つ目のリレーションで検出された重複要素も削除されるため、各重複項目は結果では一意になります。

次の例では、MINUS演算子について説明しています。それぞれがリレーションR1とR2の場合、MINUS問合せq1はリレーションを返します。

<query id="q1BBAQuery"><![CDATA[
R1 MINUS R2
]]></query>

Timestamp   Tuple Kind  Tuple
1500:       +           10,40
1800:       +           10,30
2000:       +           10,40
2000:       +           10,40
2100:       -           10,40
3000:       -           10,30

Timestamp   Tuple Kind  Tuple
1000:       +           11,20
2000:       +           10,40
3000:       -           10,30

Timestamp   Tuple Kind  Tuple
1500:       +           10,40
1800:       +           10,30
2000:       -           10,40

次の例では、EXCEPT演算子について説明しています。それぞれがリレーションR1とR2の場合、EXCEPT問合せq1はリレーションを返します。

<query id="exceptQuery"><![CDATA[
R1 EXCEPT R2
]]></query>

Timestamp   Tuple Kind  Tuple
1500:       +           10,40
1800:       +           10,30
2000:       +           10,40
2000:       +           10,40
2100:       -           10,40
3000:       -           10,30

Timestamp   Tuple Kind  Tuple
1000:       +           11,20
2000:       +           10,40
3000:       -           10,40

Timestamp   Tuple Kind  Tuple
1500:       +           10,40
1800:       +           10,30
2000:       +           10,40
2000:       -           10,40

BINARYの例: INとNOT IN

この使用方法では、問合せはバイナリの問合せになります。

in_condition_set::=

注意:

「メンバーシップ条件としてのINとNOT INの使用」で説明しているように、この使用方法はin_condition_membershipと組み合せることはできません。

ビューV3およびV4、問合せQ1、データ・ストリームS3 (スキーマ(c1 integer, c2 integer))およびS4 (スキーマ(c1 integer, c2 integer))があるとします。この条件テストでは、左のリレーションの属性の数およびデータ型は、右のリレーションの属性の数およびデータ型と同じである必要があります。次の例は、問合せが返すリレーションを示しています。

<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>

Timestamp   Tuple
1000        10, 30
1000        10, 40
2000        11, 20
3000        12, 40
3000        12, 30
3000        15, 50
h 2000000

Timestamp   Tuple
1000        10, 40
2000        10, 30
2000        12, 40
h 2000000

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の例

問合せq1について考えてみます。データ・ストリームSの場合、問合せはリレーションを返します。

<query id="q1"><![CDATA[
SELECT DISTINCT c1 FROM S WHERE c1 > 10
]]></query>

Timestamp   Tuple
1000       23
2000       14
3000       13
5000       22
6000       11
7000       10
8000        9
10000        8
11000        7
12000       13
13000       14

Timestamp   Tuple
1000        23
2000        14
3000        13
5000        22
6000        11

XMLTABLEの問合せの例

問合せq1とデータ・ストリームSがあるとします。ストリームSのスキーマは(c1 xmltype)です。この問合せはリレーションを返します。

XMLTABLEの詳細は、「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>

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>"

Timestamp   Tuple Kind  Tuple
3000:       +           <productName>Lawnmower</productName>,<quantity>1</quantity>
3000:       +           <productName>Baby Monitor</productName>,<quantity>1</quantity>

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

問合せq1とデータ・ストリームS1があるとします。ストリームS1のスキーマは(c1 xmltype)です。この問合せはリレーションを返します。

XMLTABLEの詳細は、「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>

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

Timestamp   Tuple Kind  Tuple
3000:       +     John,1
3000:       +     Jack,2
3000:       +     Jill,3

データ・カートリッジTABLEの問合せの例: イテレータ

メソッドgetIteratorを持つデータ・カートリッジ(MyCartridge)があるとします。

...
public static Iterator<Integer> getIterator() {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
return list.iterator();
}
...

問合せq1について考えてみます。データ・ストリームS0の場合、問合せはリレーションを返します。

<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>

Timestamp   Tuple
1           1, abc
2           2, ab
3           3, abc
4           4, a
h 200000000

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の問合せの例: 配列

メソッド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]);;
}
...

問合せq1について考えてみます。データ・ストリームS0の場合、問合せはリレーションを返します。

<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>

Timestamp   Tuple
1           1, abc
2           2, ab
3           3, abc
4           4, a
h 200000000

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の問合せの例: コレクション

メソッド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;
}
...

問合せq1について考えてみます。データ・ストリームS0の場合、問合せはリレーションを返します。

<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>

Timestamp   Tuple
1           1, abc
2           2, ab
3           3, abc
4           4, a
h 200000000

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問合せの例

ORDER BY句にストリームを入力して、重複するタイムスタンプを持つイベントをソートします。ORDER BYは入力がストリームの場合のみ有効で、同じタイムスタンプのイベント間のソートのみ行います。その出力は、ソートされたイベントを持つストリームです。

問合せq1について考えてみます。データ・ストリームS0の場合、問合せはリレーションを返します。この問合せでは、タイムスタンプが重複するイベントをタプル値により昇順でソートします。

<query id="q1"><![CDATA[
SELECT *
FROM S0
ORDER BY c1,c2 ASC
]]></query>

Timestamp   Tuple
1000        7, 15
2000        7, 14
2000        5, 23
2000        5, 15
2000        5, 15
2000        5, 25
3000        3, 12
3000        2, 13
4000        4, 17
5000        1, 9
h 1000000000

Timestamp   Tuple Kind  Tuple
1000:       +           7,15
2000:       +           5,15
2000:       +           5,15
2000:       +           5,23
2000:       +           5,25
3000:       +           2,13
3000:       +           3,19
4000:       +           4,17
5000:       +           1,9

ORDER BY ROWSの問合せの例

ORDER BY句にROWSキーワードを指定して使用すると、問合せから返されたイベントを出力に含めるかどうかを判断するための順序付け基準が使用されます。ORDER BY ROWSでは、ストリーム入力またはリレーション入力のいずれかを受け入れ、リレーションを出力します。

ORDER BY ROWS句では、最大サイズがROWSキーワードで指定された数であるイベントの集合が保持されます。新規イベントが受信されると、順序基準とROWS制限に基づいて評価され、出力に追加するかどうかが判断されます。

ORDER BY ROWSの出力は、ORDER BY句の出力のように、順序付け基準に基づいて並べられることはありません。かわりに、ORDER BY ROWSでは、順序付け基準と指定行数を使用して、イベントを受信どおりに出力に加えるかどうかが決められます。

問合せq1について考えてみます。データ・ストリームS0の場合、問合せはリレーションを返します。

<query id="q1"><![CDATA[
SELECT c1 ,c2
FROM S0
ORDER BY c1,c2 ROWS 5
]]></query>

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

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

次の例では、問合せでPARTITIONキーワードを使用して、イベントをソートし、出力サイズを制限するタプルのプロパティを指定しています。ここでは、PARTITIONキーにより、入力内のイベントがそれらのシンボル値に基づいて評価されるように指定します。

すなわち、出力にイベントを含めるかどうかを判断する際、問合せでは出力内で同じシンボルを持つ既存のイベント・セットを調べます。ROWS制限は2で、これは問合せでイベント数が2つまでのソート済イベント・セットが保持されることを意味します。たとえば、ORCLシンボルを持つイベントがすでに2つある場合、もう1つのORCLイベントを出力に追加するには、出力内でORCLシンボルを持つ最も古い要素を削除する必要があります。

また、問合せでは、値のプロパティによってイベントの順序付けを行うため、新しいイベントの出力を検討する際にもプロパティが検討されます。ここでは、DESCキーワードは、イベントが降順に並べられることを指定します。新しいイベントは、出力セット内にすでに存在するイベントの後にない場合、出力には含まれません。

<query id="q1"><![CDATA[
SELECT symbol, value
FROM S0
ORDER BY value DESC ROWS 2
PARTITION BY symbol
]]></query>

Timestamp   Tuple
1000        ORCL, 500
1100        MSFT, 400
1200        INFY, 200
1300        ORCL, 503
1400        ORCL, 509
1500        ORCL, 502
1600        MSFT, 405
1700        INFY, 212
1800        INFY, 209
1900        ORCL, 512
2000        ORCL, 499
2100        MSFT, 404
2200        MSFT, 403
2300        INFY, 215
2400        MSFT, 415
2500        ORCL, 499
2600        INFY, 211

Timestamp    Tuple Kind    Tuple
1000         +             ORCL,500
1100         +             MSFT,400
1200         +             INFY,200
1300         +             ORCL,503
1400         -             ORCL,500
1400         +             ORCL,509
1600         +             MSFT,405
1700         +             INFY,212
1800         -             INFY,200
1800         +             INFY,209
1900         -             ORCL,503
1900         +             ORCL,512
2100         -             MSFT,400
2100         +             MSFT,404
2300         -             INFY,209
2300         +             INFY,215
2400         -             MSFT,404
2400         +             MSFT,415

16.3 ビュー

目的

後続のOracle CQL文のidentifierで参照される、基本のストリームまたはリレーションに対するビューを作成するには、view文を使用します。

前提条件

詳細は、次を参照してください。

- 問合せ

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

構文

次の例に示すように、<view></view>要素でビューを表します。

view要素は2つの属性を持ちます。

- id: view要素のid属性としてidentifierを指定します。
id値は、「図7-6」で指定された仕様に準拠する必要があります。

- schema: オプションで、属性名のスペース区切りリストとしてviewのスキーマを指定します。
Oracle Event Processingサーバーではタイプが推測されます。

<view id="v2" schema="cusip bid ask"><![CDATA[
IStream(select * from S1[range 10 slide 10])
]]></view>

ビュー本体の構文は問合せと同じです。詳細は、問合せを参照してください。

例

次の例では、この文でサポートされる様々なセマンティクスを示します。詳細は、「Oracle CQLの問合せ、ビューおよび結合」を参照してください。

次の例に、ビューv2を登録する方法を示します。

図16-1 ビュー登録の例

<view id="v2" schema="cusip bid ask"><![CDATA[
IStream(select * from S1[range 10 slide 10])
]]></view>