У меня есть таблица, которая заполняется примерно каждый час новыми обновлениями на каждом диске системы. Я хочу изолировать два экземпляра этого обновления и посмотреть, изменились ли за это время какие-либо поля для каждого диска (идентифицированные уникальным идентификатором диска).
Например, следующий запрос Kusto показывает, чего я хочу достичь (в моей проблеме T1 и T2 будут взяты из одной и той же таблицы, но я хочу, чтобы это работало именно так)
let T1 = datatable(DiskId:int, IsLeased:bool, NumSnapshots:int) [
1, правда, 2,
2, ложь, 0,
3, правда, 0,
4, правда, 1,
];
let T2 = datatable(DiskId:int, IsLeased:bool, NumSnapshots:int) [
1, правда, 0,
2, правда, 0,
3, правда, 0,
4, правда, 1,
];
Т1
| присоединиться kind = внутренний (T2) на DiskId
| проект DiskId, IsLeasedCheck = IsLeased == IsLeased1, NumSnapshotsCheck = NumSnapshots == NumSnapshots1
| где IsLeasedCheck == false или NumSnapshotsCheck == false
получу вывод следующим образом, чтобы я мог сразу определить, какое свойство изменилось, если оно было изменено.
Однако в моем случае мне нужно сделать это для нескольких столбцов, я хотел спросить, можно ли это сделать менее утомительно в кусто. Мне не нужно решать ее именно таким способом, мне просто нужно знать, изменились ли какие-либо поля каким-либо образом.
Если вы просто хотите выяснить, изменился ли какой-либо столбец, вы можете объединить все столбцы и сравнить их:
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)
Это даст вам представление хотя бы об измененных строках: