2種類のイベントを処理するルール定義です。フィルタールールと複合イベント処理ルールから構成されます。
2種類のイベントに対するフィルタールールです。
1 | on LocationEvent { |
以下は各行の説明です。
1行目
位置情報イベント(LocationEvent)に対するフィルタールールです。
2行目
検索式において、歩行中(statusが”1”)でエリアに登録された店舗が存在する(店舗マスタStoreInfoの中にareaIDが等しいものがある)イベントのみを抽出します。「$areaID == $areaID」の左辺は入力イベントのareaID、右辺はマスタデータのareaIDになります。
3行目
入力イベントに会員マスタの情報を付与するため、会員マスタMemberInfoのデータで会員IDが等しいものを結合処理します。
4行目
入力イベントに存在する会員ID、エリアIDに加え、会員マスタの年代情報をFilteredLocationEventとして出力します。
7行目
クーポンイベント(CouponEvent)に対するフィルタールールです。
8行目
店舗マスタStoreInfoのデータで店舗IDが等しいものを結合処理します。
9行目
入力イベントに存在する店舗ID、クーポンID、対象年代に加え、店舗マスタのエリアIDをFilteredCouponEventとして出力します。
フィルタールールで処理された、2種類のイベントに対する複合イベント処理ルールです。
1 | create window outEventWin.std:firstunique(memberID,couponID).win:time(3 min) |
以下は各行の説明です。
1行目
出力イベントを一定期間保持しておき、同じ人に同じクーポンを送らないようにするための名前付きウィンドウを作成する複合イベント処理文です。会員IDとクーポンIDのペアに対して1つずつ最初の出力イベントを保持します。一定時間(想定では30分ですが、サンプルでは3分)経過後にウィンドウから削除されます。
2行目
名前付きウィンドウに保持するイベントの形式を定義しています。
4行目
主処理を行う複合イベント処理文を定義します。その名前とEPL1としています。
5行目
主処理の出力を名前付きウィンドウに挿入します。
6行目
主処理の結果として、位置情報イベントの会員ID、クーポンイベントの店舗IDとクーポンIDを出力します。
7行目
主処理の入力の1つはFilteredLocationEventに対するものです。unidirectionalの指定により、このイベントの受信を契機にこの処理が動作します(FilteredCouponEventは契機とならない)。
8行目
主処理のもう1つの入力はFilteredCouponEventです。このイベントは一定時間(想定では30分ですが、サンプルでは3分)だけメモリ中に保持され、FilteredLocationEventに結合されます。
9行目
FilteredLocationEventとFilteredCouponEventの結合の条件はareaIDが等しく、age(targetAge)が等しいことです。
11行目
EPL1(5行目~)の処理結果を出力するための複合イベント処理文です。名前をEPL2としています。
12行目
デバッグログリスナを付与することによって、出力イベントがエンジンログに出力されます。
13行目
名前付きウィンドウに新たに登録されたイベントだけが出力されます。名前付きウィンドウに複数の同一イベントが挿入されても(create windowでの)std:firstunique指定により実際に登録されるのは最初のイベントだけとなります。
15~17行目
フィルター処理後の位置情報イベント(FilteredLocationEvent)をデバッグログ出力するための複合イベント処理文です。フィルター処理の確認を行うためのものであり、削除しても構いません。
19~21行目
フィルター処理後のクーポンイベント(FilteredCouponEvent)をデバッグログ出力するための複合イベント処理文です。フィルター処理の確認を行うためのものであり、削除しても構いません。