代码之家  ›  专栏  ›  技术社区  ›  Dhiraj

基于另一个计算列创建计算列

  •  0
  • Dhiraj  · 技术社区  · 4 年前

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

    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]
    

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

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

    有没有办法避免同时创建额外的项目,而不对计算其余列的函数进行多次调用?

    0 回复  |  直到 4 年前
        1
  •  2
  •   rony l    4 年前

    在KQL中,无法在定义的同一行中使用计算列,但好消息是,这对性能没有任何影响。

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

    如果你不能在摄入时间内做到这一点,你可以使用 materialized views update policies 对于每个数据块只进行一次预处理,而不是每次运行查询。

    推荐文章