0

次の形式の行を含むテキスト ファイルがあります。

XYZ 120 
ABC 200 
...

基本的に、1 つの 3 文字の文字列と整数値。形式は変わりませんが、整数の値はイベントによって異なります。

このファイルの情報をエンジンに保存して、EPL ステートメントで使用できるようにしたいと考えています。着信イベントを自分のリストと比較し、特定の条件が発生したときに行動できるようにしたいと考えています。

つまり、イベントが発生するたびに、データをチェックしてリストにあるかどうかを確認します。イベントにコード XYZ があるとします。コードがあることを確認し、操作を実行して XYZ の整数値を変更します。ファイルを更新する必要はありません。これは、データをエンジンにフィードするための単なる手段です。

これにはいくつかの方法があると思いますが、それらの実装をどのように完了し、どれがベスト プラクティスであるかはわかりません。

オプション 1: で説明されているようにメソッド呼び出しを使用する

5.14. Accessing Non-Relational Data via Method, Script or UDF Invocation

メソッドとメタデータの提供に関する指示に従いましたが、EPL ステートメント内で返されたデータを反復処理する方法について非常に混乱していますか? 私のメソッドの戻り値は次のとおりです。

Collection<MyStock> stocks 

ここで、MyStock は [文字列、整数] のペアです。

where event.code = stocks.code 

在庫はコレクションであるため、明らかに機能しません

では、EPL 内でコレクションを反復処理するにはどうすればよいでしょうか。

オプション 2: または、おそらくファイルをマップにフィードし、そのマップを変数としてエンジンに保存できますか?

ここでも繰り返しに行き詰まります。私は、これらの概念の重要な部分を見逃している可能性があると考えており、正しい方向性を示したいと思っています. いっそのこと、似たようなものの実際の例がいいでしょう。

考えられる解決策:

@Name('createTable')
create table HolderTable(code string primary key, amount int);

@Name('insertTable')
insert into HolderTable select code, amount from MyStock; 

@Name('compareEventsWithTable')
@Subscriber(className='subscribers.MySubscriber')
on TickEvent as tick
select code, amount from HolderTable
where tick.stockCode = code;
4

1 に答える 1

0

データを収集し、収集したデータを複数のクエリで使用したいようです。そのために、名前付きウィンドウまたはテーブルを使用できます。

create window StockWindow#unique(stock) (stock string, value double);

insert into StockWindow select stock, value from IncomingEvent;

select MyLib.computeSomething(select window(*) from StockWindow) from StockWindow;

エンジンは、クラス「MyLib」によって提供される「computeSomething」関数を呼び出し、ウィンドウの内容をそれに渡します。これは、StockWindow がウィンドウに入る新しいイベントを持っている場合です。

于 2018-03-22T10:56:00.917 に答える