我在 Azure 数据资源管理器中有一个表,其中存储了所有值记录。如果删除值,记录也会存储/标记在那里。
我创建了一个物化视图,以便我可以对此进行查询。现在我正在研究一个物化视图,以确保它已经根据“Isdeleted”和最新的“UTCInsertDate”被过滤掉
我无法让它在所有场景下都工作。绿色的是 MaterializedView 中应该有的内容(所有红色记录都应该从物化视图中过滤掉!)。
在这里,我想查看 ID = 1250948 的最后一个未删除的值(即绿色的值)。应忽略前两个值,因为它们是在“IsDeleted”值之前插入的。
在这种情况下,我根本不想看到此 ID 的任何值,因为“IsDeleted”具有最新的 UTCInsertDate,因此此“IsDeleted”的所有其他值都不再有效。
是否可以在物化视图中实现这一点以及如何实现?
代码:
.create materialized-view MVName on table T
{
T
| join kind=inner (
T
| where IsDeleted
| summarize max_UTCInsertDate = max(UTCInsertDate) by ID
) on ID
| where UTCInsertDate >= max_UTCInsertDate
| summarize arg_max(UTCInsertDate, *) by ID
}
此查询首先获取带有
IsDeleted=true
的记录,然后为筛选行上的每个 UTCInsertDate
获取最新的 ID
。然后,该子查询的结果与原始表的 ID
列连接。连接操作之后的 where
子句会过滤掉在每个 IsDeleted=true
带有 ID
的行之前插入的所有记录。它通过将每个记录的 UTCInsertDate
与 max_UTCInsertDate
进行比较来实现此目的。 (对应 UTCInsertDate
记录的 IsDeleted=true
)。最后,查询将剩余记录按 ID
进行分组,并使用 arg_max()
函数根据 ID
列获取每个 UTCInsertDate
的最新记录。