You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在KQL中按列名查找整列数据并添加至另一数据表?

KQL实现按列名匹配生成动态列表

已知两个数据表:

let A = datatable(XName:string, YName:string) [
"XData", "YData1",
"XData", "YData2",
];
let B = datatable(XData:double, YData1:double, YData2:double) [
0.0, 1.0, 2.0,
0.1, 1.1, 2.1,
0.2, 1.2, 2.2
];

需要扩展表A,新增YValues列,值为表B中由YName指定列的所有值组成的动态列表。期望输出如下:

let DesiredOutput = datatable(XName:string, YName:string, YValues:dynamic) [
"XData", "YData1", dynamic([1.0, 1.1, 1.2]),
"XData", "YData2",  dynamic([2.0, 2.1, 2.2]),
];

之前尝试的代码因内部语句无法访问外部YName列而失效,以下是正确实现方式:


解决方案代码

let A = datatable(XName:string, YName:string) [
"XData", "YData1",
"XData", "YData2",
];
let B = datatable(XData:double, YData1:double, YData2:double) [
0.0, 1.0, 2.0,
0.1, 1.1, 2.1,
0.2, 1.2, 2.2
];
// 将表B转换为键值对格式,提取列名与对应值
let B_columns_lists = B
| summarize by dummy=1  // 生成单行数据,用于打包所有列
| project cols = pack_all()  // 将所有列打包为属性包
| mv-apply kv = cols on (
    project YName = tostring(kv.key), YValue = kv.value
    | where YName != "dummy"  // 过滤临时生成的dummy列
    | summarize YValues = make_list(YValue) by YName  // 按列名聚合生成值列表
);
// 关联表A与处理后的表B,得到最终结果
A
| join kind=inner B_columns_lists on YName
| project XName, YName, YValues

代码说明

  1. 转换表B格式:通过summarize生成单行数据,再用pack_all()把所有列打包成属性包,最后用mv-apply展开属性包的键值对,拆分出每个列名和对应的数据值。
  2. 生成列值列表:对拆分后的键值对按YName分组,用make_list聚合生成该列所有值组成的动态列表。
  3. 关联表A:将表A与处理后的表B通过YName列关联,保留所需列即可得到期望输出。

内容的提问来源于stack exchange,提问作者Stefan Bauer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:42:51