我的项目的某些部分使用Java中的Esper进行复杂的事件处理。我打算用Azure流分析替换Esper。
用例: FTOD(每日第一张票)和FTOP(项目第一张票)
我一直在从Eventhub获取票证数据,并希望生成两种类型的警报(FTOD和FTOP)。我认为thumblingWindow最适合这种情况。
但是我无法在窗口中选择第一条记录。有什么建议如何在24小时内选择第一条记录?
以下是针对FTOD的Esper查询
String statementQuery = "context context_" + plantIdStr
+ " select distinct * from TicketInfoComplete as ticket where plantId = '"
+ entry.getKey() + "' and ruleType='FTOD' output first every 24 hours";
下面是我的传入消息数据
[{"DeviceSerialNumber":"190203XXX001TEST","MessageTimestamp":"2019-02-11T13:46:08.0000000Z","PlantId":"141","ProjectId":"Mobitest","ProjectName":"Mobitest","TicketNumber":"84855","TicketDateTimeinUTC":"2019-02-11T13:46:08.0000000Z","AdditionalInfo":{"value123":"value2"},"Timeout":60000,"Traffic":1,"Make":"Z99","TruckMake":"Z99","PlantName":"RMZ","Status":"Valid","PlantMakeSerialNumber":"Z99|190203XXX001TEST","ErrorMessageJsonString":"[]","Timezone":"India Standard Time"}]
答案 0 :(得分:1)
根据您的描述,我认为您可以了解具有httpServerHandler
条件的LAST运算符。 keys = sorted(X[0].keys())
scaler = RobustScaler()
transformed = scaler.fit_transform([[x[k] for k in keys] for x in X])
X = [{k: x[idx] for idx, k in enumerate(keys)} for x in transformed]
允许您在定义的约束内查找事件流中的最新事件。
在Stream Analytics中,LAST的范围(即, 需要查看的当前事件的历史记录)始终限于 使用LIMIT DURATION子句的有限时间间隔。最后一罐 (可选)仅限于仅考虑与当前事件匹配的事件 使用PARTITION BY和在某个属性或条件上发生事件 WHEN子句。 LAST不受WHERE子句中谓词的影响,请加入 JOIN子句中的条件,或GROUP GROUP子句中的表达式分组 当前查询的内容。
请参阅上面文档中的示例:
GROUP BY
为简单起见,当您要获取第一项内容时,需要考虑isFirst方法。
答案 1 :(得分:1)
精确查询在将IsFirst方法用于FTOD和FTOP警报后,我使用了什么。
SELECT
DeviceSerialNumber,MessageTimestamp,PlantId,TruckId,ProjectId,ProjectName,
CustomerId,CustomerName,TicketNumber,TicketDateTimeinUTC,TruckSerialNumber,
TruckMake,PlantName,PlantMakeSerialNumber,Timezone,'FTOD' as alertType
INTO
[alertOutput]
FROM
[ticketInput]
where ISFIRST(mi, 2)=1
SELECT
DeviceSerialNumber,MessageTimestamp,PlantId,TruckId,ProjectId,ProjectName,
CustomerId,CustomerName,TicketNumber,TicketDateTimeinUTC,TruckSerialNumber,
TruckMake,PlantName,PlantMakeSerialNumber,Timezone,'FTOP' as alertType
INTO
[ftopOutput]
FROM
[ticketInput]
where ISFIRST(mi, 2) OVER (PARTITION BY PlantId) = 1