如何在Kusto查询中逐行调用tabular函数处理全表数据
Kusto逐行传参调用自定义函数实现方法
根据你的使用场景,分两种情况实现即可:
- 如果你的
Function1是标量函数(传入参数返回单个值),直接通过extend调用即可,会自动逐行传入对应列的值计算结果:
// 已修正原示例中start、end字段类型声明不匹配的问题 datatable(id:string, start:datetime, end:datetime) [ 'Z213',datetime(2021-08-06T02:12:37.1597030Z),datetime(2021-08-06T17:37:21.8962890Z), 'Z213',datetime(2021-08-06T00:00:25.7896310Z),datetime(2021-08-06T01:59:50.1172850Z), 'Z213',datetime(2021-08-06T02:04:37.1243340Z),datetime(2021-08-06T02:12:37.1352020Z), 'Z213',datetime(2021-08-06T17:45:19.7289570Z),datetime(2021-08-06T23:56:44.8047730Z), 'Z213',datetime(2021-08-06T17:43:23.7238020Z),datetime(2021-08-06T17:43:28.7256000Z), 'Z213',datetime(2021-08-06T02:04:17.1238770Z),datetime(2021-08-06T02:04:24.1256730Z), 'Z213',datetime(2021-08-06T02:02:15.1199760Z),datetime(2021-08-06T02:02:15.1204780Z), ] | extend function_result = Function1(id, start, end)
- 如果你的
Function1是表值函数(传入参数返回表结构),需要开启行上下文调用,写法如下:
datatable(id:string, start:datetime, end:datetime) [ 'Z213',datetime(2021-08-06T02:12:37.1597030Z),datetime(2021-08-06T17:37:21.8962890Z), 'Z213',datetime(2021-08-06T00:00:25.7896310Z),datetime(2021-08-06T01:59:50.1172850Z), 'Z213',datetime(2021-08-06T02:04:37.1243340Z),datetime(2021-08-06T02:12:37.1352020Z), 'Z213',datetime(2021-08-06T17:45:19.7289570Z),datetime(2021-08-06T23:56:44.8047730Z), 'Z213',datetime(2021-08-06T17:43:23.7238020Z),datetime(2021-08-06T17:43:28.7256000Z), 'Z213',datetime(2021-08-06T02:04:17.1238770Z),datetime(2021-08-06T02:04:24.1256730Z), 'Z213',datetime(2021-08-06T02:02:15.1199760Z),datetime(2021-08-06T02:02:15.1204780Z), ] | invoke Function1(row_ctx(id, start, end))
如果需要保留原表的id、start、end字段,可改用mv-apply写法:
| mv-apply function_output = Function1(id, start, end) on ( project function_output )
注意:调用函数前请确认函数入参类型和表对应列的类型完全一致,不一致的话先通过
tostring()/todatetime()等函数做类型转换再传参。
内容的提问来源于stack exchange,提问作者kalpana
相关产品推荐
相关产品推荐

