在流分析中添加以秒为单位的偏移时间

Add offset time with seconds in Stream Analytics

我有一个流式数据,如下所示。

"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

我还要加上这个时间的偏移秒数,如何添加偏移时间以便输出秒数加上偏移时间。

您可以尝试使用 CAST and DATEADD:

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

更新答案:

解决方案仍然基于CAST and DATEADD的用法,但请针对您的sql稍作修改。

根据我的多次测试,我发现 CAST 和 DATEADD 无法解析 nano 单元,请看这个 link:

所以我的想法是把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

我用你的示例数据输出: