Сводные данные в Azure Stream Analytics с использованием функции Javascript - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть данные, подобные приведенным ниже, с динамическими параметрами;

    [
    {"deviceid":"d1","parameter"="p1" value="1" timestamp="2018-03-22T12:33:00"},
    {"deviceid":"d1","parameter"="p2" value="2" timestamp="2018-03-22T12:34:00"},
    {"deviceid":"d1","parameter"="p2" value="3" timestamp="2018-03-22T12:35:00"},
    {"deviceid":"d2","parameter"="p1" value="4" timestamp="2018-03-22T12:36:00"},
    {"deviceid":"d2","parameter"="p2" value="5" timestamp="2018-03-22T12:37:00"},
    {"deviceid":"d2","parameter"="p2" value="6" timestamp="2018-03-22T12:38:00"},
    {"deviceid":"d2","parameter"="p1" value="7" timestamp="2018-03-22T12:43:00"},
    {"deviceid":"d2","parameter"="p1" value="8" timestamp="2018-03-22T12:44:00"},
    {"deviceid":"d2","parameter"="p2" value="9" timestamp="2018-03-22T12:45:00"},
    {"deviceid":"d1","parameter"="p1" value="10" timestamp="2018-03-22T12:46:00"},
    {"deviceid":"d1","parameter"="p1" value="11" timestamp="2018-03-22T12:47:00"},
    {"deviceid":"d1","parameter"="p2" value="12" timestamp="2018-03-22T12:49:00"}
    ]

Я хочу изменить эти значения параметров (для каждого окна каждые 10 минут) и отобразить последнее полученное значение каждого параметра для каждого устройства (Параметры будутбудьте динамичны, а не только p1 и p2);Таким образом, по существу созданные значения столбцов из параметров сводят все остальные агрегаты данных к времени окна.


|DeviceID |время окна |p1 |p2 | ...... n

|d1 |2018-03-22 12:40 |1 |3 |

|d2 |2018-03-22 12:40 |4 |6 |

|d2 |2018-03-22 12:50 |8 |9 |

|d1 |2018-03-22 12:50 |11 |12 |

Спасибо.

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете уменьшить массив данных в отдельные объекты, каждый из которых представляет период, а затем записать их.Короткий способ получить период - просто вырезать из поля даты все, что не нужно, и добавить 0.

, что даст интервалы от x: 30: 00.000 до x: 39: 59.999, поэтому исключая x: 40: 00.000 Вы можете проанализировать дату в объекте фактической даты, если вам нужно более детально контролировать, какой элемент принадлежит тому или иному периоду, как вы показываете при округлении времени до ближайших 10 минут в будущем.

Итак, после исправления неверного формата исходных данных я получаю следующее:

const data = [
  {"deviceid":"d1", "parameter":"p1", "value":"1", "timestamp":"2018-03-22T12:33:00"},
  {"deviceid":"d1", "parameter":"p2", "value":"2", "timestamp":"2018-03-22T12:34:00"},
  {"deviceid":"d1", "parameter":"p2", "value":"3", "timestamp":"2018-03-22T12:35:00"},
  {"deviceid":"d2", "parameter":"p1", "value":"4", "timestamp":"2018-03-22T12:36:00"},
  {"deviceid":"d2", "parameter":"p2", "value":"5", "timestamp":"2018-03-22T12:37:00"},
  {"deviceid":"d2", "parameter":"p2", "value":"6", "timestamp":"2018-03-22T12:38:00"},
  {"deviceid":"d2", "parameter":"p1", "value":"7", "timestamp":"2018-03-22T12:43:00"},
  {"deviceid":"d2", "parameter":"p1", "value":"8", "timestamp":"2018-03-22T12:44:00"},
  {"deviceid":"d2", "parameter":"p2", "value":"9", "timestamp":"2018-03-22T12:45:00"},
  {"deviceid":"d1", "parameter":"p1","value":"10", "timestamp":"2018-03-22T12:46:00"},
  {"deviceid":"d1", "parameter":"p1", "value":"11", "timestamp":"2018-03-22T12:47:00"},
  {"deviceid":"d1", "parameter":"p2", "value":"12", "timestamp":"2018-03-22T12:49:00"}
];

const hash_intervals = data.reduce(( intervals, item ) => {
  const interval = `|${ item.deviceid }|${ item.timestamp.slice( 0, 15 ) }0|`;
  if ( !intervals[ interval ] ) intervals[ interval ] = {};
  intervals[ interval ][ item.parameter ] = item.value;
  return intervals;
}, {});

Object
  .entries( hash_intervals )
  .forEach(([ interval, items ]) => console.log( `${ interval }${ Object.values( items ).join( '|' ) }` ));
...