Как получить системное время при выполнении запроса Azure Stream Analytics - PullRequest
0 голосов
/ 08 мая 2018

В приложении есть набор событий, которые поступают в концентратор событий, и как часть потоковой аналитики у меня есть набор требований, и одно из них состоит в том, чтобы выяснить, не поступил ли определенный набор записей в концентратор событий в прошлом x минут. У меня есть временная метка внутри сообщения, которая сообщает мне эффективное время сообщения, но для того, чтобы вычислить задержку (между эффективным временем сообщения и now ()), мне нужно знать текущую временную метку, когда я запускаю запрос.

Я пробовал System.Timestamp, но он дает мне значение "1970-01-01T12: 01: 01.0010000Z"

Последняя отметка времени в очереди для сообщения самая последняя, ​​например "2018-05-06T00: 00: 00.1000000Z" ... Но не уверен, почему System.timestamp не возвращает мне время постановки в очередь (если я не использовал) Отметка времени «Статья).

Итак, у меня есть 2 вопроса:

  1. Как получить текущую временную метку сервера при выполнении запроса потоковой аналитики.
  2. Почему system.timestamp не возвращает отметку времени в очереди

Запрос: ВЫБРАТЬ System.Timestamp as ts ОТ источник

Результат: "1970-01-01T12: 01: 01.0010000Z"

Ни одна из отметок времени во входных данных не старше 6 мая 2018 года.

Спасибо, Раджниш

1 Ответ

0 голосов
/ 08 мая 2018

Последняя отметка времени для сообщения является последней, например, «2018-05-06T00: 00: 00.1000000Z» ... Но не уверен, почему System.timestamp не возвращает мне время постановки в очередь (если я не использовал «Отметка времени» «Статья).

Как System.Timestamp (Stream Analytics) гласит следующее:

Если предложение TIMESTAMP BY не задано для данного ввода, время прибытия события используется в качестве метки времени. Например, время события в очереди будет использовано при вводе Event Hub.

Я только что проверил эту проблему и обнаружил, что если вы просто протестируете запрос в «JOB TOPOLOGY> Query» портала Azure, то для подхода, не задающего предложение TIMESTAMP BY, значение System.Timestamp будет равно 1970-01-01T12:01:01.0010000Z , При указании предложения TIMESTAMP BY значением System.Timestamp будет значение столбца, указанное в предложении TIMESTAMP BY.

Затем я просто создал вход Blob и выход Blob для своей работы, затем на вкладке «Обзор» нажмите «Пуск», чтобы запустить задание Stream Analytics, и я могу успешно получить правильное значение для System.Timestamp.

Запрос:

SELECT birth,name,System.Timestamp as t   
into output
FROM input

TEST:

enter image description here

<Ч />

UPDATE:

Как получить текущую временную метку сервера, когда выполняется запрос потоковой аналитики.

Для вашего требования, я предполагаю, что вы можете использовать JavaScript UDF . Я только что создал образец UDF следующим образом:

function main(s) {
    return new Date().toISOString();
}

TEST:

enter image description here

Вы можете вычислить задержку в UDF или использовать встроенные функции Функции даты и времени .

...