KQL/Kusto/Data Explorer中如何无需显式指定列为所有列名加表名前缀
实现方案
你可以通过Kusto内置的属性包打包/解包能力实现批量加前缀,无需显式声明每一列:
核心逻辑
- 用
bag_pack_all()将单表所有列打包为单个动态属性包,包的字段名设置为你要加的表前缀 - 用
bag_unpack()解包属性包,指定分隔符为.,自动生成「前缀.原列名」格式的列名 - 处理完两张表后正常关联即可
对应示例的完整可运行代码
let T1 = datatable (Key:string , Col2:string , Col3:string )[ "1", "b", "c", "2", "e", "f", "3", "h", "i"] // 批量给T1所有列加T1.前缀 | extend T1 = bag_pack_all() | project T1 | bag_unpack(T1, '.'); let T2 = datatable (Key:string , Col2:string , Col3:string )[ "1", "B", "C", "2", "E", "F", "4", "H", "I"] // 批量给T2所有列加T2.前缀 | extend T2 = bag_pack_all() | project T2 | bag_unpack(T2, '.'); // 按关联键关联,直接使用带前缀的列名即可 T1 | join T2 on T1.Key == T2.Key
运行效果
执行后会直接输出你要求的列名格式:
T1.Key T1.Col2 T1.Col3 T2.Key T2.Col2 T2.Col3 1 b c 1 B C 2 e f 2 E F
补充说明
如果不需要保留两张表的重复关联键,你可以在解包后单独删除不需要的列,比如在T2解包后加一行| project-away T2.Key,只保留T1的Key列即可,不需要修改其他列的处理逻辑。
内容的提问来源于stack exchange,提问作者PorgtheEaten
相关产品推荐
相关产品推荐

