OEP製品技術資料 - CQL

Preview:

DESCRIPTION

OEP製品のトレーニング資料: 本スライドでは、CQLについてご理解頂けます。

Citation preview

<Insert Picture Here>

Oracle Complex Event Processing 11g

プログラミングモデルにおけるCQL

日本オラクル株式会社Fusion Middleware 事業統括本部

<Insert Picture Here>

Agenda

• CQLの重要性

• CQLのコンセプト

•基本パターン

Copyright© 2012, Oracle. All rights reserved.

CQLの重要性

• 標準化• 行ベースのパターンマッチング仕様は既に公開されている

• ANSIへ標準化としての申請中

• 形式的な(そして完全な)モデルを開発

• リレーショナルモデルにおける厳格さをイベントストリームの処理へ拡張

Copyright© 2012, Oracle. All rights reserved.

へ拡張

• より幅広いアプリケーションでのより強いインプリメンテーションの結果

オラクルとCQLの歴史

• ”連続的な”問い合わせ言語を完成させるためのイニシアティブ

• SQL 99仕様における “継続的な”問い合わせの拡張として開始される• スタンフォード大学での研究がベース

• 業界標準としてのディスカッション

Copyright© 2012, Oracle. All rights reserved.

• 業界標準としてのディスカッション• Event Processing Technical Society (EPTS)

• ANSI SQL

• OMG

• 現在の採用状況• CQL パターンマッチング として ANSI SQL 標準化への提案

• Oracle, IBM, スタンフォード大学

• OpenSourceにおけるCQLの採用

• Oracle Complex Event Processor (CEP) のリリース

CEP で使用されている言語

inference

rules

ECA

State-oriented

SQL-idioms

TIBCO

Streambase

Oracle CEP

Oracle CEP

Copyright© 2012, Oracle. All rights reserved.

Script-oriented

Agent-oriented

Apama

RuleCore

AgentLogic

IBM (AptSoft)

Source: EPTS/DEBS Tutorial 2009

<Insert Picture Here>

Agenda

• CQLの重要性

• CQLのコンセプト

•基本パターン

• 集約やパターンマッチング

Copyright© 2012, Oracle. All rights reserved.

CQLのコンセプト

• “連続的な”問い合わせをサポートするリレーショナルモデルの拡張• 時間、ストリームとリレーション時間、ストリームとリレーション時間、ストリームとリレーション時間、ストリームとリレーションを記述する形式的なモデル

• イベントストリームに対する”ウィンドウ”の定義が可能• 時間やカウントでの制限 (APIで拡張可能)

• 値ベースのパーティション化

Copyright© 2012, Oracle. All rights reserved.

• 値ベースのパーティション化

• バッチもしくは増分処理

• 問い合わせを適用する”ワーキングセット”の定義• イベントのフィルタリング、集約、相関

• パターンマッチングの追加• トラック/トレースシナリオのサポート(例:消失イベント検出)

• 無制限のデータ・カートリッジによるドメイン固有の拡張性

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

SELECT *

FROM stream [NOW]

WHERE attribute = ‘value’

STREAM 演算子

WINDOW 演算子

Copyright© 2012, Oracle. All rights reserved. 8

WHERE attribute = ‘value’

CQL – ストリームとリレーション

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

• これらの演算子は、入力として1以上のリレーションを取得し(特定の演算子によると)、 出力としてリレーションを生成する

• 例:Join, Select(フィルタ)

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

• これらの演算子は入力としてストリームを取得し、出力としてリレーションを生成する

• CQLは6つのウィンドウをサポート:

Copyright© 2012, Oracle. All rights reserved.

• CQLは6つのウィンドウをサポート:

• Time, Row, Partition, Predicate, Extensible や Landmark

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

• これらの演算子は入力としてリレーションを取得し、出力としてストリームを生成する

• CQLは3つのリレーションからストリームへの演算子をサポート:

• 挿入ストリーム (IStream),

• 削除ストリーム (DStream),

• リレーションストリーム (RStream).

演算子

ISTREAM | DSTREAM | RSTREAM

(

SELECT acct, sum(amt) AS total

FROM Transactions

[PARTITION BY acct ROWS 5 RANGE 5]

GROUP BY acct

)

ストリーム To リレーション演算子

リレーション To ストリーム演算子

Copyright© 2012, Oracle. All rights reserved.

timestamp acct amt

1 100 1.25

2 200 2.50

3 300 6.75

トランザクションとしてのストリーム

timestamp -> schema (acct, amt)

トランザクションをサマリーしたストリーム

timestamp-> schema (acct, total)

タイムスタンプは、システムもしくはアプリケーションで定義される

“時間によって変化する”リレーション

時間ベースとタプルベースのウィンドウ比較

E1 E2 E3 E4

Copyright© 2012, Oracle. All rights reserved.

Event1から Event4は、 time1 と time7 の間で発生します

t1 t3t2 t4 t6t5 t7 時間

一定の時間間隔

時間ベースとタプルベースのウィンドウ比較

E1 E2 E3 E4

時間ベースのウィンドウ

Copyright© 2012, Oracle. All rights reserved.

t1 t3t2 t4 t6t5 t7 時間

• 一定の時間間隔

• リレーション内のイベント数は変化

• イベントは時間が経つとリレーションから外れる

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

CQL: SELECT * FROM MyEvent [RANGE 3 SECONDS]

時間ベースとタプルベースのウィンドウ比較

E1 E2 E3 E4

時間ベースのウィンドウ

一定の時間間隔

Copyright© 2012, Oracle. All rights reserved.

t1 t3t2 t4 t6t5 t7 時間

• 一定の時間間隔

• リレーション内のイベント数は変化

• イベントは時間が経つとリレーションから外れる

CQL: SELECT * FROM MyEvent [RANGE 3 SECONDS]

時間ベースとタプルベースのウィンドウ比較

E1 E2 E3 E4

時間ベースのウィンドウ

一定の時間間隔

Copyright© 2012, Oracle. All rights reserved.

t1 t3t2 t4 t6t5 t7 時間

• 一定の時間間隔

• リレーション内のイベント数は変化

• イベントは時間が経つとリレーションから外れる

CQL: SELECT * FROM MyEvent [RANGE 3 SECONDS]

時間ベースとタプルベースのウィンドウ比較

E1 E2 E3 E4

時間ベースのウィンドウ

一定の時間間隔

Copyright© 2012, Oracle. All rights reserved.

t1 t3t2 t4 t6t5 t7 時間

• 一定の時間間隔

• リレーション内のイベント数は変化

• イベントは時間が経つとリレーションから外れる

CQL: SELECT * FROM MyEvent [RANGE 3 SECONDS]

時間ベースとタプルベースのウィンドウ比較

E1 E2 E3 E4

タプルベースのウィンドウ一定のイベント数

Copyright© 2012, Oracle. All rights reserved.

t1 t3t2 t4 t6t5 t7 時間

• リレーション内のイベント数は一定

• イベントはリレーションから置き換わるまで失効しない

CQL: SELECT * FROM MyEvent [ROWS 2]

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

時間ベースとタプルベースのウィンドウ比較

E1 E2 E3 E4

タプルベースのウィンドウ一定のイベント数

Copyright© 2012, Oracle. All rights reserved.

t1 t3t2 t4 t6t5 t7

• リレーション内のイベント数は一定

• イベントはリレーションから置き換わるまで失効しない

CQL: SELECT * FROM MyEvent [ROWS 2]

時間

一定のイベント数

時間ベースとタプルベースのウィンドウ比較

E1 E2 E3 E4

タプルベースのウィンドウ

Copyright© 2012, Oracle. All rights reserved.

t1 t3t2 t4 t6t5 t7

• リレーション内のイベント数は一定

• イベントはリレーションから置き換わるまで失効しない

CQL: SELECT * FROM MyEvent [ROWS 2]

時間

増分とバッチのウィンドウ比較

• イベントは継続的にウィンドウに入り、出る

• イベントは増分もしくはバッチで処理されるN

• 増分• 問い合わせはそれぞれの変化毎に評価される

• バッチ

Copyright© 2012, Oracle. All rights reserved.

• 問い合わせは定義した変更数が発生した時にだけ評価される

• 増分処理はCQLのデフォルト処理

スライディングとバッチのウィンドウ比較

入力入力入力入力 出力出力出力出力

Prices1 Sum1

Prices2

Prices3

Prices4

入力入力入力入力 出力出力出力出力

Prices1

Prices2

Prices3

Prices4

3イベントの集計を計算

増分ウィンドウ バッチウィンドウ

Copyright© 2012, Oracle. All rights reserved.

Prices4

Prices5

Prices6

Prices7

Prices4

Prices5

Prices6

Prices7

SELECT SUM(price)

FROM Prices [ROWS 3]

SELECT SUM(price)

FROM Prices [ROWS 3 SLIDE 3]CQL

スライディングとバッチのウィンドウ比較

入力入力入力入力 出力出力出力出力

Prices1 Sum1

Prices2 Sum1+2

Prices3

Prices4

入力入力入力入力 出力出力出力出力

Prices1

Prices2

Prices3

Prices4

3イベントの集計を計算

増分ウィンドウ バッチウィンドウ

Copyright© 2012, Oracle. All rights reserved.

Prices4

Prices5

Prices6

Prices7

Prices4

Prices5

Prices6

Prices7

SELECT SUM(price)

