#azure-timeseries-insights
#azure-временные ряды-insights
Вопрос:
Мы используем анализ временных рядов поколения 2, который считывает данные из IoT Hub. Данные имеют форму, очень похожую на пример C в этой документации: https://learn.microsoft.com/en-us/azure/time-series-insights/concepts-json-flattening-escaping-rules
Наши данные имеют следующую структуру:
{
"timestamp": "2020-11-01T10:00:00.000Z",
"sensors": [{
"name" : "temperature",
"unit" : "celsius"
"value": 25.39
},
{
"name" : "humidity",
"unit" : "percentage"
"value": 97.85
}
]
}
И обычно со многими другими элементами «датчика» в массиве. Мы всегда использовали предварительный просмотр Time Series Insights PAYG, и он работал нормально. Мы могли бы запросить температуру со следующей полезной нагрузкой JSON:
{
"getEvents": {
"timeSeriesId": ["some Id"],
"searchSpan": {
"from": "2020-08-27T07:34:00.000Z",
"to": "2020-08-27T07:34:10.000Z"
},
"filter": {
"tsx": "$event.sensors_name.String = 'temperature'"
},
"projectedProperties": [{
"name": "sensors_value",
"type": "Double"
}]
}
}
Это работало отлично, пока Microsoft не выпустила предварительную версию PAYG для официального выпуска. Это больше не работает, и мы нашли это в документации:
источник:https://learn.microsoft.com/en-us/azure/time-series-insights/concepts-supported-data-types
В следующей документации даже четко указано, что сглаживание массивов теперь отличается:
источник:https://learn.microsoft.com/en-us/azure/time-series-insights/ingestion-rules-update
Есть ли возможность по-прежнему запрашивать этот динамический тип массива без необходимости указывать временную метку или DeviceID в каждом элементе массива?
Ответ №1:
Эта функциональность еще не реализована, динамические типы не могут ссылаться в выражениях TSX, а значения в массиве не могут быть получены как projectedProperties. Весь массив должен быть извлечен, а затем проанализирован на стороне клиента. Чтобы вызвать сглаживание, вам нужно будет добавить идентификатор или временную метку в объекты, как вы упомянули выше.
Одна идея — создать новую среду TSI и настроить составной идентификатор TS — независимо от вашего первоначального идентификатора plus sensor.name (предполагая, что это имя стало уникальным идентификатором), тогда вы также уберете необходимость в фильтре для temp.
Комментарии:
1. «динамические типы доступны только через getEvents API» Что это значит? Как они могут быть предоставлены через GetEventsAPI? Полезная нагрузка, о которой я упоминал выше, также является полезной нагрузкой getEvents, верно?
2. да, вы правы, я ответил слишком быстро, не глядя на текст вашего запроса. Отредактировано выше. getEvents — просто получение «raw»
3. learn.microsoft.com/en-us/azure/time-series-insights/…
4. Спасибо за ответ. Хотя это работает, потребуется переустановить TSI для существующих производственных сред. Возможно, нам придется перестроить структуру входящих сообщений, чтобы в каждый объект была включена временная метка … Или … можем ли мы сохранить текущую структуру для существующих сред? Знаете ли вы, когда они будут обновлены, чтобы мы больше не могли использовать наш текущий запрос getEvents? Я читал, что API будет обновлен в конце октября, но означает ли это, что версия TSI также будет обновлена до официального выпуска?
5. Привет, мои извинения, у меня были отключены уведомления. Предыдущая версия API будет удалена в конце октября ($event[‘sensor_name’]. Строка или $event.имя_сенсора. Строка, но НЕ $event. [имя_сенсора]. Строка), но это ортогонально правилам приема — два разных поезда. Любая среда, созданная во время предварительного просмотра, может (должна) использовать новый синтаксис API. В какой-то момент правила сглаживания предварительного просмотра будут удалены, но в настоящее время временной шкалы нет. Это подпадает под действие критического изменения Azure, и поэтому у вас будет достаточно времени для подготовки.