Azure 流分析计算 OHLC
Azure Streaming Analytics Calculate OHLC
我正在尝试使用 Azure 流分析计算股票价格的开盘价、最低价、最高价和收盘价 SQL。
我可以很容易地获得最小值和最大值,但我很难弄清楚如何计算 TumblingWindow 的打开 (FIRST) 和关闭 (LAST)。
我在此处 (https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-stream-analytics-query-patterns) 找到了要首先和最后执行的文档,但我无法将它们组合成一个查询。
这是我的资料:
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秒只是一个例子window我选择的是为了测试。
根据您的情况,我假设您可以利用 Azure 流分析中的 Collect aggregate function and user-defined functions 来实现您的目的。详情如下,大家可以参考:
假设您的输入如下所示:
[
{"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];
}
查询
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)
结果:
我正在尝试使用 Azure 流分析计算股票价格的开盘价、最低价、最高价和收盘价 SQL。
我可以很容易地获得最小值和最大值,但我很难弄清楚如何计算 TumblingWindow 的打开 (FIRST) 和关闭 (LAST)。
我在此处 (https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-stream-analytics-query-patterns) 找到了要首先和最后执行的文档,但我无法将它们组合成一个查询。
这是我的资料:
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秒只是一个例子window我选择的是为了测试。
根据您的情况,我假设您可以利用 Azure 流分析中的 Collect aggregate function and user-defined functions 来实现您的目的。详情如下,大家可以参考:
假设您的输入如下所示:
[
{"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];
}
查询
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)
结果: