如何使用MS Stream Analytics将窗口平均值注入(附加)到输出中

时间:2017-01-26 21:10:15

标签: azure-stream-analytics

给定类似的JSON流:

{ "timestamp": "2017-01-26T20:27:26.099Z", "Novato": { "humidity": "40.996", "barometric": "1011.2" }, "Redmond": { "humidity": "60.832", "barometric": "1011.8" } }

对于此对象中的每个城市,我想添加一个名为humidity_5_second_avg的新值,这是一个平均5秒的翻滚窗口。

但当然,对于每个城市来说,它必须是该城市独有的。我想把它附加到现有的城市'值。

例如:

{ "timestamp": "2017-01-26T20:27:26.099Z", "Novato": { "humidity": "40.996", "barometric": "1011.2", "humidity_5_second_avg": "38.1234" }, "Redmond": { "humidity": "60.832", "barometric": "1011.8", "humidity_5_second_avg": "32.1234" } }

流分析查询是否可以实现?或者我需要创建两个流(一个包含原始数据,另一个只包含平均数据,并将它们合并在一起?

1 个答案:

答案 0 :(得分:1)

准确地按照描述的方式这很棘手。首先将城市信息分解为每个城市一行,然后使用JOIN。

-- Use CROSS APPLY to split original events into one row per city
WITH CityData AS
(
    SELECT 
        r.PropertyName AS City,
        r.PropertyValue.*
    FROM localinput i TIMESTAMP BY timestamp 
    CROSS APPLY GetRecordProperties(i) r
    WHERE r.PropertyValue.humidity IS NOT NULL
),
Averages AS
(
    SELECT 
        City,
        AVG(humidity) as avg_humidity 
    FROM CityData
    GROUP BY city, TumblingWindow(second, 5)
)

SELECT *, System.Timestamp as ts INTO debug FROM Averages

SELECT 
    c.*, a.avg_humidity
FROM CityData c
JOIN Averages a
ON c.City = a.City AND DATEDIFF(second, c, a) BETWEEN 0 AND 5