首页 > 解决方案 > 基于另一个计算列创建计算列

问题描述

我正在努力实现以下目标:-

datatable(col:string)
["one,two,three"]
| project array=split(col,',')
| project c1 = array[0],c2 = array[1], c3 = array[2]

这工作正常。但是有没有办法消除额外的步骤?基本上我希望能够使用类似以下的内容,但它是无效的,因为 Kusto 不允许我基于同一行中的另一个计算列创建计算列。目标是消除额外的步骤(希望它提高性能): -

datatable(col:string)
["one,two,three"]
| project array=split(col,',') , c1 = array[0],c2 = array[1], c3 = array[2]

我本可以执行以下有效代码,但随后我不必要地调用了 split 函数 3 次,这不是很有效:-

datatable(col:string)
["one,two,three"]
| project c1=split(col,',')[0] , c2=split(col,',')[1], c3=split(col,',')[2]

有什么方法可以避免同时创建额外的项目而不是多次调用计算其余列的函数?

标签: azure-data-explorer

解决方案


KQL 中无法在定义它们的同一行中使用计算列,但好消息是这不会对性能产生任何影响。

这里有助于提高性能的是更好的数据建模——数据应该作为单独的字符串列,或者至少是动态数据类型而不是字符串。

如果您无法在摄取时间内执行此操作,则可以使用物化视图更新策略对每条数据进行一次预处理,而不是每次运行查询时进行。


推荐阅读