Получить первую запись в окне Tumbling, используя Azure Stream Analytics - PullRequest
0 голосов
/ 13 февраля 2019

Часть моего проекта, использующая Esper в Java для сложной обработки событий.Я планирую заменить Esper на Azure Stream Analytics.

Вариант использования: FTOD (первый билет дня) и FTOP (первый билет проекта)

IЯ постоянно получаю данные билетов от Eventhub и хочу генерировать 2 типа оповещений (FTOD и FTOP).Я думаю, что thumblingWindow лучше всего подходит для этого сценария.

Но я не могу выбрать первую запись в окне.Любое предложение, как выбрать первую запись в 24-часовом окне?

Ниже приведен запрос Esper для FTOD

     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 голосов
/ 18 февраля 2019

Точный запрос Что я использовал после использования метода 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
0 голосов
/ 14 февраля 2019

Основываясь на вашем описании, я думаю, вы могли бы знать о LAST операторе с условием GROUP BY.LAST позволяет искать самое последнее событие в потоке событий в рамках определенных ограничений.

В Stream Analytics область действия LAST (т. Е. Как далеко назад в истории от текущего события, на которое он должен смотреть) всегда ограничена конечным интервалом времени, используя предложение LIMIT DURATION.Опционально LAST может быть ограничен только рассмотрением событий, которые соответствуют текущему событию для определенного свойства или условия, с использованием предложений PARTITION BY и WHEN.На LAST не влияют предикаты в предложении WHERE, условия соединения в предложении JOIN или выражения группировки в предложении GROUP BY текущего запроса.

См. Пример в приведенном выше документе:

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

Вкратце, метод isFirst необходимо учитывать, когда вы хотите получить первый элемент.

...