Добавить время смещения с секундами в Stream Analytics - PullRequest
1 голос
/ 08 ноября 2019

У меня есть потоковые данные, как показано ниже.

"TriggeredDateTime": {"dateTime":{"date":{"year":2019,"month":5,"day":16},"time":{"hour":4,"minute":56,"second":19,"nano":480389000}},"offset":{"totalSeconds":0}}

Я написал SAQL для разделения даты и времени, как показано ниже

WITH SIGNAL AS (
  SELECT
        input.TriggeredDateTime.dateTime.date.year AS yr,
        input.TriggeredDateTime.dateTime.date.month AS mnth,
        input.TriggeredDateTime.dateTime.date.day AS date,
        input.TriggeredDateTime.dateTime.time.hour AS hr,
        input.TriggeredDateTime.dateTime.time.minute AS mnt,
        input.TriggeredDateTime.dateTime.time.second AS sec,
        input.TriggeredDateTime.dateTime.time.nano AS nano,
        input.TriggeredDateTime.dateTime.offset.totalSeconds AS offset
FROM [input]
)

SELECT 
  CONCAT (yr,'-',mnth,'-',date,'  ',hr,':',mnt,':',sec,':',nano)  AS TriggeredDateTime
INTO
[output]
FROM SIGNAL

Я также должен добавить секунды смещенияс этим временем, как добавить время смещения, чтобы к выходной секунде добавлялось время смещения.

1 Ответ

1 голос
/ 08 ноября 2019

Вы можете попробовать использовать CAST и DATEADD :

DATEADD(
   second,
   SIGNAL.offset,
   CAST(<your date string> as datetime) 
AS TriggeredDateTime

Обновить ответ:

Решение по-прежнему основано наиспользование CAST и DATEADD , но, пожалуйста, немного измените для вашего sql.

Согласно моим нескольким тестам, я обнаружил, что CAST и DATEADD не могут анализировать nano единицу, смотрите эту ссылку :

enter image description here

Так что моя идея - преобразовать nano в microsecond, затемПожалуйста, следуйте ниже sql:

WITH i AS (
  SELECT
        input.TriggeredDateTime.dateTime.date.year AS yr,
        input.TriggeredDateTime.dateTime.date.month AS mnth,
        input.TriggeredDateTime.dateTime.date.day AS date,
        input.TriggeredDateTime.dateTime.time.hour AS hr,
        input.TriggeredDateTime.dateTime.time.minute AS mnt,
        input.TriggeredDateTime.dateTime.time.second AS sec,
        input.TriggeredDateTime.dateTime.time.nano/1000 AS nano,
        input.TriggeredDateTime.dateTime.offset.totalSeconds AS offset
FROM input
)
select 
DATEADD(second,offset,
    DATEADD(microsecond,nano,
        CAST(CONCAT (i.yr,'-',i.mnth,'-',i.date,' ',i.hr,':',i.mnt,':',i.sec) as datetime)
    )
)  AS TriggeredDateTime
from i

Мой вывод с вами пример данных:

enter image description here

...