Sample 0106 - Using in-memory event tables
Introduction
This sample demonstrates how to set up an execution plan to filter out credit card transactions that makes use of an in-memory event table to identify blacklisted transactions. This sample uses Event simulator for inputs and the logger publisher for logging the outputs to the CEP console.
The execution plan used in this sample are as follows:
define table CardUserTable (name string, cardNum string, blacklisted bool) ;
Given above is the table definition,
- Defines a table namedÂ
CardUserTable
with the given attributes. This is by default an in-memory table.Â
from CardUserStream select * insert into CardUserTable;
The first query,
- Processes the events received through theÂ
CardUserStream
. - Selects all the attributes under theÂ
select
 clause, from each event received. - Inserts it to the
CardUserTable
.
from BlackListStream select cardNo as cardNum, true as blacklisted update CardUserTable on cardNum == CardUserTable.cardNum;
The second query,
- Processes the events received through the
BlackList
Stream
. - Selects cardNo and renames it as cardNum, introduces a new attribute named blacklisted with the value 'true' under theÂ
select
 clause, for each event received. - Updates the CardUserTable with the condition cardNum == CardUserTable.cardNum. Here the
blacklisted
attribute in the table will be updated with the new value.
from PurchaseStream#window.length(1) as p join CardUserTable as c on p.cardNo == c.cardNum and c.blacklisted == false select p.cardNo as cardNo, c.name as name, p.price as price insert into WhiteListPurchaseStream ;
The third query,
- Defines a length window that keeps 1 event of the input streamÂ
PurchaseStream
. - Joins it with the
CardUserTable
with the condition p.cardNo == c.cardNum and c.blacklisted == false. In this condition, the events with blacklisted == true in the table gets filtered out and then the remaining events will be joined based on the card number. - Emits those events as output events through the
WhiteListPurchaseStream
.
from DeleteAllUsers delete CardUserTable on deleteAll == true;
The last query is used to clean up the table from an external trigger event through DeleteAllUsers stream,
- It processes the events received through the DeleteAllUsers.
- Checks for the condition deleteAll == true and if it's true, deletes all the records in the CardUserTable.Â
Prerequisites
Set up the prerequisites required for all samples.
Building the sample
Start the WSO2 CEP server with the sample configuration numbered 0106. For instructions, see Starting sample CEP configurations. This sample configuration does the following:
- Points the default Axis2 repo toÂ
<CEP_HOME>/samples/cep/artifacts/0106
 (by default, the Axis2 repo isÂ<CEP_HOME>/repository/deployment/server
).
Executing the sample
Log into the CEP management console which is located at https://localhost:9443/carbon.
Â
- Go to Tools -> Event Simulator. Under the Multiple Events section, you can see 4 files listed there which contains some sample data as follows.
The userEvents.csv file contains sample data that is used to fill the in-memory CardUserTable. Click play start sending events to fill the table.
- The blackListUserEvents.csv file contains sample data that is used to mark user entries in CardUserTable as blacklisted. Click Play to start sending blacklisted events and mark some table entries as blacklisted.
- The purchaseEvents.csv contains credit card transactions data. Play it and send the transaction data.Â
After sending sample events from purchaseEvents.csv, you will be able to see the outputs as follows.