簡體   English   中英

Stream 分析:使用TUMBLING時 WINDOW window的開始時間是根據stream中最早的時間還是job的開始時間?

[英]Stream Analytics:When using a TUMBLING WINDOW is the start time of the window start based on the earliest time in the stream or start time of the job?

語境

我一直在閱讀有關如何將 TUMBLINGWINDOW function 與 TIMSTAMP BY 子句一起使用的文檔,但似乎找不到關於如何計算包含 TUMBLING WINDOW 和 TIMESTAMP BY 字段的查詢的開始日期的明確解釋(必須有如果它存在於某處,則會錯過它)。

以下是我一直在查看的文檔的鏈接:

我在 TUMBLING WINDOW LINK 的時間考慮部分下面引用(這是我的問題出現的主要來源)

時間考慮

"Every window operation outputs event at the end of the window. The windows of Azure Stream Analytics are opened at the window start time and closed at the window end time. For example, if you have a 5 minute window from 12:00 AM to 12:05 AM 所有時間戳大於 12:00 AM 且時間戳為 12:05 AM(含)的事件都將包含在此 window 中。window 的 output 將是基於聚合 function 的單個事件,時間戳等於到 window 結束時間。window 的 output 事件的時間戳可以使用別名使用 System.Timestamp() 屬性投影到 SELECT 語句中。

它提到了 5 分鍾 window 但是似乎沒有詳細說明為什么 5 分鍾 windows 在這個時候開始,最重要的是這將如何概括。

注意:我知道這一點可能超出了本文檔的 scope,但我也沒有在其他地方找到對此的明確解釋。

問題)

假設我有以下代碼(從文檔中復制並稍作修改)

SELECT System.Timestamp() AS WindowEnd, TollId, COUNT(*)  
FROM Input TIMESTAMP BY EntryTime  
GROUP BY TumblingWindow(Duration(day, 1)), TollId
  • 如果我有 stream 數據,我創建的 window 的開始日期時間如何選擇/選擇?
    • 它是基於 EntryTime 中的最早時間(這是我按字段選擇的時間戳),然后從邏輯上 forms 開始包含初始 window還是取決於我何時開始我的 stream 作業運行(創建 windows從工作開始的時間和之后)?
  • 在它取決於我何時開始 stream 工作的情況下,什么是確保我啟動 window 的最佳方法,以便它包含初始(和后續)windows 中所需的所有數據(在我的場景中按實際全天聚合,例如從 2022-02-22 T00:00:00 開始到 2022-02-23 T00:00:00)?
    • 是否將開始時間設置為自定義和 select 它在一天的開始? 例如,我將作業設置為在 2022-02-22 T00:00:00 開始,這樣它將在此時啟動 window,以便第一個翻滾 window(以及后續翻滾)將包括從 2022-02 開始的全天數據-22 T00:00:00 按天計算。

思緒

到目前為止,我一直假設我在 TIMESTAMP BY 子句中選擇的任何字段(例如上面代碼片段中的 EntryTime)都會定義創建 window 的字段,然后根據選擇的 TUMBLINGWINDOW function arguments(例如天wise 在上面的代碼片段中)將處理所選時間戳字段的“窗口化”或切片方式。 Stream 然后,Analytics 將根據工作開始時源時間字段中出現的最早日期處理 window 創建(例如,如果數據存在,即使我在 2022-02-22 T09:00:00 UTC 開始工作對於 2022-02-21 日,那么對於當天的數據 2022-02-21T00:00:00 UTC 到 2022-02-22T00:00:00 UTC 的查詢將為 output,因為到此為止當前 window(2022-02-22T00:00:00 到 2022-02-23T00:00:00)將在 window 完成后填充。

從這里的文檔: https://learn.microsoft.com/en-us/stream-analytics-query/windowing-azure-stream-analytics#understanding-windows

每個 window 操作在 window 結束時輸出事件。 Azure windows Stream 分析在 window 開始時間打開,在 88234708391978 結束時間關閉。 例如,如果您有一個 5 分鍾的 window 從 12:00 AM 到 12:05 AM,所有時間戳大於 12:00 AM 到時間戳 12:05 AM 的事件都將包含在此 window 中。 output window 將是一個基於聚合 function 的單個事件,時間戳等於 window 結束時間。 window 的 output 事件的時間戳可以使用別名使用 System.Timestamp() 屬性投影到 SELECT 語句中。 每個 window 都會自動對齊到第零小時。 例如,一個 5 分鍾的翻滾 window 將自己對齊到 (12:00-12:05], (12:05-12:10], ..., 等等。

如果您有想要 output 的歷史數據,您可以將自定義查詢開始時間設置為流媒體源的最大緩存(通常為 7 天)或查詢上次停止的時間點,這樣您維護期間不要丟失任何數據 windows。

但是,該查詢將僅包含時間戳在查詢開始時間之后的 output 數據。

因此,假設您的第一個數據的時間戳為2022-02-20 01:23:00 ,第二個數據的時間戳為2022-02-21 15:08:00 您從2022-02-21 14:00:00開始您的流媒體工作,因此您的 10 分鍾 windows 以 21 日午夜為基礎,然后從那里開始 10 分鍾 windows。 output 直到 21 日的15:00 - 15:10 window 才執行任何查詢,因為這是第一個 window,它既發布查詢開始時間又包含數據。 在這種情況下,您可以看到 windows 是如何工作的,以及為什么具有2022-02-20 01:23:00時間戳的數據不會是 output。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM