Ограничение 1 или 1 в запросе Azure Stream Analytics - PullRequest
0 голосов
/ 19 февраля 2019

Я написал ниже Stream Analytics Query для получения оповещения о состоянии устройства в автономном режиме.Запрос выдаёт мне предупреждение, если за последние 5 минут не было получено никакого ввода от устройства.

Мне нужна последняя телематическая запись (Последнее известное местоположение) этого устройства, но я получаю все данные, отправленные для этого устройства.Я пробовал LAST и TopOne , но все они являются методом окна.Есть ли другое решение, кроме пользовательской функции?

SELECT
     t1.header.serialNumber as serialNumber,t1.header.make as 
     make,t1.header.messageTimestamp as MessageTime,'Device Offline Alert' as 
     alertType
INTO
[alertOutput2]
FROM
  [tsfInput] t1 TIMESTAMP BY header.messageTimestamp
LEFT OUTER JOIN [tsfInput] t2 TIMESTAMP BY header.messageTimestamp
ON
     t1.header.serialNumber=t2.header.serialNumber AND 
     t1.header.make=t2.header.make
     AND DATEDIFF(minute, t1, t2) BETWEEN 1 and 5
     WHERE t2.serialNumber IS NULL

Пример ввода

{
"header": {
    "assetKey": 8910053376183227000,
    "make": "CAT36",
    "serialNumber": "Truck36",
    "deviceType": "A5:N2",
    "isPriority": false,
    "isReplay": true
}
}

1 Ответ

0 голосов
/ 21 февраля 2019

Я могу исправить запрос, но не на 100 процентов.После удаления строки из запроса ниже, и она работает, все еще не ясно, почему она не работает с TimeStamp

TIMESTAMP BY header.messageTimestamp

У меня 2 запроса 1 Устройство в сетиОповещение и второе для оповещения офлайн устройства

SELECT
*,'Device Online Alert' as alertType
INTO
    [alertOutput]
FROM
[tsfInput] 
WHERE ISFIRST(mi, 5) OVER (PARTITION BY header.serialNumber,header.make) = 1

SELECT t1.*,'Device Offline Alert' as alertType 
INTO 
 [alertOutput2] 
FROM [tsfInput] t1 
 LEFT OUTER JOIN [tsfInput] t2 
ON t1.header.serialNumber=t2.header.serialNumber AND t1.header.make=t2.header.make 
AND DATEDIFF(minute, t1, t2) BETWEEN 1 and 5 
WHERE t2.header IS NULL
...