FROM Prices [ROWS 3]

SELECT SUM(price)

FROM Prices [ROWS 3 SLIDE 3]CQL

スライディングとバッチのウィンドウ比較

入力入力入力入力 出力出力出力出力

Prices1 Sum1

Prices2 Sum1+2

Prices3 Sum1+2+3

Prices4

入力入力入力入力 出力出力出力出力

Prices1

Prices2

Prices3 Sum1+2+3

Prices4

3イベントの集計を計算

増分ウィンドウ バッチウィンドウ

Copyright© 2012, Oracle. All rights reserved.

Prices4

Prices5

Prices6

Prices7

Prices4

Prices5

Prices6

Prices7

SELECT SUM(price)

FROM Prices [ROWS 3]

SELECT SUM(price)

FROM Prices [ROWS 3 SLIDE 3]CQL

スライディングとバッチのウィンドウ比較

入力入力入力入力 出力出力出力出力

Prices1 Sum1

Prices2 Sum1+2

Prices3 Sum1+2+3

Prices4 Sum2+3+4

入力入力入力入力 出力出力出力出力

Prices1

Prices2

Prices3 Sum1+2+3

Prices4

3イベントの集計を計算

増分ウィンドウ バッチウィンドウ

Copyright© 2012, Oracle. All rights reserved.

Prices4 Sum2+3+4

Prices5

Prices6

Prices7

Prices4

Prices5

Prices6

Prices7

SELECT SUM(price)

FROM Prices [ROWS 3]

SELECT SUM(price)

FROM Prices [ROWS 3 SLIDE 3]CQL

スライディングとバッチのウィンドウ比較

入力入力入力入力 出力出力出力出力

Prices1 Sum1

Prices2 Sum1+2

Prices3 Sum1+2+3

Prices4 Sum2+3+4

入力入力入力入力 出力出力出力出力

Prices1

Prices2

Prices3 Sum1+2+3

Prices4

3イベントの集計を計算

増分ウィンドウ バッチウィンドウ

Copyright© 2012, Oracle. All rights reserved.

Prices4 Sum2+3+4

Prices5 Sum3+4+5

Prices6

Prices7

Prices4

Prices5

Prices6

Prices7

SELECT SUM(price)

FROM Prices [ROWS 3]

SELECT SUM(price)

FROM Prices [ROWS 3 SLIDE 3]CQL

スライディングとバッチのウィンドウ比較

入力入力入力入力 出力出力出力出力

Prices1 Sum1

Prices2 Sum1+2

Prices3 Sum1+2+3

Prices4 Sum2+3+4

入力入力入力入力 出力出力出力出力

Prices1

Prices2

Prices3 Sum1+2+3

Prices4

3イベントの集計を計算

増分ウィンドウ バッチウィンドウ

Copyright© 2012, Oracle. All rights reserved.

Prices4 Sum2+3+4

Prices5 Sum3+4+5

Prices6 Sum4+5+6

Prices7

Prices4

Prices5

Prices6 Sum4+5+6

Prices7

SELECT SUM(price)

FROM Prices [ROWS 3]

SELECT SUM(price)

FROM Prices [ROWS 3 SLIDE 3]CQL

スライディングとバッチのウィンドウ比較

入力入力入力入力 出力出力出力出力

Prices1 Sum1

Prices2 Sum1+2

Prices3 Sum1+2+3

Prices4 Sum2+3+4

入力入力入力入力 出力出力出力出力

Prices1

Prices2

Prices3 Sum1+2+3

Prices4

3イベントの集計を計算

増分ウィンドウ バッチウィンドウ

Copyright© 2012, Oracle. All rights reserved.

Prices4 Sum2+3+4

Prices5 Sum3+4+5

Prices6 Sum4+5+6

Prices7 Sum5+6+7

Prices4

Prices5

Prices6 Sum4+5+6

Prices7

SELECT SUM(price)

FROM Prices [ROWS 3]

SELECT SUM(price)

FROM Prices [ROWS 3 SLIDE 3]CQL

<Insert Picture Here>

Agenda

• CQLの重要性

• CQLのコンセプト

•一般的なパターン

Copyright© 2012, Oracle. All rights reserved.

1. イベント・フィルタリング

• 課題:

• ストリーム上の特定のデータを探し、不要なデータをなくす

• シナリオ:

• STOCKSTREAMを株式イベント(symbol,lastBid,last,Ask)のストリームとみなす

Copyright© 2012, Oracle. All rights reserved.

リームとみなす

• 全ての株式から株式表示記号が’AAA’のものを探す

1. イベント・フィルタリング

時間 入力 出力

1 {“AAA”, 10.0, 10.5} {“AAA”, 10.0, 10.5}

Copyright© 2012, Oracle. All rights reserved. 29

1

2

3

