使用Azure流分析在翻滚窗口中获取第一条记录

时间:2019-02-13 05:24:08

标签: azure azure-stream-analytics

我的项目的某些部分使用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"}]

2 个答案:

答案 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