azure Kusto Query根据日期范围列表连接两个数据表

fumotvh3  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(100)

在Azure数据资源管理器中有两个数据表:
1.事件列表-->在特定时间发生的单个事件
1.日期范围列表-->机器处于活动状态的时间范围列表
我的目标是从表1中找到所有事件,这些事件发生在机器处于活动状态的时隙内。
这就是我如何设置两个数据表的查询:

let events = NOTIFICATIONTABLE
| where TimeStamp > ago(365d) 
| GUID == 'eventNotification' 
| project TimeStamp, Notification;
let timeslots = ACTIVITYTABLE
| where StartTime> ago(365d)
| where GUID == "machineActive"
| project StarTime, EndTime

将这些合并组合到查询的最佳方法是什么?结果应如下:给予来自表事件的所有通知,其中TimeStamp在表时隙中的一个日期范围(StartTime到EndTime)内。

vuktfyat

vuktfyat1#

这是一个很好的问题,看起来你的逻辑到目前为止还不错。我的方法是使用Join,特别是交叉连接。

let NOTIFICATIONTABLE = datatable (TimeStamp:datetime, GUID:string, Notification:string) [
datetime(2022-8-1 09:00:00), 'eventNotification', 'Bad Network Traffic Detected',
datetime(2023-9-1 10:30:00), 'eventNotification', 'Bad Network Traffic Detected',
datetime(2023-10-1 17:30:00), 'eventNotification', 'Bad Network Traffic Detected'
];
let ACTIVITYTABLE = datatable (StartTime:datetime, EndTime:datetime, GUID:string, Computername:string) [
datetime(2023-4-1 08:30:00), datetime(2023-4-1 17:30:00), 'machineActive', 'WS01',
datetime(2023-5-1 08:30:00), datetime(2023-5-1 17:30:00), 'machineActive', 'WS01',
datetime(2023-6-1 08:30:00), datetime(2023-6-1 17:30:00), 'machineActive', 'WS02',
datetime(2023-7-1 08:30:00), datetime(2023-7-1 17:30:00), 'machineActive', 'WS03',
datetime(2023-8-1 08:30:00), datetime(2023-8-1 17:30:00), 'machineActive', 'WS04',
datetime(2023-9-1 08:30:00), datetime(2023-9-1 17:30:00), 'machineActive', 'WS04',
datetime(2023-9-1 08:30:00), datetime(2023-9-1 17:30:00), 'machineActive', 'WS03',
datetime(2023-10-1 08:30:00), datetime(2023-10-1 17:30:00), 'machineActive', 'WS05'
];
let events = NOTIFICATIONTABLE
| where TimeStamp > ago(365d)
| where GUID == 'eventNotification'
| project TimeStamp, Notification
| extend JoinHere = 1; //Cross join
let timeslots = ACTIVITYTABLE
| where StartTime > ago(365d)
| where GUID == 'machineActive'
| project StartTime, EndTime, Computername
| extend JoinHere = 1; //Cross join
events
| join kind=leftouter (timeslots) on JoinHere
| where TimeStamp between (StartTime .. EndTime)
| project-away JoinHere*

这应该会给你给予如下的输出。
| 时间戳|通知|startTime| EndTime| ComputerName|
| --|--|--|--|--|
| 2023-09-01T10:30:00.000000Z|检测到不良网络流量|2023-09-01T08:30:00.000000Z| 2023-09-01T17:30:00.000000Z| WS04|
| 2023-09-01T10:30:00.000000Z|检测到不良网络流量|2023-09-01T08:30:00.000000Z| 2023-09-01T17:30:00.000000Z| WS03|
| 2023-10-01T17:30:00.000000Z|检测到不良网络流量|2023-10-01T08:30:00.000000Z| 2023-10-01T17:30:00.000000Z| WS-05|

相关问题