我有一个查询,它是使用python插件的Kusto和python代码的组合。此查询用于表B的更新策略中用于基于另一个表A更新此表的函数中。
当我直接在表A上使用查询并查看其结果时,得到的结果与表B的条目应该相同,但事实并非如此。
直接在表A上使用但未作为更新功能使用时,查询正常工作。
对此有什么解释吗?
这里有一些更多信息:
更新策略设置为:
.alter table B policy update @
'[{"IsEnabled": true, "Source": "A", "Query": "Update_groups()", "IsTransactional": false}]'
[ingestionbatch策略设置为:
.alter table groups_detection policy ingestionbatching @
'{ "MaximumBatchingTimeSpan": "00:10:00", "MaximumNumberOfItems": 50000, "MaximumRawDataSizeMB": 1024}'
该功能是一个存储的功能,并已设置为
.create-or-alter function with (folder = "Update", skipvalidation = "true") Update_tableB()
{
let …;
let…;
A
|where...
|...
| evaluate python(typeof(*),...
||order by timestamp desc
}
更新功能在表B中生成的结果不正确。 python代码似乎无法正常工作,但是如果我将函数体用作对表A的单个查询,则会得到正确的结果。
所以我很困惑从哪里开始寻找错误。
直接在表A上使用查询并查看其结果时所获得的结果,表B的条目应该相同,但不相同。]]
IIUC,听起来您正在进行的比较不是'apples-to-apples'。”>
update policy中的查询在摄取一批记录时被触发运行,其作用域是仅“查看”在该批次中摄取的记录。
来自文档:
更新策略的查询以特殊模式运行,在该模式下,查询仅将新摄取的数据“看到”到源表中。作为此查询的一部分,不可能查询源表已摄取的数据。快速执行此操作将导致二次摄取。
即:
运行时,not
T | evaluate python (...)
python插件的输入是all表T
中的记录。当您将完全相同的查询(T | evaluate python (...)
)指定为更新策略的一部分时,如果它是由提取操作触发的,则它将仅在T
中的一部分记录上运行(仅那些具有被摄取)。
现在,如果要提取此查询的结果(T | evaluate python (...)
),其中输入是all表中名为T
的记录,则可以使用ingestion-from-query(例如,运行[ C0]命令),并且不使用更新策略。