Объединение отдельных сообщений в 1 вывод каждые 15 секунд - PullRequest
0 голосов
/ 31 августа 2018

Можно ли объединить отдельные сообщения устройства, полученные каждые 15 секунд, в одно суммарное сообщение устройства?

Например, я хочу собрать сообщения «Температура», «Об / мин» и «Датчик»:

Message 1

{
   DeviceId: 1
   Key: "Temperature" 
   Value: 15
}


Message 2   
{
    DeviceId: 1,
    Key: "RPM"
    Value: 2000
}

В

{
  DeviceId: 1,
  Readings:
  {
     "Temperature": 15,
     "RPM": 2000 
     "Gauge": "Unknown" (no value in the 15 seconds window, so unknown)
  }
}

EDIT: Забыл добавить, ожидается, что если в SA поступит 1 из 3 сообщений для устройства («Температура», «Об / мин» и «Датчик»). Другие 2, вероятно, будут получены в течение следующих 15 секунд. Таким образом, задание SA должно начать "собирать", когда оно видит 1 из сообщений. Подходит ли для этого работа SA или я должен искать другое решение?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Спасибо за ответы. Я решил это с помощью SessionWindow.

0 голосов
/ 02 сентября 2018

Вы можете сделать это, используя функцию LAG . Выглядело бы примерно так:

SELECT 
     DeviceId, [Key], [Value] 
     LAG(reading) OVER (PARTITION BY DeviceId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
     FROM input

LAG позволяет вам просматривать указанное количество событий, а затем и заданный ключ раздела (в данном случае я использовал DeviceId).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...