用于更新功能的代码的不同结果

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

我有一个查询,它是使用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的单个查询,则会得到正确的结果。

所以我很困惑从哪里开始寻找错误。

azure kusto azure-data-explorer
1个回答
0
投票

直接在表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]命令),并且不使用更新策略。

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