2017-07-21 21 views
0

Azure Stream Analytics SQLを使用して株価のオープン、ロー、ハイ、クローズの値を計算しようとしています。Azure Streaming Analytics OHLCを計算

私はMinとMaxをかなり簡単に得ることができますが、TumblingWindowのOpen(FIRST)とClose(LAST)を計算する方法がわかりません。

私はここに書かれた文書(https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-stream-analytics-query-patterns)を最初から最後まで見つけましたが、それらを1つのクエリに組み合わせることはできません。ここで

は私が持っているものです。

SELECT 
    DateAdd(second,-5,System.TimeStamp) as WinStartTime, 
    system.TimeStamp as WinEndTime, 
    exchange, 
    Max(price) as H, 
    Min(price) as L, 
    Count(*) as EventCount 
FROM [input1] 
GROUP BY TumblingWindow(second, 5), exchange 

私はSQLでひどく進んでいないけど、単一のクエリにこれを結合する方法はありますか?サブクエリを使用しても。

注:5秒はテスト用に選択したウィンドウの一例です。

答えて

0

あなたのシナリオによれば、あなたの目的を達成するために、Collect集合関数とuser-defined functionsをAzure Stream Analyticsから利用できると仮定しました。ここでは詳細は、あなたがそれらを参照することができる、以下のとおりです。次のように入力を想定し

に見えます:

[ 
{"price":1.1,"exchange":10,"Time":"2017-7-24T13:00:00Z"}, 
{"price":1.2,"exchange":20,"Time":"2017-7-24T13:04:00Z"}, 
{"price":1.4,"exchange":40,"Time":"2017-7-24T13:03:00Z"}, 
{"price":1.3,"exchange":30,"Time":"2017-7-24T13:02:00Z"}, 
{"price":1.5,"exchange":50,"Time":"2017-7-24T13:06:00Z"} 
] 

UDF

// udf.getLast 
function main(objs) { 
    if(objs==null||objs==undefined||objs.length==0)return null; 
    return objs[objs.length-1]; 
} 
// udf.getFirst 
function main(objs) { 
    if(objs==null||objs==undefined||objs.length==0)return; 
    return objs[0]; 
} 

QUERY

SELECT 
    DateAdd(minute,-5,System.TIMESTAMP) as WinStartTime, 
    System.TIMESTAMP as WinEndTime, 
    UDF.getFirst(Collect()) AS FIRST, 
    UDF.getLast(Collect()) AS LAST, 
    Max(price) as H, 
    Min(price) as L, 
    Count(*) as EventCount 
FROM [input1] TIMESTAMP By Time 
GROUP BY TumblingWindow(minute, 5) 

結果:

enter image description here

+0

ああ、それは素晴らしいです。完全に動作する - 私はちょうどそれをテストしました。 UDFを大いに活用。この回答を受け入れる! – gleb1783

関連する問題