给定类似的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"
}
}
流分析查询是否可以实现?或者我需要创建两个流(一个包含原始数据,另一个只包含平均数据,并将它们合并在一起?
答案 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