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

如何正确定义并调用接收多列表格参数的Kusto用户自定义函数

Kusto自定义函数传入多列参数的解决方法

问题核心原因

你当前的写法存在两处类型不匹配问题:

  • 你定义的foo函数入参是单个表格类型参数,要求入参为包含col1、col2两个字符串列的表,但你在summarize中传入的是Col1、Col2两个独立的标量列,和函数定义的入参类型完全不匹配。
  • Kusto的summarize聚合上下文内调用接收表格参数的函数,需要先把当前聚合分组内的指定列打包为表格格式再输入。

解决方案

方案1:保留表格类型入参的函数定义(适配分组内多行处理场景)

如果你的函数逻辑需要处理每个Col3+Col4分组内的所有Col1、Col2多行数据,只需要调整调用方式,用pack_table()函数把分组内的两列打包为符合入参要求的临时表即可:

let foo=(T1:(col1:string, col2:string))
{
    T1|count // 后续替换为你的复杂逻辑即可
};
someTable 
| summarize Res=foo(pack_table('col1', Col1, 'col2', Col2)) by Col3, Col4

pack_table()会自动把当前分组内的Col1、Col2值拼接为列名分别为col1、col2的临时表,完全匹配你定义的函数入参结构。

方案2:调整函数为标量入参(适配单行数据处理场景)

如果你的函数逻辑实际只需要处理单行的两个值,不需要操作多行表格,直接修改函数定义为接收两个标量参数即可,写法更简单:

let foo=(col1:string, col2:string)
{
    // 替换为针对单行两个值的处理逻辑即可
    strcat(col1, '_', col2)
};
someTable 
| extend Res=foo(Col1, Col2)
| summarize by Col3, Col4, Res

注意事项

  • 表格类型参数的函数不能直接接收分散的标量列,必须通过pack_table、datatable等方式构造为符合结构定义的表格再传入。
  • 如果逻辑仅涉及单行数据运算,优先使用标量入参的函数定义,执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:15:03