使用Azure Stream Analytics获取Tumbling Window中的第一条记录

问题描述 投票:1回答:2

我的项目的一部分在Java中使用Esper进行复杂的事件处理。我打算用Azure Stream Analytics取代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"}]
azure azure-stream-analytics
2个回答
1
投票

根据您的描述,我认为您可以通过LAST条件了解GROUP BY运算符。 LAST允许用户在定义的约束内查找事件流中的最新事件。

在流分析中,使用LIMIT DURATION子句,LAST的范围(即,历史记录与当前事件需要查看的距离)始终限制在有限的时间间隔内。可以选择将LAST限制为仅使用PARTITION BY和WHEN子句考虑与特定属性或条件上的当前事件匹配的事件。 LAST不受WHERE子句中的谓词,JOIN子句中的连接条件或当前查询的GROUP BY子句中的表达式分组的影响。

请参阅上面文档中的示例:

SELECT    
       LAST(TicketNumber) OVER (LIMIT DURATION(hour, 24))  
FROM input 

只是为了总结,当你想得到第一个项目时,需要考虑isFirst方法。


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
© www.soinside.com 2019 - 2024. All rights reserved.