Azure 流分析 - Last() 函数始终等于时间戳
Azure stream analytics - Last() function always equals timestamp
我正在使用最后一个函数创建一个标志,用于标识收到的最新记录(因此我可以在 Power BI 中仅显示最新值)。
SELECT
events.deviceId
,events.[timestamp]
,events.externaltemp
,LAST(events.[timestamp]) OVER (PARTITION BY events.DeviceId LIMIT DURATION(day, 1) ) as latest
,case when LAST(events.[timestamp]) OVER (PARTITION BY events.DeviceId LIMIT DURATION(day, 1) ) = [timestamp] then 1 else 0 end as LastestFlag
INTO
[powerBI]
FROM
[EventHub] as events timestamp by [timestamp]
但是我看到最后一个函数总是返回与我的时间戳相同的日期时间,所以我查询中的所有行看起来都是最后收到的。我的数据每一秒都有一个记录。
(或者,我希望使用 row_number 函数给我一些东西来过滤以识别最新记录——但这在流分析中似乎还不存在)
目前完成此任务的最佳方法是在 Power BI 中使用类似问题中提到的问答问题:
你的方法行不通。如果您 运行 针对 SQL 服务器的查询,它将为每个设备标记一行并将其称为最新的,因为 SQL 服务器更面向批处理。流分析是临时的,实时运行。因此,它正在处理的行始终是当时的最新行。此外,一旦将输出行发送到 Power BI,它就无法更新。因此,Power BI 中的每一行都将被标记为最新,因为在流分析处理它时它是最新的。
我正在使用最后一个函数创建一个标志,用于标识收到的最新记录(因此我可以在 Power BI 中仅显示最新值)。
SELECT
events.deviceId
,events.[timestamp]
,events.externaltemp
,LAST(events.[timestamp]) OVER (PARTITION BY events.DeviceId LIMIT DURATION(day, 1) ) as latest
,case when LAST(events.[timestamp]) OVER (PARTITION BY events.DeviceId LIMIT DURATION(day, 1) ) = [timestamp] then 1 else 0 end as LastestFlag
INTO
[powerBI]
FROM
[EventHub] as events timestamp by [timestamp]
但是我看到最后一个函数总是返回与我的时间戳相同的日期时间,所以我查询中的所有行看起来都是最后收到的。我的数据每一秒都有一个记录。
(或者,我希望使用 row_number 函数给我一些东西来过滤以识别最新记录——但这在流分析中似乎还不存在)
目前完成此任务的最佳方法是在 Power BI 中使用类似问题中提到的问答问题:
你的方法行不通。如果您 运行 针对 SQL 服务器的查询,它将为每个设备标记一行并将其称为最新的,因为 SQL 服务器更面向批处理。流分析是临时的,实时运行。因此,它正在处理的行始终是当时的最新行。此外,一旦将输出行发送到 Power BI,它就无法更新。因此,Power BI 中的每一行都将被标记为最新,因为在流分析处理它时它是最新的。