如何高效查找 Kusto 表中是否有任何字段发生更改?

问题描述 投票:0回答:1

我有一个表,大约每小时都会在系统中的每个磁盘上填充新的更新。我想隔离此更新的两个实例,并查看每个磁盘(由唯一磁盘 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 中以不那么繁琐的方式完成。我不需要完全以这种方式解决它,我只需要知道是否有任何字段以任何方式发生了变化。

kql azure-data-explorer
1个回答
0
投票

如果您只是想知道是否有任何列发生了更改,您可以合并所有列并进行比较:

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)

这至少可以让您查看已更改的行:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.