Kusto中面向表格数据的UDF列值相等比较问题排查求助
问题排查
- 入参类型不匹配:你定义的
MyFilter函数要求入参为包含x、y两个dynamic类型列的表对象,但调用时直接传入了ObjJson、ObjJson1两个标量列值,类型完全不兼容导致执行报错。 - 返回值逻辑错误:该函数返回的是过滤后的表结构,无法直接和布尔值
true做相等判断,where子句仅支持接收布尔类型的返回结果。
正确实现方案
绝大多数场景下你只需要将函数修改为标量自定义函数即可满足需求,无需定义为表函数:
// 定义标量函数:接收两个dynamic类型参数,返回布尔判断结果 let MyFilter = (x:dynamic, y:dynamic) { isnotempty(tostring(x[0].key)) and isnotempty(tostring(y[0].key)) and x[0].key == y[0].key }; // 直接在过滤条件中调用标量函数 tabl | where MyFilter(ObjJson, ObjJson1)
如果业务场景确实需要使用表格式自定义函数,可以通过invoke运算符调用,参考写法如下:
let MyFilter = (X:(x:dynamic, y:dynamic)) { X | where isnotempty(tostring(x[0].key)) and isnotempty(tostring(y[0].key)) and x[0].key == y[0].key }; tabl // 先将需要匹配的列重命名为函数要求的列名,保留其他原始列 | project x = ObjJson, y = ObjJson1, * | invoke MyFilter() // 过滤完成后可删除临时重命名的列 | project-away x, y
内容的提问来源于stack exchange,提问作者Jannat Arora
相关产品推荐
相关产品推荐

