使用流分析从单个 select 输出多条记录

Output multiple records from single select with Stream Analytics

是否可以从流分析中的单个 select 动态输出多个记录?

例如,我收到以下格式的事件:

{
    "value": 600,
    "duration": 300
}

持续时间以秒为单位

如何每秒输出一条记录,其中包含持续时间的平均值?像下面这样的东西,只有 300 次?

SELECT 
    value / duration AS value
    1 AS duration
FROM Input

我认为返回数组记录也很好,因为可以使用 CROSS APPLY GetArrayElements

将其转换为单独的事件

这在当今的流分析查询语言中无法直接实现 - 请继续关注即将推出的可扩展性改进。

您可以使用 HoppingWindow 生成常规事件(例如每秒一次),然后加入您的流以每秒生成一次事件,条件是它们在传入事件之前不超过 [duration] 秒。

像这样:

WITH
InputWithTimestamp AS
(
    SELECT 
        System.Timestamp as timestamp, [value], [duration]
    FROM input 
),
RegularEvents AS
(
    SELECT
        System.Timestamp as timestamp, 
        count()
    FROM InputWithTimestamp
    GROUP BY HoppingWindow(second, 1000, 1) -- assuming at least one event arrives evry 1000 seconds
)

SELECT 
    RegularEvents.timestamp,
    InputWithTimestamp.value/InputWithTimestamp.[duration] as [value]

 FROM
    RegularEvents
JOIN
    InputWithTimestamp
ON DATEDIFF(second, RegularEvents, InputWithTimestamp) BETWEEN 0 AND 1000 -- assuming 1000 is max possible duration
AND DATEDIFF(second, RegularEvents.timestamp, InputWithTimestamp.timestamp) BETWEEN 0 AND InputWithTimestamp.[duration]