Мне нужна помощь с SQL-запросом в Cosmos. Мне нужно найти среднее время, необходимое для завершения сообщения во время нагрузочного теста, из событий, хранящихся в нашей БД.
Пока я могу получить время начала и окончания следующим образом:
SELECT
(SELECT c.TimestampUTC WHERE c.Event = 'message-accepted') as StartTime,
(SELECT c.TimestampUTC WHERE c.Event = 'message-completed') as EndTime
FROM c
WHERE c.TrackingId = 'LoadTest' AND (c.Event = 'message-accepted' OR c.Event = 'message-completed')
Но я получаю сообщение об ошибке, когда пытаюсь получить DateTimeDiff следующим образом:
SELECT
(SELECT c.TimestampUTC WHERE c.Event = 'message-accepted') as StartTime,
(SELECT c.TimestampUTC WHERE c.Event = 'message-completed') as EndTime,
DateTimeDiff("second", StartTime, EndTime) as TotalTime
FROM c
WHERE c.TrackingId = 'LoadTest' AND (c.Event = 'message-accepted' OR c.Event = 'message-completed')
Я застрял здесь, потому что мне нужна разница, чтобы использовать функцию AVG. Любая помощь будет оценена по достоинству.
РЕДАКТИРОВАТЬ Вот пример данных, хранящихся в Cosmos
{
"PartitionKey": "LoadTest",
"RowKey": "4ee9709f-c826-4a88-9d6f-240ba439eb1d",
"TrackingId": "LoadTest",
"Event": "message-accepted",
"TimestampUTC": "2022-09-14T19:12:18.8358914Z"
}
И это ошибка, которую я получаю при попытке DateTimeDiff: "Не удалось запросить элемент для контейнера Enginelog: Одно из входных значений неверно."
Это не дает много информации, поэтому я ищу помощи, я следую формату функции в документации здесь
@RitikaNalwaya Я добавил правки в свой пост
Это может быть случай, когда вы извлекаете все связанные документы (на основе некоторого общего идентификатора корреляции, который повторяется в каждом документе), а затем выполняете вычисление разницы дат в своем коде. Я не думаю, что вы сможете агрегировать отдельные свойства в нескольких документах, если только они не имеют одинаковое имя свойства (а затем объединять их в целом).
В соответствии с рассматриваемыми образцами данных предполагается, что существуют два разных документа со значением свойства Event «сообщение принято» и «сообщение завершено». Как упомянул Дэвид, функции нельзя использовать для данных/свойств, доступных в отдельном документе, до тех пор, пока имена свойств не будут одинаковыми.
Чтобы достичь того, что требуется, вам может потребоваться написать код на стороне клиента для рекурсивного извлечения значения свойств из отдельных документов. Пожалуйста, перейдите по ссылке
Спасибо за подробности, сейчас я пишу эту логику в нашем коде.
Было бы полезно, если бы вы могли поделиться образцами данных, хранящихся в базе данных, и сведениями об ошибках при выполнении запроса. –