0

我试图用流分析作业中的最后 10 秒平均值替换空值。这需要在流和我在 With 子句中计算的平均值之间进行自连接。它给了我重复(我得到相同的记录两次或三次)?关于什么是错的或如何正确地做的任何建议?我的查询是:

WITH MV AS ( Select AVG([Sensor_1]) AS [Sensor_1] From [input] GROUP BY SlidingWindow(second, 10))
SELECT [input].[ID]
,[input].[Timestamp]
,[input].[Result]
,CASE 
    WHEN [input].[Sensor_1] = 0 
    THEN [MV].[Sensor_1] ELSE [input].[Sensor_1] 
    END [Sensor_1]
,[input].[Sensor_2]
,[input].[Sensor_3]
FROM [input]
LEFT OUTER JOIN [MV]
ON DateDiff(second, [input], [MV]) BETWEEN 0 AND 10
4

1 回答 1

0

很抱歉延迟回复此问题。

最简单的解决方案是将 ON DateDiff(second, [input], [MV]) BETWEEN 0 AND 10 更改为 ON DateDiff(millisecond, [input], [MV]) = 0。

这是因为 MV 步骤中给出的时间戳是进入 SlidingWindow 的最后一个事件的时间戳,并且这些时间戳与 Input 中事件的时间戳相匹配(注意:时间单位越小越好,但如果您使用的是in-browser-testing-experience 然后毫秒是支持的最小单位)。

请注意,虽然在这里我们可以通过删除 JOIN 中不必要的匹配来删除重复项,但通常流分析没有通过 DISTINCT 或类似的方式删除重复项的机制。

齐夫。

于 2015-07-28T21:05:57.060 回答