0

Stream Insight を初めて使用するので、これはかなり基本的な質問かもしれませんが、イベント タイプによるクエリのフィルタリングはサポートされていないようです (以下を参照)。

私の質問を少し具体化するために、これは私のCepStreamです...

var stockStream = CepStream<MarketDataPoint>.Create(appName, typeof(MarketdataPointInputAdapterFactory), new MarketDataAdapterConfig(), EventShape.Point);

..これは私のクエリです...

var patternResult = from w in stockStream.Where(x => x is FxSpot)
                                            .AlterEventDuration(e => TimeSpan.FromMinutes(1))
                                            .SnapshotWindow(SnapshotWindowOutputPolicy.Clip)
                                        select new MarketDataPointEvent() {Price = w.Max(e => e.Price)};

...実行時にこの例外が発生します: The following expression is not supported by Microsoft Complex Event Processing LINQ Provider: (x is FxSpot)

私が理解しているように、フィルターを効果的に実行するよりも複数のアダプターを作成できますが、これは「すべき」方法ではないようです。

どんなアドバイスでも大歓迎です!

マット

4

2 に答える 2

1

タイプ比較のためにis演算子から離れようとします。これはLINQPadを使用したサンプルであり、使用することを強くお勧めします。この場合、フィルターは在庫によって行われます。CTIは、を使用して自動的に挿入されます

AdvanceTimeSettings.IncreasingStartTime

サンプル

void Main()     
{

    var marketReadings = new []
                    {
                    new MarketDataPoint() { Stock = "MSFT", Value = 30.0, Timestamp = DateTime.Parse("11/19/2012 4:10:00 PM") },
                    new MarketDataPoint() { Stock = "MSFT", Value = 30.1, Timestamp = DateTime.Parse("11/19/2012 4:11:00 PM") },
                    new MarketDataPoint() { Stock = "GOOG", Value = 667.97, Timestamp = DateTime.Parse("11/19/2012 4:12:00 PM") },
                    new MarketDataPoint() { Stock = "GOOG", Value = 667.51, Timestamp = DateTime.Parse("11/19/2012 4:12:00 PM") },
                };

            var stockStream = marketReadings.ToPointStream(Application, e=> PointEvent.CreateInsert(e.Timestamp,e),AdvanceTimeSettings.IncreasingStartTime);  

            var patternResult = from w in stockStream.Where(x => x.Stock == "MSFT")
                                                    .AlterEventDuration(e => TimeSpan.FromMinutes(1))
                                                    .SnapshotWindow(SnapshotWindowOutputPolicy.Clip)
                                                select new  {Price = w.Max(e => e.Value)}   ;

            patternResult.Dump();   
        }


        public class MarketDataPoint
        {
            public string Stock { get; set; }
            public double Value { get; set; }
            public DateTime Timestamp { get;set;}

        }

}
于 2012-11-26T00:59:59.397 に答える
0

定義したペイロード タイプは MarketDataPoint です。これは、イベントのスキーマを定義し、イベント構造に従って次のように定義します。

達成しようとしている問題の潜在的な回避策は、FxSpot を構成する必要なすべてのフィールドを MarketDataPoint に含めることです。次に、追加のプロパティを MarketDataPoint に追加して、MarketDataPoint のタイプを定義します。

于 2012-11-26T02:40:27.200 に答える