Kusto 无法将值投影到用户定义的函数中
Kusto cannot project a value into a user defined function
我在我们的域中有一个查询,但我无法让它工作。我使用数据表来模拟我的问题。
我正在尝试在用户定义的函数中使用投影值。
// this works
let f = (a:int) {
datatable (b:string, d:int) ["2015-12-31", 1, "2016-12-30", 2, "2014-01-05", 3]
| as dataset
| where d == a
| project b;
};
datatable (d:int) [1, 2, 3]
| as dataset
| project toscalar(f(2))
// this doesnt work, why is the 'd' not used (projected) in function q.
// if I add toscalar to the project it also doesnt work
let f = (a:int) {
datatable (b:string, d:int) ["2015-12-31", 1, "2016-12-30", 2, "2014-01-05", 3]
| as dataset
| where d == a
| project b;
};
datatable (d:int) [1, 2, 3]
| as dataset
| project toscalar(f(d))
我在这里错过了什么,我期待'| project' 对每个结果使用函数 (f)。
这里有 2 个需要修改的查询。
谢谢
这是用户定义函数的限制,toscalar() 不能为每个行值调用。你可以看看限制 here.
这里有一个变通方法,可以达到你的目的(你也可以直接用这个query link到运行):
let f = (T:(d:int)) {
let table1 = datatable (b:string, d:int) ["2015-12-31", 1, "2016-12-30", 2, "2014-01-05", 3]
| as dataset;
T
| join (
table1
) on d
| project b
};
datatable (d:int) [1, 2, 3]
| as dataset
| invoke f()
测试结果如下:
有一种方法可以实现这一点(无需连接),即使用 toscalar() 创建一个动态映射(属性 包),然后将其用作查找字典。
let f = (a:int) {
let _lookup = toscalar
(
datatable (b:string, d:int) ["2015-12-31", 1, "2016-12-30", 2, "2014-01-05", 3]
| extend p = pack(tostring(d), b)
| summarize make_bag(p)
);
_lookup[tostring(a)]
};
datatable (d:int) [1, 2, 3]
| project result=f(d)
我在我们的域中有一个查询,但我无法让它工作。我使用数据表来模拟我的问题。 我正在尝试在用户定义的函数中使用投影值。
// this works
let f = (a:int) {
datatable (b:string, d:int) ["2015-12-31", 1, "2016-12-30", 2, "2014-01-05", 3]
| as dataset
| where d == a
| project b;
};
datatable (d:int) [1, 2, 3]
| as dataset
| project toscalar(f(2))
// this doesnt work, why is the 'd' not used (projected) in function q.
// if I add toscalar to the project it also doesnt work
let f = (a:int) {
datatable (b:string, d:int) ["2015-12-31", 1, "2016-12-30", 2, "2014-01-05", 3]
| as dataset
| where d == a
| project b;
};
datatable (d:int) [1, 2, 3]
| as dataset
| project toscalar(f(d))
我在这里错过了什么,我期待'| project' 对每个结果使用函数 (f)。
这里有 2 个需要修改的查询。
谢谢
这是用户定义函数的限制,toscalar() 不能为每个行值调用。你可以看看限制 here.
这里有一个变通方法,可以达到你的目的(你也可以直接用这个query link到运行):
let f = (T:(d:int)) {
let table1 = datatable (b:string, d:int) ["2015-12-31", 1, "2016-12-30", 2, "2014-01-05", 3]
| as dataset;
T
| join (
table1
) on d
| project b
};
datatable (d:int) [1, 2, 3]
| as dataset
| invoke f()
测试结果如下:
有一种方法可以实现这一点(无需连接),即使用 toscalar() 创建一个动态映射(属性 包),然后将其用作查找字典。
let f = (a:int) {
let _lookup = toscalar
(
datatable (b:string, d:int) ["2015-12-31", 1, "2016-12-30", 2, "2014-01-05", 3]
| extend p = pack(tostring(d), b)
| summarize make_bag(p)
);
_lookup[tostring(a)]
};
datatable (d:int) [1, 2, 3]
| project result=f(d)