在流分析中添加以秒为单位的偏移时间
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
我还要加上这个时间的偏移秒数,如何添加偏移时间以便输出秒数加上偏移时间。
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
我用你的示例数据输出:
我有一个流式数据,如下所示。
"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
我还要加上这个时间的偏移秒数,如何添加偏移时间以便输出秒数加上偏移时间。
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
我用你的示例数据输出: