You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何一次性将Kusto函数应用于多个objectId值

批量应用Kusto函数到多个objectId的方法

问题背景

现有如下Kusto函数,用于判断指定objectId是否已被删除:

let Deleted = (o:string){
    toscalar(cluster('cA').database('dA').Table1
    | where objectId == o
    | where step in ("Completed", "CleanedUp")
    | count) > 0
};

同时有一组需要检查的objectId,示例用dynamic数组定义:

let objectIds = dynamic([
  "123",
  "159",
  "876",
  ...
  "982"
]);

需要实现对每个objectId批量应用该函数,可通过修改函数或编写查询实现。


方案1:修改函数使其接收列表

将函数改为接收dynamic数组,通过一次查询批量处理所有ID,性能远优于单个调用:

let DeletedList = (ids:dynamic){
    cluster('cA').database('dA').Table1
    | where objectId in (ids)
    | where step in ("Completed", "CleanedUp")
    | summarize hasCompletedOrCleanedUp = count() > 0 by objectId
    | right join (
        print objectId = ids
        | mv-expand objectId to typeof(string)
    ) on objectId
    | project objectId, isDeleted = coalesce(hasCompletedOrCleanedUp, false)
};

// 使用示例
let objectIds = dynamic(["123", "159", "876", "982"]);
DeletedList(objectIds)

该方案会返回每个objectId对应的删除状态,未匹配到记录的ID会被标记为false。


方案2:不修改原函数,用查询实现批量应用

如果不想改动原有函数,可将dynamic数组展开后逐个调用函数:

let Deleted = (o:string){
    toscalar(cluster('cA').database('dA').Table1
    | where objectId == o
    | where step in ("Completed", "CleanedUp")
    | count) > 0
};

let objectIds = dynamic(["123", "159", "876", "982"]);
print objectId = objectIds
| mv-expand objectId to typeof(string)
| extend isDeleted = Deleted(objectId)
| project objectId, isDeleted

注意:此方式会对每个ID单独发起查询,当ID数量较多时性能较差,优先推荐方案1。

内容的提问来源于stack exchange,提问作者joseville

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:34:53