簡體   English   中英

Kusto 查詢將時間序列數據聚類到“會話”中並分配 sessionId

[英]Kusto query to cluster time-series data into 'sessions' and assign sessionId

我有以下格式的時間序列數據:

數據表(元素:字符串,時間戳:日期時間,值:長)

對於每個元素,都有一個時間戳和時間戳的關聯 如果一個元素的 2 個連續時間戳相隔 X 分鍾以上,則它們被認為是不同會話的一部分(較小的時間戳是前一個 session 的結束,較大的時間戳是新會話的開始)。 對於每個這樣的 session,我想計算 SessionId(基於 session 開始或隨機 guid)、session 開始和 session 結束。

示例:(考慮與之前間隔 30 分鍾的時間戳被視為新會話的開始)

輸入:

 Element           Timestamp       Value
Element-A   2022-03-25 06:15:00     10
Element-A   2022-03-25 06:30:00     10
Element-A   2022-03-25 06:45:00     10
Element-A   2022-03-25 08:15:00     10
Element-A   2022-03-25 08:30:00     10
Element-A   2022-03-25 08:45:00     10
Element-B   2022-03-25 07:15:00     10
Element-B   2022-03-25 07:30:00     10
Element-B   2022-03-25 07:45:00     10
Element-B   2022-03-25 09:15:00     10
Element-B   2022-03-25 09:30:00     10
Element-B   2022-03-25 09:45:00     10

預計 output:

 Element           Timestamp       value    SessionId           SessionStart             SessionEnd
Element-A   2022-03-25 06:15:00     10        guid-1        2022-03-25 06:15:00      2022-03-25 06:45:00
Element-A   2022-03-25 06:30:00     10        guid-1        2022-03-25 06:15:00      2022-03-25 06:45:00
Element-A   2022-03-25 06:45:00     10        guid-1        2022-03-25 06:15:00      2022-03-25 06:45:00
Element-A   2022-03-25 08:15:00     10        guid-2        2022-03-25 08:15:00      2022-03-25 08:45:00
Element-A   2022-03-25 08:30:00     10        guid-2        2022-03-25 08:15:00      2022-03-25 08:45:00
Element-A   2022-03-25 08:45:00     10        guid-2        2022-03-25 08:15:00      2022-03-25 08:45:00
Element-B   2022-03-25 07:15:00     10        guid-3        2022-03-25 07:15:00      2022-03-25 07:45:00
Element-B   2022-03-25 07:30:00     10        guid-3        2022-03-25 07:15:00      2022-03-25 07:45:00
Element-B   2022-03-25 07:45:00     10        guid-3        2022-03-25 07:15:00      2022-03-25 07:45:00
Element-B   2022-03-25 09:15:00     10        guid-4        2022-03-25 09:15:00      2022-03-25 09:45:00
Element-B   2022-03-25 09:30:00     10        guid-4        2022-03-25 09:15:00      2022-03-25 09:45:00
Element-B   2022-03-25 09:45:00     10        guid-4        2022-03-25 09:15:00      2022-03-25 09:45:00

數據量很大。 請建議使用性能高效的查詢來實現這一點。

