我是 Azure 流分析的新手。我浏览了有关基于阈值的规则的Microsoft 文章。并为基于单一条件的规则使用以下配置,我也可以获得正确的输出。
我的参考/规则数据:
{
"rule_id": 1234,
"device_id": "xyz",
"property": "Temperature",
"alert_message": "High temperature: Temperature above 93 °C",
"operator": "GREATEROREQUAL",
"threshold": 93
}
我的示例遥测数据包:
{
"deviceId": "xyz",
"Temperature": 45.43,
"Pressure": 55.32
}
我的流分析输入是 IOTHUB,输出是 Azure 函数。
我的流分析查询:
SELECT tl.*, [rule]
FROM IOTHUB as tl TIMESTAMP BY tl.EventEnqueuedUtcTime
JOIN ReferenceData [rule]
ON [rule].device_id = tl.deviceId
WHERE (
([rule].operator = 'GREATEROREQUAL' AND GetRecordPropertyValue(tl, [rule].property) >= [rule].threshold) OR
([rule].operator = 'LESSOREQUAL' AND GetRecordPropertyValue(tl, [rule].property) <= [rule].threshold) OR
([rule].operator = 'EQUAL' AND GetRecordPropertyValue(tl, [rule].property) = [rule].threshold) OR
([rule].operator = 'LESS' AND GetRecordPropertyValue(tl, [rule].property) < [rule].threshold) OR
([rule].operator = 'GREATER' AND GetRecordPropertyValue(tl, [rule].property) > [rule].threshold)
)
但是现在,我需要配置满足多个条件的规则。我尝试了几种方法,但无法使其动态化。
我尝试在查询的 WHERE 条件中使用自定义 UDF 函数来动态生成查询。但不幸的是,这也不支持。(如果我错了,请纠正我)。
例如我的新参考/规则数据是:
{
"rule_id": 1233,
"device_id": "xyz",
"alert_message": "Temperature above 93 °C & Pressure beyond range (50-100)",
"conditions": [
{
"property": "Temperature",
"operator": "GREATEROREQUAL",
"threshold": 93
},
"AND",
[
{
"property": "Pressure",
"operator": "LESSOREQUAL",
"threshold": 50
},
"OR",
{
"property": "Pressure",
"operator": "GREATEROREQUAL",
"threshold": 100
}
]
]
}