【问题标题】:Date time difference within a column in Azure Monitor Logs (Kusto Query Language)Azure Monitor 日志中列内的日期时间差(Kusto 查询语言)
【发布时间】:2019-10-23 09:17:31
【问题描述】:

我在 Azure Monitor 日志中有这种格式的点击流数据:

       Timestamp             Category  Session_ID    Step_Name
10/22/2019, 9:28:14.868 AM      A        ++9Ti        step 1    
10/22/2019, 9:28:18.034 AM      A        ++9Ti        step 2    
10/22/2019, 9:28:22.487 AM      A        ++9Ti        step 3
10/23/2019, 7:02:02.527 AM      B        ++MoY        step 1    
10/23/2019, 7:02:09.244 AM      B        ++MoY        step 2    
10/23/2019, 7:02:21.156 AM      B        ++MoY        step 3        <-- 
10/23/2019, 7:02:27.195 AM      B        ++MoY        step 3        <--
10/23/2019, 7:15:13.544 AM      A        ++0a3        step 1    
10/23/2019, 7:15:35.438 AM      A        ++0a3        step 2        

我需要获取消费者在类别中的每个步骤上花费的平均时间

此外,当重复步骤时(如 session_ID = '++MoY' 中的步骤 3),我们需要在计算平均值时采用最新的时间戳。

示例:A 类第 2 步所用的平均时间为 (3.166 + 21.894)/2 = 12.53 秒。 (注意:时间戳给出了完成步骤的时间)

【问题讨论】:

    标签: azure datetime azure-data-explorer kql


    【解决方案1】:

    你可以试试下面的方法

    a) 使用arg_max() 按步骤/类别获取最新的

    b) 在order by 之后使用prev() 计算每个步骤的持续时间

    datatable(Timestamp:datetime, Category:string, Session_ID:string, Step_Name:string)
    [
        datetime(10/22/2019, 9:28:14.868 AM), 'A', '++9Ti', 'step 1',
        datetime(10/22/2019, 9:28:18.034 AM), 'A', '++9Ti', 'step 2',
        datetime(10/22/2019, 9:28:22.487 AM), 'A', '++9Ti', 'step 3',
        datetime(10/23/2019, 7:02:02.527 AM), 'B', '++MoY', 'step 1',
        datetime(10/23/2019, 7:02:09.244 AM), 'B', '++MoY', 'step 2',
        datetime(10/23/2019, 7:02:21.156 AM), 'B', '++MoY', 'step 3',
        datetime(10/23/2019, 7:02:27.195 AM), 'B', '++MoY', 'step 3',
        datetime(10/23/2019, 7:15:13.544 AM), 'A', '++0a3', 'step 1',
        datetime(10/23/2019, 7:15:35.438 AM), 'A', '++0a3', 'step 2',
    ]
    | summarize arg_max(Timestamp, *) by Step_Name, Session_ID
    | order by Session_ID asc, Timestamp asc
    | extend duration = iff(Session_ID == prev(Session_ID), Timestamp - prev(Timestamp), 0s)
    | summarize avg(duration) by Step_Name, Category
    | where Step_Name == "step 2" and Category == "A"
    

    【讨论】:

    • 像魅力一样工作谢谢。我有一个疑问,我试图以这种方式旋转表格:|distinct timestamp, Category, session_ID, Step_Name |evaluate pivot(Step_Name, max(timestamp)) 但我无法对这些透视列进行进一步的操作。有没有办法对数据透视列进行操作,或者这是 Azure 中的限制?
    • “无法进行进一步操作...”是什么意思?您能否添加有关您尝试做什么、预期结果是什么以及实际结果是什么的信息?
    • 减法之类的操作:| extend Step_2 Duration = Step 1 - Step 2 新列名(即步骤名称)似乎没有被识别为正确的列名。另一个操作是对这些新列进行排序...
    • 实体名称中不能有空格,除非实体名称被正确转义。见:docs.microsoft.com/en-us/azure/kusto/query/schema-entities/…。在这种情况下,您应该使用| extend ['Step_2 Duration'] = ['step 1'] - ['step 2']
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多