Azure 流分析查询中的限制 1 或前 1
Limit 1 or Top 1 in Azure Stream Analytics Query
我已在流分析查询下方编写以获取设备离线状态警报。如果在过去 5 分钟内没有收到来自设备的输入,查询会给我一个警报。
我需要该设备的最后远程信息处理记录(最后已知位置),但我正在获取为该设备发送的所有数据。我试过 LAST and TopOne 但都是开窗法。除了自定义函数还有其他解决方案吗?
SELECT
t1.header.serialNumber as serialNumber,t1.header.make as
make,t1.header.messageTimestamp as MessageTime,'Device Offline Alert' as
alertType
INTO
[alertOutput2]
FROM
[tsfInput] t1 TIMESTAMP BY header.messageTimestamp
LEFT OUTER JOIN [tsfInput] t2 TIMESTAMP BY header.messageTimestamp
ON
t1.header.serialNumber=t2.header.serialNumber AND
t1.header.make=t2.header.make
AND DATEDIFF(minute, t1, t2) BETWEEN 1 and 5
WHERE t2.serialNumber IS NULL
示例输入
{
"header": {
"assetKey": 8910053376183227000,
"make": "CAT36",
"serialNumber": "Truck36",
"deviceType": "A5:N2",
"isPriority": false,
"isReplay": true
}
}
我可以修复查询,但不是 100%。从查询中删除下面的行并且它正在工作之后,仍然不清楚为什么它不能使用 TimeStamp
TIMESTAMP BY header.messageTimestamp
我有 2 个查询,第一个是设备在线警报,第二个是设备离线警报
SELECT
*,'Device Online Alert' as alertType
INTO
[alertOutput]
FROM
[tsfInput]
WHERE ISFIRST(mi, 5) OVER (PARTITION BY header.serialNumber,header.make) = 1
SELECT t1.*,'Device Offline Alert' as alertType
INTO
[alertOutput2]
FROM [tsfInput] t1
LEFT OUTER JOIN [tsfInput] t2
ON t1.header.serialNumber=t2.header.serialNumber AND t1.header.make=t2.header.make
AND DATEDIFF(minute, t1, t2) BETWEEN 1 and 5
WHERE t2.header IS NULL
我已在流分析查询下方编写以获取设备离线状态警报。如果在过去 5 分钟内没有收到来自设备的输入,查询会给我一个警报。
我需要该设备的最后远程信息处理记录(最后已知位置),但我正在获取为该设备发送的所有数据。我试过 LAST and TopOne 但都是开窗法。除了自定义函数还有其他解决方案吗?
SELECT
t1.header.serialNumber as serialNumber,t1.header.make as
make,t1.header.messageTimestamp as MessageTime,'Device Offline Alert' as
alertType
INTO
[alertOutput2]
FROM
[tsfInput] t1 TIMESTAMP BY header.messageTimestamp
LEFT OUTER JOIN [tsfInput] t2 TIMESTAMP BY header.messageTimestamp
ON
t1.header.serialNumber=t2.header.serialNumber AND
t1.header.make=t2.header.make
AND DATEDIFF(minute, t1, t2) BETWEEN 1 and 5
WHERE t2.serialNumber IS NULL
示例输入
{
"header": {
"assetKey": 8910053376183227000,
"make": "CAT36",
"serialNumber": "Truck36",
"deviceType": "A5:N2",
"isPriority": false,
"isReplay": true
}
}
我可以修复查询,但不是 100%。从查询中删除下面的行并且它正在工作之后,仍然不清楚为什么它不能使用 TimeStamp
TIMESTAMP BY header.messageTimestamp
我有 2 个查询,第一个是设备在线警报,第二个是设备离线警报
SELECT
*,'Device Online Alert' as alertType
INTO
[alertOutput]
FROM
[tsfInput]
WHERE ISFIRST(mi, 5) OVER (PARTITION BY header.serialNumber,header.make) = 1
SELECT t1.*,'Device Offline Alert' as alertType
INTO
[alertOutput2]
FROM [tsfInput] t1
LEFT OUTER JOIN [tsfInput] t2
ON t1.header.serialNumber=t2.header.serialNumber AND t1.header.make=t2.header.make
AND DATEDIFF(minute, t1, t2) BETWEEN 1 and 5
WHERE t2.header IS NULL