使用Kusto查询实现部署后的Kusto表数据变更追踪
实现Kusto表每日变更追踪查询
核心逻辑
要每日提取变更行,需将当日数据与前一日数据按ColumnA关联,对比除Modifiedat外的业务列差异,筛选出存在变更的记录。
通用Kusto查询
// 定义目标日期(每日执行时可替换为当天,如now()) let target_date = datetime(2023-12-15); let prev_date = target_date - 1d; // 获取当日数据 let current_data = YourTableName | where Modifiedat == target_date; // 获取前一日数据 let previous_data = YourTableName | where Modifiedat == prev_date; // 关联并筛选变更行 current_data | join kind=inner (previous_data) on ColumnA | where ColumnB != ColumnB1 or ColumnC != ColumnC1 or ColumnD != ColumnD1 | project ColumnA, // 展示各列新旧值对比 Current_ColumnB = ColumnB, Previous_ColumnB = ColumnB1, Current_ColumnC = ColumnC, Previous_ColumnC = ColumnC1, Current_ColumnD = ColumnD, Previous_ColumnD = ColumnD1, ModifiedDate = target_date
关键说明
- 时间字段优化:若
Modifiedat是字符串格式(如示例中的"Dec15"),需将日期匹配逻辑改为字符串相等判断;建议将Modifiedat字段改为datetime类型,避免格式不一致导致的匹配错误。 - 关联类型选择:用
inner join仅对比两天都存在的ColumnA行;若需追踪新增行,可改用left join并筛选isnull(ColumnB1)的记录。 - 差异判定:逐一对比业务列的新旧值,只要任意一列存在差异,即判定为变更行。
适配示例数据的查询
针对你提供的字符串格式Modifiedat数据,调整后的查询如下:
let target_day = "Dec15"; let prev_day = "Dec14"; let current_data = YourTableName | where Modifiedat == target_day; let previous_data = YourTableName | where Modifiedat == prev_day; current_data | join kind=inner (previous_data) on ColumnA | where ColumnB != ColumnB1 or ColumnC != ColumnC1 or ColumnD != ColumnD1 | project ColumnA, Current_ColumnB = ColumnB, Previous_ColumnB = ColumnB1, Current_ColumnC = ColumnC, Previous_ColumnC = ColumnC1, Current_ColumnD = ColumnD, Previous_ColumnD = ColumnD1, ModifiedDay = target_day
执行后会返回Row4的变更记录(ColumnC从C5变为C4),与你描述的需求一致。
内容的提问来源于stack exchange,提问作者Gunjan Popli
相关产品推荐
相关产品推荐

