繁体   English   中英

使用 BY TIMESTAMP 的带有滚动窗口的 Azure 流分析查询在测试中运行良好,但在运行作业结果时关闭

[英]Azure Stream Analytics query with tumbling window using BY TIMESTAMP works fine on test but is off in running job results

我正在做一个物联网项目。 我有一个 Raspberry pi,它将智能电表数据发送到 Azure 上的 IoT eventhub。 我使用 Azure 流分析作业读取数据。 仪表读数每 10 秒发送一次。

我创建的查询之一使用翻滚窗口计算每小时的电力消耗。 它使用滞后计算此窗口的最大仪表读数减去前一个窗口的最大仪表读数。 我使用的是来自 IOT 设备的时间戳,而不是默认的到达时间。

WITH onehourwindow AS
(
SELECT
    max(total_low) * 1000 as max_low,
    max(total_high) * 1000 as max_high,
    max(gas) * 1000 as max_gas,
    round(avg(current_consumption), 1) as avg_consumption,
    max(timestamp) as max_timestamp
FROM
    eventhuninputsmartmeter TIMESTAMP BY timestamp
GROUP BY TUMBLINGWINDOW(hour, 1)
)

SELECT 
    (max_low - LAG(max_low) OVER (LIMIT DURATION(hour, 1))) / 1000 as total_consumption_low,
    (max_high - LAG(max_high) OVER (LIMIT DURATION(hour, 1))) / 1000 as total_consumption_high,    
    (max_gas - LAG(max_gas) OVER (LIMIT DURATION(hour, 1))) / 1000 as total_consumption_gas,
    avg_consumption,
    max_timestamp
INTO 
    MeterReadingSQLDB
FROM
    onehourwindow

查询返回测试中的预期结果。 以下是测试结果中时间戳和消耗的示例。 正如预期的那样,最新的时间戳(最大值)是 59 分 50 秒左右的小时的最后一次仪表读数。

|----------------------------|---------------------------|
|      max_timestamp         |    total_consumption_high |
|----------------------------|---------------------------|
|2020-02-28T22:59:52.1794730 |         1.171             |
|2020-02-28T21:59:51.6680430 |         0.500             |
|----------------------------|---------------------------|

当我运行查询作业时,我将以下结果写入我的 SQL DB。 现在最新的时间戳(最大值)不是(时钟)小时的最后一个仪表读数,而是 54 分钟。 如果我手动计算消耗量,我可以看到使用的窗口是一小时,它不是从 00 开始,而是从每小时 55 分钟开始。

|----------------------------|---------------------------|
|      max_timestamp         |    total_consumption_high |
|----------------------------|---------------------------|
|2020-02-28T22:54:52.1300000 |         1.353             |
|2020-02-28T21:54:51.6830000 |         0.510             |
|----------------------------|---------------------------|

如何解决这个问题? 我已经尝试了很多东西,但似乎无法修复它。 下面帖子的答案看起来很有希望,但我的活动不会迟到,绝对不会迟到 6 分钟。 因此仍然使用默认的事件排序策略。

查询中的 Azure 流分析“TimeStamp By”在工作中不起作用,但在测试中运行良好

关于解决这个问题的任何想法,以便我在 59 分 50 秒左右获得窗口的最大时间戳?

谢谢!

托马斯

根据您的详细描述:您的测试作业很好,输出结果如您所愿,我认为sql可能按预期工作。您可以考虑流数据源端的原因和ASA作业的设置。

我使用的是来自 IOT 设备的时间戳,而不是默认的到达时间。

根据该声明从ASA TIMESTAMP BY文件,定制时间戳可能会导致从网络或其他因素延迟结果。

在此处输入图片说明

我建议你在 Windows 函数中设置offsize参数来平衡这个差距。

由于您是根据事件负载中的时间戳进行处理,因此您的作业的事件顺序策略可能会过滤掉一些可能导致此问题的输入。 您可以查看 2 个指标来了解是否是这种情况:

  1. 延迟输入事件
  2. 乱序事件

如果实际上存在延迟或乱序的输入事件,请确保您的事件排序策略已正确配置为包含或删除此类事件。 您还应该尝试查看输入数据的样本,以查看时间戳是否符合预期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM