2017-08-01 8 views
0

私はKapacitorバッチと、ベースラインを生成しようとしています|それから、4週間前InfluxDB 1、2、3とから同じ間隔を照会前方に移動させると、このように一緒に参加することで、クエリを:Kapacitorラムダ平均

var w1 = batch 
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""') 
     .offset(1w).period(period).every(1m).align().groupBy(time(1m)) 
    |shift(1w) 

var w2 = batch 
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""') 
     .offset(2w).period(period).every(1m).align().groupBy(time(1m)) 
    |shift(2w) 

var w3 = batch 
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""') 
     .offset(3w).period(period).every(1m).align().groupBy(time(1m)) 
    |shift(3w) 

var w4 = batch 
    |query('SELECT mean(""value"") FROM ""MyDB"".""autogen"".""MetricName""') 
     .offset(4w).period(period).every(1m).align().groupBy(time(1m)) 
    |shift(4w) 

var bj = w1 
    |join(w2, w3, w3) 
     .as('w1', 'w2', 'w3', 'w4') 
     .fill('null') 

var b = bj 
    |eval(lambda: (""w1.mean"" + ""w2.mean"" + ""w3.mean"" + ""w4.mean"")/float(4.0)) 
     .as('avg') 

私はフルアウタージョインを使用しています。数週間で値が見つからない場合があります。この場合、3つの現在値の平均としてベースラインを計算します。

しかし、ラムダはMean()やそのような数学関数をサポートしていないようです。また、ヌル値のチェックもサポートしていないようです。

このようなベースラインを計算する方法はありますか?

また、ベースラインが計算されたら、受信ストリームデータがベースラインに対してチェックされるようにキャッシュを保持することはできますか?

ご協力いただきましてありがとうございます。ありがとう

+0

ここでは大声で考えています。特定のデータが見つからない場合は 'linear interpolate'することができますか?そうすれば、常に4つの値が存在することを保証することができ、4で割ることができます。ありがとう –

答えて

0

まず、シフトの代わりにバッチvarにオフセットを使用してみてください。オフセット

は日、前回の分xから時間値を取ります...

シフトノードが参加するプロセスで使用する必要があり、例: :ここ

previous 
    |shift(1w) 
    |join(current) 
    ...... 

あなたは例を持っていますhttps://github.com/influxdata/kapacitor/issues/746

異なる時間で、私の前のコメントのために、私はそれが動作しないだろうと思う...おそらくユニオンではなく、ノードの作品に参加するが、確かではない!

あなたは常に最新の1週間、2週間などをチェックすることができます。