我有一个表,大约每小时都会在系统中的每个磁盘上填充新的更新。我想隔离此更新的两个实例,并查看每个磁盘(由唯一磁盘 ID 标识)的任何字段是否已更改。
例如,以下 kusto 查询显示了我想要实现的目标(在我的问题中,T1 和 T2 都来自同一个表,但这就是我希望它工作的方式)
let T1 = datatable(DiskId:int, IsLeased:bool, NumSnapshots:int) [
1,正确,2,
2、假、0、
3,正确,0,
4,正确,1,
];
让 T2 = datatable(DiskId:int, IsLeased:bool, NumSnapshots:int) [
1,正确,0,
2,正确,0,
3,正确,0,
4,正确,1,
];
T1
|在 DiskId 上加入 kind = 内部 (T2)
|项目 DiskId,IsLeasedCheck = IsLeased == IsLeased1,NumSnapshotsCheck = NumSnapshots == NumSnapshots1
|其中 IsLeasedCheck == false 或 NumSnapshotsCheck == false
将得到如下输出,这样我就可以一眼看出哪个属性(如果有)发生了变化。
磁盘ID | 已租赁检查 | NumSnapshots检查 |
---|---|---|
1 | 真实 | 假 |
2 | 假 | 真实 |
然而,就我而言,我需要对几个列执行此操作,我想问这是否可以在 kusto 中以不那么繁琐的方式完成。我不需要完全以这种方式解决它,我只需要知道是否有任何字段以任何方式发生了变化。
如果您只是想知道是否有任何列发生了更改,您可以合并所有列并进行比较:
let T = datatable(DiskId:int, IsLeased:bool, NumSnapshots:int, ingestion_date:datetime ) [
1, true, 2, datetime("2024-04-26"),
2, false, 0, datetime("2024-04-26"),
3, true, 0,datetime("2024-04-26"),
4, true, 1,datetime("2024-04-26"),
1, true, 0,datetime("2024-04-27"),
2, true, 0,datetime("2024-04-27"),
3, true, 0,datetime("2024-04-27"),
4, true, 1,datetime("2024-04-27")
];
T
| order by DiskId asc, ingestion_date asc
| extend new_setting = tostring(bag_pack("IsLeased", tostring(IsLeased), "NumSnapshots", tostring(NumSnapshots)))
| project-away IsLeased, NumSnapshots
| extend old_setting=prev(new_setting)
| where prev (new_setting) != new_setting and DiskId == prev(DiskId)
这至少可以让您查看已更改的行: