Azure流分析中具有不同模式的多个警报联合

时间:2018-05-09 13:00:32

标签: sql azure azure-stream-analytics

我有一个EventHub接收可能有所不同的JSON K / V对的事件。我想要做的是运行单个Stream Analytics作业,并在保留结果中的所有K / V对的同时创建多个警报。例如,可能会看到这样的事件:

{"temp1": 45, "temp2": 60, "source": "sensor-a"},
{"temp1": 37, "temp2": 50, "humidity": 17, "source": "new-sensor"}

我以湿度为例,但重点是密钥不同。

一种可行的方法是,如果我可以使用各种WHERE子句运行多个select语句。

SELECT *, ALERT='Temp LOW' FROM [input] WHERE temp1 < 15
UNION
SELECT *, ALERT='Humidity HIGH' FROM [input] WHERE humidity > 50

但这不起作用,因为UNA不允许ASA中的SELECT *。这种方法可行的一种方法是,原始数据可以作为名为&#39; raw_data&#39;的子项返回。我不确定如何/如果我能做到这一点。我需要其他K / V对,但我不知道所有的关键名称。

将原始数据作为子项,结果可能如下所示:

{"ALERT": "Humidity HIGH", "raw_data":
  {"temp1": 33, "temp2": 52, "humidity": 60, "source": "sensorname", "otherkey": "value"}
}

我认为可能有用的一件事是我可以使用WITH语句生成ALERT字段,然后使用JOIN添加到事件流。我可以为JOIN ON的每个事件生成一个UUID。我还没有能够解决这个问题。

有没有办法在JSON中将原始事件作为子项返回,或者使用JOIN方法添加ALERT字段?

1 个答案:

答案 0 :(得分:0)

是的,您可以使嵌套记录选项有效(原始事件是结果中的子记录)。

以下是您问题中的修改示例查询:

SELECT raw_data=[input], ALERT='Temp LOW' FROM [input] WHERE temp1 < 15
UNION
SELECT raw_data=[input], ALERT='Humidity HIGH' FROM [input] WHERE humidity > 50