Kusto如何避免额外project步骤与重复函数调用生成关联计算列
解决方案
你可以选择以下两种符合要求的实现方式,两种方案都没有实际的性能损耗:
方案1:使用extend + project组合(推荐)
Kusto中extend算子用于新增计算列,搭配一次project输出目标列即可,这种写法可读性最高,且split只会执行一次:
datatable(col:string) ["one,two,three"] | extend arr = split(col, ',') | project c1 = arr[0], c2 = arr[1], c3 = arr[2]
你不需要担心两个算子带来的额外开销,Kusto的查询优化器会自动将这两个算子的逻辑合并执行,不会产生冗余计算。
方案2:直接重复调用split函数
Kusto编译器内置了公共子表达式消除优化,只要是相同入参的同一个函数调用,哪怕写多次,实际执行时只会计算一次,不会产生你担心的性能损耗:
datatable(col:string) ["one,two,three"] | project c1=split(col,',')[0] , c2=split(col,',')[1], c3=split(col,',')[2]
这种写法只有一个project算子,符合你减少步骤的要求,性能和多步骤写法完全一致。
注:Kusto语法本身不支持在同一个算子内引用当前算子刚定义的计算列,所以无法在单个project内先定义数组再引用数组生成多列,以上两种是当前最优的实现方案。
内容的提问来源于stack exchange,提问作者Dhiraj
相关产品推荐
相关产品推荐

