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

在KQL中使用掩码数组:将源数组掩码为0的位置替换为null

KQL数组掩码替换函数实现

需求

创建一个KQL函数,接收两个数值类型数组:

  • 源数组(src)
  • 掩码数组(mask)

输出变形后的源数组:当掩码数组对应位置元素为0时,将源数组该位置的值替换为null。

初始错误尝试

最初的代码逻辑无法直接运行,KQL不支持这种数组下标直接赋值的写法:

let replace_with_nulls = (src:dynamic, mask:dynamic)
{
  src[i] = mask[i]==0 ? null : src[i]
};

可行实现方案

通过mv-expand拆分数组、逐元素判断后重新聚合的方式,可以实现需求,以下是可直接用于表的完整函数:

let replace_with_nulls = (src:dynamic, mask:dynamic)
{
    let temp_table = print src_col = src, mask_col = mask;
    temp_table
    | mv-expand src_col, mask_col to typeof(long)
    | extend res_col = iif(mask_col == 0, long(null), src_col)
    | summarize result = make_list_with_nulls(res_col)
};

// 测试示例
datatable (src:dynamic, mask:dynamic)[
    dynamic([1, 2, 3, 4,5]), dynamic([0, 1, 0, 1,0])
]
| extend tgt = replace_with_nulls(src, mask);

代码解析

  • 用print生成临时表,将两个输入数组转为列
  • mv-expand将数组拆分为单行单个元素,同时指定元素类型(这里用long,可根据实际数值类型调整为int/double等)
  • iif判断掩码元素是否为0,满足条件则返回null,否则保留源数组元素
  • make_list_with_nulls将处理后的元素重新组合为包含null的数组(无需series_fill_forward,因为需求是保留null而非填充)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:25:18