【问题标题】:Rename all column names by adding a string in KQL/Kusto/Data Explorer通过在 KQL/Kusto/Data Explorer 中添加字符串来重命名所有列名
【发布时间】:2021-11-05 15:10:44
【问题描述】:

我正在加入 2 个表,它们都有数百个名称相似的列。我想更改每个表中的所有列名以包含表名。为了使查询保持简单,我不想明确地调用每个列名。有没有办法在不显式调用每一列的情况下将表名附加到所有列名?

例如:

let T1 = datatable (Key:string , Col2:string , Col3:string )[
"1", "b", "c",
"2", "e", "f",
"3", "h", "i"];
let T2 = datatable (Key:string , Col2:string , Col3:string )[
"1", "B", "C",
"2", "E", "F",
"4", "H", "I"];
T1 | join T2 on Key

结果:

Key Col2 Col3 Key1 Col21 Col31
1   b    c    1    B     C
2   e    f    2    E     F

期望的结果:

T1.Key T1.Col2 T1.Col3 T2.Key T2.Col2 T2.Col3
1      b       c       1      B       C
2      e       f       2      E       F

【问题讨论】:

    标签: azure-data-explorer kql kusto-explorer


    【解决方案1】:

    如果列的顺序对您来说并不重要,那么这是一种方法:

    let T1 = datatable (Key:string , Col2:string , Col3:string )
    [
      "1", "b", "c",
      "2", "e", "f",
      "3", "h", "i"
    ] 
    | project PackedRecord = todynamic(replace_regex(tostring(pack_all()), '"([a-zA-Z0-9_]*)":"', @'"T1_\1":"'))
    | evaluate bag_unpack(PackedRecord);
    let T2 = datatable (Key:string , Col2:string , Col3:string )
    [
      "1", "B", "C",
      "2", "E", "F",
      "4", "H", "I"
    ] 
    | project PackedRecord = todynamic(replace_regex(tostring(pack_all()), '"([a-zA-Z0-9_]*)":"', @'"T2_\1":"'))
    | evaluate bag_unpack(PackedRecord);
    let JoinTable = T1 | join kind=inner T2 on $left.T1_Key == $right.T2_Key;
    JoinTable
    

    结果:

    T1_Col2 T1_Col3 T1_Key T2_Col2 T2_Col3 T2_Key
    b c 1 B C 1
    e f 2 E F 2

    如果要对列重新排序,可以使用project-reorder

    【讨论】:

    • 上面的答案是可行的,但是,当我们将它应用于更大的数据集时,它会很慢。有没有办法在不打包整个数据集的情况下实现这一点?
    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 2021-09-07
    • 2013-06-15
    • 2020-05-27
    • 1970-01-01
    • 2021-09-07
    • 2018-12-24
    • 1970-01-01
    相关资源
    最近更新 更多