0

次のような一連のイベントがあります。

  1. イベント A がシーケンスを開始します
  2. 複数のイベント B が発生する
  3. イベント C はシーケンスを停止します

[すべての A -> (B から C) まで] というパターンでそれを行いましたが、正しいようです (どう思いますか?)。しかし、シーケンスで発生した B イベントから情報を取得して集計するのに苦労しています。単純にカウントといくつかの avgs を取得したいのですが、何も機能していないようです (B イベントが存在する場合でも、example1 は 1 を返し、example 2 は 0 を返し、example 3 は null を返します)。

insert into CreateMeasurement
select
    C.source            as source,
    "carDrivingAnalyse" as type,
    C.time              as time,
    {
        "example1", count(*),
        "example2", count(B),
        "example3", B.countOf()
    } as fragments

from pattern [
    every A = EventCreated(
        type = "Ignition",
        getString(A, "Ignition.status") = "ON")

    -> (
        B = EventCreated(
            type = "DrivingEvent",
            source = A.source,
            getString(B, "DrivingEvent.prop1") = getString(A, "Ignition.prop1"),
            getNumber(B, "DrivingEvent.prop2") = getNumber(A, "Ignition.prop2"))

        until C = EventCreated(
            type = "Ignition",
            getString(C, "Ignition.status") = "OFF",
            source = A.source,
            getString(C, "Ignition.prop1") = getString(A, "Ignition.prop1"),
            getNumber(C, "Ignition.prop2") = getNumber(A, "Ignition.prop2"))
    )
]
4

2 に答える 2

0

私は専門家ではありませんが、「count( )」が「null」を返すことはありません。その点であなたの観察はおそらく間違っています。「count( )」は、from 句にあるものの出現回数をカウントする集計関数です。パターンの場合、パターン一致の数をカウントします。

「count(B)」は、式の (個別の) 非 null 値の数をカウントします。ドキュメントを参照してください。それも「null」を返しません。

「example3」は、テストデータによると、Cイベントの前に実際に複数のBイベントが到着することを確認するだけです。

于 2016-06-15T16:10:46.953 に答える