根據 OP 評論,添加僅包含摘要部分的解決方案。 請注意 -

  1. ElementSessionIndex的組合是獨一無二的,可以與SessionId互換使用(基於new_guid()
  2. 由於此解決方案基於匯總,因此可以輕松收集每個 session 的其他信息,例如每個 session 的事件數、每個 session 的最小/最大/平均值、值高於 x 的事件數(基於count_if )等。

datatable (Element:string, Timestamp:datetime, Value:int)
[
     "Element-A" ,"2022-03-25 06:15:00" ,10
    ,"Element-A" ,"2022-03-25 06:30:00" ,10
    ,"Element-A" ,"2022-03-25 06:45:00" ,10
    ,"Element-A" ,"2022-03-25 08:15:00" ,10
    ,"Element-A" ,"2022-03-25 08:30:00" ,10
    ,"Element-A" ,"2022-03-25 08:45:00" ,10
    ,"Element-B" ,"2022-03-25 07:15:00" ,10
    ,"Element-B" ,"2022-03-25 07:30:00" ,10
    ,"Element-B" ,"2022-03-25 07:45:00" ,10
    ,"Element-B" ,"2022-03-25 09:15:00" ,10
    ,"Element-B" ,"2022-03-25 09:30:00" ,10
    ,"Element-B" ,"2022-03-25 09:45:00" ,10
]
| partition hint.strategy=shuffle by Element
(
    order by Timestamp asc
    | extend SessionIndex = row_cumsum(iff(Timestamp - prev(Timestamp) > 30m, 1, 0))
    | summarize SessionStart = min(Timestamp), SessionEnd = max(Timestamp) by SessionIndex
    | extend Element, SessionId = new_guid()
    | project-reorder Element
)

小提琴

元素 會話索引 會話開始 會話結束 會話Id
元素-A 0 2022-03-25T06:15:00Z 2022-03-25T06:45:00Z 5d43e356-9aae-40cb-9e2e-bd2741cc9934
元素-B 0 2022-03-25T07:15:00Z 2022-03-25T07:45:00Z df83db35-c292-4bee-a14e-0ebc2b7ef6b5
元素-A 1個 2022-03-25T08:15:00Z 2022-03-25T08:45:00Z 40dbaa02-b110-4e99-8696-2505a2995553
元素-B 1個 2022-03-25T09:15:00Z 2022-03-25T09:45:00Z 59d6fdeb-a596-4fab-97e5-d9057519c6c0

你可以從這個開始。
您數據的人口統計特征(記錄數、元素數、每個元素的會話數)將決定該解決方案針對您的特定需求的優化程度。

datatable (Element:string, Timestamp:datetime, Value:int)
[
     "Element-A" ,"2022-03-25 06:15:00" ,10
    ,"Element-A" ,"2022-03-25 06:30:00" ,10
    ,"Element-A" ,"2022-03-25 06:45:00" ,10
    ,"Element-A" ,"2022-03-25 08:15:00" ,10
    ,"Element-A" ,"2022-03-25 08:30:00" ,10
    ,"Element-A" ,"2022-03-25 08:45:00" ,10
    ,"Element-B" ,"2022-03-25 07:15:00" ,10
    ,"Element-B" ,"2022-03-25 07:30:00" ,10
    ,"Element-B" ,"2022-03-25 07:45:00" ,10
    ,"Element-B" ,"2022-03-25 09:15:00" ,10
    ,"Element-B" ,"2022-03-25 09:30:00" ,10
    ,"Element-B" ,"2022-03-25 09:45:00" ,10
]
| partition hint.strategy=shuffle by Element
(
    order by Timestamp asc
    | extend SessionIndex = row_cumsum(iff(Timestamp - prev(Timestamp) > 30m, 1, 0))
    | summarize min(Timestamp), max(Timestamp), make_list(Timestamp), make_list(Value) by SessionIndex
    | extend SessionId = new_guid()
    | mv-apply Timestamp = list_Timestamp to typeof(datetime), Value = list_Value to typeof(int) on (project Timestamp, Value)
    | project Element, Timestamp, Value, SessionStart = min_Timestamp, SessionEnd = max_Timestamp, SessionId, SessionIndex
)
元素 時間戳 價值 會話開始 會話結束 會話ID 會話索引
元素-A 2022-03-25T06:15:00Z 10 2022-03-25T06:15:00Z 2022-03-25T06:45:00Z 1ac146b1-24fa-427e-b2b3-663d83297d4c 0
元素-A 2022-03-25T06:30:00Z 10 2022-03-25T06:15:00Z 2022-03-25T06:45:00Z 1ac146b1-24fa-427e-b2b3-663d83297d4c 0
元素-A 2022-03-25T06:45:00Z 10 2022-03-25T06:15:00Z 2022-03-25T06:45:00Z 1ac146b1-24fa-427e-b2b3-663d83297d4c 0
元素-B 2022-03-25T07:15:00Z 10 2022-03-25T07:15:00Z 2022-03-25T07:45:00Z cbef109a-73bc-4067-9e7f-ebada6aa444e 0
元素-B 2022-03-25T07:30:00Z 10 2022-03-25T07:15:00Z 2022-03-25T07:45:00Z cbef109a-73bc-4067-9e7f-ebada6aa444e 0
元素-B 2022-03-25T07:45:00Z 10 2022-03-25T07:15:00Z 2022-03-25T07:45:00Z cbef109a-73bc-4067-9e7f-ebada6aa444e 0
元素-A 2022-03-25T08:15:00Z 10 2022-03-25T08:15:00Z 2022-03-25T08:45:00Z c53fba2e-b82e-418c-9380-1e732be8fcb5 1個
元素-A 2022-03-25T08:30:00Z 10 2022-03-25T08:15:00Z 2022-03-25T08:45:00Z c53fba2e-b82e-418c-9380-1e732be8fcb5 1個
元素-A 2022-03-25T08:45:00Z 10 2022-03-25T08:15:00Z 2022-03-25T08:45:00Z c53fba2e-b82e-418c-9380-1e732be8fcb5 1個
元素-B 2022-03-25T09:15:00Z 10 2022-03-25T09:15:00Z 2022-03-25T09:45:00Z 4ab89211-4378-45d3-8ac7-a570942e2807 1個
元素-B 2022-03-25T09:30:00Z 10 2022-03-25T09:15:00Z 2022-03-25T09:45:00Z 4ab89211-4378-45d3-8ac7-a570942e2807 1個
元素-B 2022-03-25T09:45:00Z 10 2022-03-25T09:15:00Z 2022-03-25T09:45:00Z 4ab89211-4378-45d3-8ac7-a570942e2807 1個

小提琴

暫無
暫無

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

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