{“AAA”, 10.0, 10.5} {“AAA”, 10.0, 10.5}

{“BBB”, 11.0, 12.5}

1. イベント・フィルタリング

• 解答:

SELECT *

FROM stockstream [NOW]

WHERE symbol = ‘AAA’

STREAM ソースの指定

WINDOW 演算子の指定

Copyright© 2012, Oracle. All rights reserved.

フィルタリングの述語を定義

1. イベント・フィルタリング

• なぜウィンドウ演算子 [NOW]が必要なのか?

• フィルタリングはリレーションで機能するので、株式のストリームをリレーションに変換する必要がある

• いくつかのケースでは省略することも可能です

• 例:いくつかのクエリーではストリームで実行可能

Copyright© 2012, Oracle. All rights reserved.

• 例:いくつかのクエリーではストリームで実行可能

• SELECT * FROM stockstream

2. 新しいイベントの検出

• 課題:

• ストリーム上の特定のデータを探し、新しいデータである場合に通知する

• シナリオ:

• 価格が変更された最後の株式イベントだけをレポートする

Copyright© 2012, Oracle. All rights reserved.

• 価格が変更された最後の株式イベントだけをレポートする

2. 新しいイベントの検出

時間 入力 出力

1 {“AAA”, 10.0, 10.5} {“AAA”, 10.0, 10.5}

Copyright© 2012, Oracle. All rights reserved. 33

1

2

3

{“AAA”, 10.0, 10.5} {“AAA”, 10.0, 10.5}

{“AAA”, 10.0, 10.5}

{“BBB”, 11.0, 12.5} {“BBB”, 11.0, 12.5}

2. 新しいイベントの検出

• SELECT * FROM stockstream [NOW]

• 生成されるのはリレーション?ストリーム?

• リレーション(時間 t にすべてのイベントを含む)を生成

• 時間tに存在し、時間( t - 1 )には存在しないイベント

• リレーションからストリームへの演算子ISTREAM(挿入ストリーム)

を使用

Copyright© 2012, Oracle. All rights reserved. 34

を使用

• 最後のイベントについて調べたいので、[NOW]の代わりにウィンドウ演算子[ROWS 1]を使用

2. 新しいイベントの検出

• 回答:

ISTREAM(

SELECT *

FROM stockstream [ROWS 1]

)

Copyright© 2012, Oracle. All rights reserved. 35

)

3. イベント・パーティショニング

• 2の回答における課題

時間 入力 出力

t=2のイベントと同じように見えるが、 t=3のイベントによって”!=”となっている

Copyright© 2012, Oracle. All rights reserved. 36

1

2

3

4

{“AAA”, 10.0, 10.5} {“AAA”, 10.0, 10.5}

{“AAA”, 10.0, 10.5}

{“BBB”, 11.0, 12.5}

{“AAA”, 10.0, 10.5} {“AAA”, 10.0, 10.5}

{“BBB”, 11.0, 12.5}

3. イベント・パーティショニング

• 株式表示記号によってウィンドウを分割する必要がある

ISTREAM (

SELECT *

FROM stockstream

[PARTITION BY symbol ROWS 1]

Copyright© 2012, Oracle. All rights reserved. 37

[PARTITION BY symbol ROWS 1]

)

3. イベント・パーティショニング

時間 入力 出力

1 {“AAA”, 10.0, 10.5} {“AAA”, 10.0, 10.5}

Copyright© 2012, Oracle. All rights reserved.

1

2

3

4

{“AAA”, 10.0, 10.5}

{“BBB”, 11.0, 12.5}

{“AAA”, 10.0, 10.5}

{“BBB”, 11.0, 12.5}

4. 古いイベントの検出

• 課題:

• ストリーム上から特定のデータを探し、もしそれが削除されたら通知する

• シナリオ:

• 株式表示記号毎の株価が古くなったらレポートする

Copyright© 2012, Oracle. All rights reserved. 39

• 株式表示記号毎の株価が古くなったらレポートする

4. 古いイベントの検出

時間 入力 出力

1 {“AAA”, 10.0, 10.5}

Copyright© 2012, Oracle. All rights reserved.

2

3

4

{“AAA”, 11.0, 12.5} {“AAA”, 10.0, 10.5}

{“BBB”, 11.0, 12.5}

{“BBB”, 10.0, 10.5} {“BBB”, 11.0, 12.5}

4. 古いイベントの検出

• 削除されたイベント、すなわち、時間( t - 1 ) に存在し時間t に存在しないイベントだけを含むストリームが必要

• リレーションからストリームへの演算子:DSTREAM(削除ストリーム)を使用

DSTREAM (

SELECT *

Copyright© 2012, Oracle. All rights reserved.

SELECT *

FROM stockstream

[PARTITION BY symbol ROWS 1]

)

5. イベントの拡充

• 課題:

• リレーションからの静的なデータで、ストリームからのイベントを拡充する.

• シナリオ:

Copyright© 2012, Oracle. All rights reserved. 42

• STOCKRELATION (リレーション)を次とみなす:

symbol,

company full-name,

headquarters' location

• lastBidが5.0より大きいSTOCKSTREAMからの株式のイベントごとに、その会社の場所を見つける

5. イベントの拡充

株式表示記号 正式名称 所在地

AAA The AAA company San Francisco

BBB The BBB company San Jose

STOCKRELATION

クエリーは、リレーションではなく、ストリームによって引き起こされる

Copyright© 2012, Oracle. All rights reserved.

時間 入力 (STOCKSTREAM) 出力 (QUERY)

1

2

3

{“AAA”, 10.0, 10.5} {“AAA”, “San Francisco”}

{“BBB”, 11.0, 12.5} {“BBB”, “San Jose”}

{“AAA”, 4.0, 4.5}

5. イベントの拡充

• 解答:

SELECT event.symbol, location

FROM stockstream [NOW] AS event,

stockrelation AS data

WHERE event.symbol = data.symbol AND

event.lastBid > 5.0

Copyright© 2012, Oracle. All rights reserved.

event.lastBid > 5.0

� なぜリレーションではなく、ストリームにウィンドウ演算子を指定したのでしょう?

� リレーションは瞬間的なので、既に時間t に固定されている

6. イベントの集約とグルーピング

•ユースケース:•株式表示記号毎の最新2ティックにおける価格の移動平均を計算•数量が1000を超える価格だけを含む

CQL

Copyright© 2012, Oracle. All rights reserved.

REGISTER VIEW StockTickMinVolumeView (symbol char(10), volume integer, price float) AS

SELECT symbol, volume, price FROM CqlxStockTick WHERE volume > 1000

CREATE QUERY MovingAvg AS

SELECT symbol, AVG(price) as average

FROM StockTickMinVolumeView [PARTITION BY symbol ROWS 2]

GROUP BY symbol

ウィンドウの前にフィルタリングCQL –ビューを使用する

6. イベントの集約とグルーピング

Input (StockTick) Output (MovingAvg)

symbol price volume symbol average

REGISTER VIEW StockTickMinVolumeView (symbol char(10), volume integer, price float) AS

SELECT symbol, volume, price FROM CqlxStockTick WHERE volume > 1000

CREATE QUERY MovingAvg AS

SELECT symbol, AVG(price) as average

FROM StockTickMinVolumeView [PARTITION BY symbol ROWS 2]

GROUP BY symbol

Copyright© 2012, Oracle. All rights reserved.

symbol price volume symbol average

GOOG 500.0 4200 GOOG 500.0

ORCL 25.0 2000

ORCL 27.0 500

GOOG 520.0 5000

ORCL 23.0 1500

6. イベントの集約とグルーピング

Input (StockTick) Output (MovingAvg)

symbol price volume symbol average

REGISTER VIEW StockTickMinVolumeView (symbol char(10), volume integer, price float) AS

SELECT symbol, volume, price FROM CqlxStockTick WHERE volume > 1000

CREATE QUERY MovingAvg AS

SELECT symbol, AVG(price) as average

FROM StockTickMinVolumeView [PARTITION BY symbol ROWS 2]

GROUP BY symbol

Copyright© 2012, Oracle. All rights reserved.

symbol price volume symbol average

GOOG 500.0 4200

ORCL 25.0 2000 ORCL 25.0

ORCL 27.0 500

GOOG 520.0 5000

ORCL 23.0 1500

6. イベントの集約とグルーピング

Input (StockTick) Output (MovingAvg)

symbol price volume symbol average

REGISTER VIEW StockTickMinVolumeView (symbol char(10), volume integer, price float) AS

SELECT symbol, volume, price FROM CqlxStockTick WHERE volume > 1000

CREATE QUERY MovingAvg AS

SELECT symbol, AVG(price) as average

FROM StockTickMinVolumeView [PARTITION BY symbol ROWS 2]

GROUP BY symbol

Copyright© 2012, Oracle. All rights reserved.

symbol price volume symbol average

GOOG 500.0 4200

ORCL 25.0 2000

ORCL 27.0 500

GOOG 520.0 5000

ORCL 23.0 1500

6. イベントの集約とグルーピング

Input (StockTick) Output (MovingAvg)

symbol price volume symbol average

REGISTER VIEW StockTickMinVolumeView (symbol char(10), volume integer, price float) AS

SELECT symbol, volume, price FROM CqlxStockTick WHERE volume > 1000

CREATE QUERY MovingAvg AS

SELECT symbol, AVG(price) as average

FROM StockTickMinVolumeView [PARTITION BY symbol ROWS 2]

GROUP BY symbol

Copyright© 2012, Oracle. All rights reserved.

symbol price volume symbol average

GOOG 500.0 4200

ORCL 25.0 2000

ORCL 27.0 500

GOOG 520.0 5000 GOOG 510

ORCL 23.0 1500

6. イベントの集約とグルーピング

Input (StockTick) Output (MovingAvg)

symbol price volume symbol average

REGISTER VIEW StockTickMinVolumeView (symbol char(10), volume integer, price float) AS

SELECT symbol, volume, price FROM CqlxStockTick WHERE volume > 1000

CREATE QUERY MovingAvg AS

SELECT symbol, AVG(price) as average

FROM StockTickMinVolumeView [PARTITION BY symbol ROWS 2]

GROUP BY symbol

Copyright© 2012, Oracle. All rights reserved.

symbol price volume symbol average

GOOG 500.0 4200

ORCL 25.0 2000

ORCL 27.0 500

GOOG 520.0 5000

ORCL 23.0 1500 ORCL 24.0

7. イベントのバッチング

• 課題:• ストリームからのいくつかの(単純な)イベントを、1つの新しい(複雑な)イベントに集約するが、1度に1つのイベントを処理する代わりにバッチで処理する

• シナリオ:• 5秒ごとに、直近の10秒の株価(bidとask)の平均を出力

Copyright© 2012, Oracle. All rights reserved. 51

• 5秒ごとに、直近の10秒の株価(bidとask)の平均を出力

7. イベントのバッチング

時間 入力 出力 (W/O BATCHING) 出力 (WITH BATCHING)

1s {“AAA”, 10.0, 12.0} {“AAA”, 10.0, 12.0}

AAAのイベントは、スライドウィンドウによって移動されているので、表示されない

Copyright© 2012, Oracle. All rights reserved.

4s

5s

9s

10s

{“AAA”, 12.0, 14.0}

{“AAA”, 11.0, 13.0}

{“BBB”, 4.0, 5.0}

{“BBB”, 4.0, 5.0}

{“AAA”, 11.0, 13.0}

{“AAA”, 11.0, 13.0}, {“BBB”, 4.0, 5.0}

7. イベントのバッチング

• 解答:SELECT symbol, AVG(lastBid), AVG(lastAsk)

FROM stockstream [RANGE 10 seconds SLIDE 5 seconds]

GROUP BY symbol

Copyright© 2012, Oracle. All rights reserved.

� RANGE演算子にSLIDEを指定できる

� デフォルトでは、1のSLIDE.

8. イベントの相関

• 課題:• 値の共通集合上で、1つあるいはいくつかのストリームからイベントを相関させる(これは一般的なパターン)

• シナリオ:• それぞれbid(symbol, bidPrice, customer) と ask(symbol,

askPrice, customer) を含むようにBIDSTREAM と

Copyright© 2012, Oracle. All rights reserved. 54

askPrice, customer) を含むようにBIDSTREAM とASKSTREAMを検討する

• AskによるBidの相関は同じ表示記号に関連し、互いに10秒以内に起きている;古いものなら、失効するとみなす

8. イベントの相関

時間 入力(BIDS) 入力(ASKS) 出力

1s {“AAA”, 12.0, cust1} {“BBB”, 9.0, cust2}

Copyright© 2012, Oracle. All rights reserved.

5s

15s

20s

{“AAA”, 10.0, cust3} {“AAA”, 10.0, cust2}

{“AAA”, 10.0, cust3, 10.0, cust2}

{“AAA”, 12.0, cust1, 10.0, cust2}

{“BBB”, 10.0, cust4} {“CCC”, 11.0, cust5} {“AAA”, 10.0, cust3, 10.0, cust2}

{“BBB”, 10.0, cust6} {“BBB”, 10.0, cust4, 10.0, cust6}

> 10s

8. イベントの相関

• 解答:

SELECT bid.symbol, bidPrice, bid.cust, askPrice, ask.cust,

FROM bidstream [RANGE 10 seconds] AS bid,

askstream [RANGE 10 seconds] AS ask

WHERE bid.symbol = ask.symbol

Copyright© 2012, Oracle. All rights reserved.

• 外部結合を含むストリーム間で、通常の結合操作を行うことができます

9. アプリケーション時間

• 課題:• CPUのwall-clockの代わりに、アプリケーション視点の時間を使用する必要があります

• イベントが異なる機器から発生し、何らかの方法で同期をする必要があるとき、これは非常に役に立ちます

• シナリオ:• 再び、bidとaskのストリームを検討するN

Copyright© 2012, Oracle. All rights reserved.

• しかし、bidやaskの注文は、注文が出された時点でのトレーダー側の時間です

9. アプリケーション時間

• 売り手は、2つのask リクエストをそれぞれ、8:00:00と8:00:12に出します。

• 買い手は、8:00:11に時間に1つのbid リクエストを出します

Copyright© 2012, Oracle. All rights reserved.

9. アプリケーション時間

• どのオーダー情報も古くなるので、10秒のウィンドウを使用して相関したいという要件を思い出して下さい。

• それゆえに、売り手からの最初のイベントは考慮されずに、11.0のask価格と9.5のbid価格に相関させなれればなりません

Copyright© 2012, Oracle. All rights reserved.

9. アプリケーション時間

• しかし、現実では、やりとりの中で最初の2つのイベントが同時に到着してしまい、3番目が遅れてしまう可能性がある

Copyright© 2012, Oracle. All rights reserved.

9. アプリケーション時間

• このケースでは、9.5のbid価格は10.0のask価格に相関し、より低いスプレッドでの為替差額が発生します

Copyright© 2012, Oracle. All rights reserved.

9. アプリケーション時間

• 解答:

• クエリーは変化なし

• しかし、ストリームはいくつかのイベントプロパティにおいて、システム・タイムスタンプの代わりに、アプリケーション・タイムスタンプを使用するように構成しなければならないN

Copyright© 2012, Oracle. All rights reserved.

BidEventType

symbol string

customer string

bidPrice float

orderTime dateTime

10. パターンマッチング

�複雑なイベントパターンを識別する強力な概念

�正規表現として定義される

PATTERN (X+ Y+)

1以上の X イベントN 1以上の Y イベントが続くN.

Copyright© 2012, Oracle. All rights reserved.

くN.

10. パターンマッチングの例株式取引 “W” パターン

X

YW

Z

Copyright© 2012, Oracle. All rights reserved.

SELECT FIRST(x.time), LAST(z.time)

FROM ticker MATCH_RECOGNIZE (ONE ROW PER MATCH PARTITION BY

name

PATTERN (X+ Y+ W+ Z+)

DEFINE X AS (price < PREV(price))

Y AS (price > PREV(price))

W AS (price < PREV(price))

Z AS (price > PREV(price)))

1 9 12 19

days

10. 消失イベント –時間による制限

SELECT

"DelayedShipment" as alertType,

orders.ts,

orders.orderId,

orders.amount

FROM OrderTracking MATCH_RECOGNIZE

(

PARTITION BY orderId

INCLUDE TIMER EVENTS

MEASURES一致を報告するのを待つために、非一致と期間をパターンに記述します

Copyright© 2012, Oracle. All rights reserved.

MEASURES

CustOrder.ts AS ts,

CustOrder.orderId AS orderId,

CustOrder.amount AS amount

PATTERN (CustOrder NotTheShipment*) DURATION 10 MINUTES

DEFINE

CustOrder AS (eventType = ‘O’),

NotTheShipment AS (eventType != ‘ S’)

) AS orders

期間をパターンに記述します

10. 消失イベント – イベントによる制限

SELECT

orders.orderId,

orders.amount,

"MissingApproval" as alertType

FROM OrderTracking MATCH_RECOGNIZE

(

PARTITION BY

orderId

Orderの直後がShipmentのイベントであるので、パターンは消失したApprovalを意味

します。このケースでは、消失したApprovalは明確に定義される必要はありません。

Copyright© 2012, Oracle. All rights reserved.

orderId

MEASURES

CustOrder.orderId AS orderId,

CustOrder.amount AS amount

PATTERN (CustOrder Shipment)

DEFINE

CustOrder AS (eventType = 'O'),

Shipment AS (eventType = 'S')

) AS orders

ません。

「他の」イベントタイプがOrderとShipment

の間に発生するならば、このアプローチは機能しない

10. 消失イベント – イベントによる制限

SELECT

orders.orderId,

orders.amount,

"MissingApproval" as alertType

FROM OrderTracking MATCH_RECOGNIZE

(

PARTITION BY

orderId

除外 ( すなわち Approval で ない すべて ) によって 、この パターン は、Approval を記述し ます。

このアプローチは、「他の」イベントタイプがOrderとShipmentの間に発生することが起こりえるならば機能します。*?演算子は「気乗りしない」(つまり、できるだけわずかなNotheApprovalと一致)ですこれは、ShipmentがNotTheApprovalとしてではなくShipmentとして一致することを

Copyright© 2012, Oracle. All rights reserved.

orderId

MEASURES

CustOrder.orderId AS orderId,

CustOrder.amount AS amount

PATTERN (CustOrder NotTheApproval*? Shipment)

DEFINE

CustOrder AS (eventType = 'O'),

NotTheApproval AS (NOT (eventType = 'A')),

Shipment AS (eventType = 'S')

) AS orders

