語境
我一直在閱讀有關如何將 TUMBLINGWINDOW 函式與 TIMSTAMP BY 子句一起使用的檔案,并且似乎無法找到關于如何計算包含 TUMBLING WINDOW 和 TIMESTAMP BY 欄位的查詢的開始日期的明確解釋(必須有如果它出現在某處,則錯過它)。
以下是我一直在查看的檔案的鏈接:
- 翻滾視窗https://docs.microsoft.com/en-us/stream-analytics-query/tumbling-window-azure-stream-analytics
- 時間戳來自https://docs.microsoft.com/en-us/stream-analytics-query/timestamp-by-azure-stream-analytics
我在 TUMBLING WINDOW LINK 中的 Time Consideration 部分下方參考(這是我提出問題的主要來源)
時間考慮
“每個視窗操作在視窗結束時輸出事件。Azure 流分析的視窗在視窗開始時間打開,在視窗結束時間關閉。例如,如果你有一個 5 分鐘的視窗,從上午 12:00 到12:05 AM 所有時間戳大于 12:00 AM 且直到時間戳 12:05 AM 的事件都將包含在此視窗內。視窗的輸出將是基于使用的聚合函式的單個事件,時間戳等于到視窗結束時間。視窗的輸出事件的時間戳可以通過使用別名的 System.Timestamp() 屬性投影在 SELECT 陳述句中。
它提到了一個 5 分鐘視窗,但似乎沒有詳細說明為什么此時啟動 5 分鐘視窗,最重要的是這將如何概括。
注意:我知道這一點可能超出了本檔案的范圍,但我也沒有設法在其他地方找到對此的明確解釋。
問題)
假設我有以下代碼(從檔案中復制并稍作修改)
SELECT System.Timestamp() AS WindowEnd, TollId, COUNT(*)
FROM Input TIMESTAMP BY EntryTime
GROUP BY TumblingWindow(Duration(day, 1)), TollId
- 如果我有資料流,我創建的視窗的開始日期時間如何選擇/選擇?
- 它是基于 EntryTime 內的最早時間(這是我選擇的欄位時間戳),然后它從邏輯上形成一個初始視窗來包含,還是取決于我何時開始運行我的流作業(創建視窗從作業開始和之后開始)?
- 在它取決于我何時啟動流作業的情況下,確保啟動視窗的最佳方式是什么,以便它包含初始(和后續)視窗中所需的所有資料(在我的場景中按實際全天聚合,例如2022-02-22 T00:00:00 到 2022-02-23 T00:00:00 開始)?
- 是否將開始時間設定為自定義并選擇它在一天開始時開始?例如,我將作業設定為在 2022-02-22 T00:00:00 開始,這樣它將在此時啟動視窗,以便第一個翻轉視窗(以及隨后的視窗)將包括從 2022-02 開始的全天資料-22 T00:00:00 按天計算。
想法
到目前為止,我一直假設我在 TIMESTAMP BY 子句中選擇的任何欄位(例如上面代碼片段中的 EntryTime)都將定義創建視窗的欄位,然后取決于所選的 TUMBLINGWINDOW 函式引數(例如 day明智地在上面的代碼片段中)將處理所選時間戳欄位如何“視窗化”或切片。然后,流分析將根據作業開始時源時間欄位中存在的最早日期處理視窗創建(例如,即使我在 2022-02-22 T09:00:00 UTC 開始作業,如果資料存在對于 2022-02-21 日,那么查詢將輸出 2022-02-21T00:00:00 UTC 到 2022-02-22T00:00:00 UTC 的那一天的資料,因為此時已經過去了,并且當前視窗(2022-02-22T00:00:00 到 2022-02-23T00:00:
uj5u.com熱心網友回復:
從這里的檔案:https ://docs.microsoft.com/en-us/stream-analytics-query/windowing-azure-stream-analytics#understanding-windows
每個視窗操作都會在視窗結束時輸出事件。Azure 流分析的視窗在視窗開始時間打開,在視窗結束時間關閉。例如,如果您有一個從上午 12:00 到上午 12:05 的 5 分鐘視窗,則時間戳大于上午 12:00 且時間戳為上午 12:05(含)的所有事件都將包含在此視窗中。視窗的輸出將是基于聚合函式的單個事件,其時間戳等于視窗結束時間。可以使用 System.Timestamp() 屬性使用別名在 SELECT 陳述句中投影視窗輸出事件的時間戳。每個視窗都會自動對齊到第零個小時。例如,一個 5 分鐘的滾動視窗將自己對齊到 (12:00-12:05] 、 (12:05-12:10], ... 等等。
如果您有要輸出的歷史資料,您可以將自定義查詢開始時間設定為流式源的最大快取(通常為 7 天)或查詢上次停止時的任何時間點,因此您在維護視窗期間不要丟失任何資料。
但是,查詢只會輸出時間戳在查詢開始時間之后的資料。
因此,假設您的第一個資料的時間戳為2022-02-20 01:23:00,第二個資料的時間戳為2022-02-21 15:08:00。您從 開始您的流式傳輸作業2022-02-21 14:00:00,因此您的 10 分鐘視窗基于 21 日午夜,然后從那里開始在 10 分鐘視窗中進行。查詢在 21 日之前不會輸出任何內容15:00 - 15:10,因為這是第一個發布查詢開始時間并包含資料的視窗。在這種情況下,您可以看到視窗是如何作業的,以及為什么您的帶有2022-02-20 01:23:00時間戳的資料不會被輸出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432835.html
上一篇:SQLServer-示例時間序列
