物化视图(Kusto):过滤掉视图中已删除的值,仅查看最后一个未删除的值

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

我在 Azure 数据资源管理器中有一个表,其中存储了所有值记录。如果删除值,记录也会存储/标记在那里。

我创建了一个物化视图,以便我可以对此进行查询。现在我正在研究一个物化视图,以确保它已经根据“Isdeleted”和最新的“UTCInsertDate”被过滤掉

我无法让它在所有场景下都工作。绿色的是 MaterializedView 中应该有的内容(所有红色记录都应该从物化视图中过滤掉!)。

在这里,我想查看 ID = 1250948 的最后一个未删除的值(即绿色的值)。应忽略前两个值,因为它们是在“IsDeleted”值之前插入的。

在这种情况下,我根本不想看到此 ID 的任何值,因为“IsDeleted”具有最新的 UTCInsertDate,因此此“IsDeleted”的所有其他值都不再有效。

是否可以在物化视图中实现这一点以及如何实现?

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

代码:

.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
的最新记录。

演示

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