可能にします

10. 消失イベントの検出

• PATTERN (CustOrder NotTheShipment*) DURATION

10 MINUTES

• パターンにマッチしないなら:

• 10分以内のshipment が顧客のOrderの後に続きます

• パターンにマッチするなら:

Copyright© 2012, Oracle. All rights reserved.

• パターンにマッチするなら:

• 10分にShipmentではない他の何かが、顧客のOrderの後に続きます

まとめ

• 最初に、いくつかのウィンドウ演算子を使ってストリームからリレーションに変換する• RANGE, RANGE m SLIDE n, NOW, ROW, など.

• リレーションを処理するときは、標準のRDBMSにおける演算子を使用する• Projection, join, filtering, union, etc.

Copyright© 2012, Oracle. All rights reserved.

• Projection, join, filtering, union, etc.

• 必要に応じて、最後にリレーションからストリームに戻す• ISTREAM, DSTREAM, RSTREAM

• そして忘れずに適切な時間領域をモデル化する

オラクルのミドルウェア関連情報

最新情報つぶやき中最新情報つぶやき中

OracleMiddle_jpOracleMiddle_jp

twitter.com/OracleMiddle_jp/

�最新情報最新情報最新情報最新情報

�おすすめ情報おすすめ情報おすすめ情報おすすめ情報

�セミナ情報セミナ情報セミナ情報セミナ情報

などなどなどなどなどなどなどなど

Copyright© 2012, Oracle. All rights reserved. 70

slideshare.net/slideshare.net/OracleMiddleJPOracleMiddleJP

�製品資料製品資料製品資料製品資料

�顧客事例顧客事例顧客事例顧客事例

�ホワイトペーパーホワイトペーパーホワイトペーパーホワイトペーパー

などなどなどなどなどなどなどなど

Copyright© 2012, Oracle. All rights reserved.

■パフォーマンス診断サービス

•Webシステム ボトルネック診断サービス

•データベースパフォーマンス 診断サービス

NEW

■システム構成診断サービス

•Oracle Database構成相談サービス

•サーバー統合支援サービス

•仮想化アセスメントサービス

•メインフレーム資産活用相談サービス

•BI EEアセスメントサービス

•簡易業務診断サービス

■バージョンアップ支援サービス

■移行支援サービス

•SQL Serverからの移行支援サービス

•DB2からの移行支援サービス

•Sybaseからの移行支援サービス

ITプロジェクト全般に渡る無償支援サービス

Oracle Direct Conciergeサービス

Copyright© 2012, Oracle. All rights reserved. 72

オラクル社のエンジニアが直接ご支援しますお気軽にご活用ください!

オラクル 無償支援 検索

■バージョンアップ支援サービス

•Oracle Databaseバージョンアップ支援サービス

•Weblogic Serverバージョンアップ支援サービス

•Oracle Developer/2000(Froms/Reports)Webアップグレード相談サービス

•MySQLからの移行支援サービス

•Postgre SQLからの移行支援サービス

•Accessからの移行支援サービス

•Oracle Application ServerからWeblogicへ移行支援サービス

NEW

NEW

インストールすることなく、すぐに体験いただけます

製品無償評価サービス提供シナリオ一例

・データベースチューニング

・アプリケーション性能・負荷検証

・無停止アップグレード

・Webシステム障害解析

1日5組限定!

• サービスご提供までの流れ

Copyright© 2012, Oracle. All rights reserved. 73

http://www.oracle.com/jp/direct/services/didemo-195748-ja.html

Web問い合わせフォーム「ダイデモ」をキーワードに検索することで申し込みホームページにアクセスできます

※サービスご提供には事前予約が必要です

• サービスご提供までの流れ

1. お問合せフォームより「製品評価サービス希望」と必要事項を明記し送信下さい

2. 弊社より接続方法手順書およびハンズオン手順書を送付致します

3. 当日は、弊社サーバー環境でインターネット越しに製品を体感頂けます

Oracle Direct 検索

あなたにいちばん近いオラクル

Oracle Directまずはお問合せくださいまずはお問合せください

システムの検討・構築から運用まで、ITプロジェクト全般の相談窓口としてご支援いたします。

システム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。

Copyright© 2012, Oracle. All rights reserved.

http://www.oracle.com/jp/direct/inquiry-form-182185-ja.html

Web問い合わせフォーム フリーダイヤル

専用お問い合わせフォームにてご相談内容を承ります。

※こちらから詳細確認のお電話を差し上げる場合がありますので、ご登録されている連絡先が最新のものになっているか、ご確認下さい。

0120-155-096

※月曜~金曜 9:00~12:00、13:00~18:00

(祝日および年末年始除く)

システム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。

Copyright© 2012, Oracle. All rights reserved.

Recommended