簡體   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