CosmosDB Найдите среднее время завершения сообщения

Мне нужна помощь с 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 31.01.2023 13:47

@RitikaNalwaya Я добавил правки в свой пост

Jonald Monday 31.01.2023 14:58

Это может быть случай, когда вы извлекаете все связанные документы (на основе некоторого общего идентификатора корреляции, который повторяется в каждом документе), а затем выполняете вычисление разницы дат в своем коде. Я не думаю, что вы сможете агрегировать отдельные свойства в нескольких документах, если только они не имеют одинаковое имя свойства (а затем объединять их в целом).

David Makogon 31.01.2023 15:17
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
3
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В соответствии с рассматриваемыми образцами данных предполагается, что существуют два разных документа со значением свойства Event «сообщение принято» и «сообщение завершено». Как упомянул Дэвид, функции нельзя использовать для данных/свойств, доступных в отдельном документе, до тех пор, пока имена свойств не будут одинаковыми.

Чтобы достичь того, что требуется, вам может потребоваться написать код на стороне клиента для рекурсивного извлечения значения свойств из отдельных документов. Пожалуйста, перейдите по ссылке

Спасибо за подробности, сейчас я пишу эту логику в нашем коде.

Jonald Monday 01.02.2023 17:02

Другие вопросы по теме