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

Kusto查询如何仅投影非空值或删除含空值的列

Kusto查询过滤空值、移除全空列方案

两类常见需求的实现方法

1. 过滤包含空值的结果行

直接在查询中加where条件,用isnotempty()判断目标字段是否为空即可,该函数会同时识别null和空字符串""两种空值。
示例代码:

let table_name = datatable(name:string, date_part:datetime, job_1:string, job_2:string, job_3:string, job_4:string)
[
     "David", datetime(2022-05-9), "Architect", "", "", "Engineer"
];
table_name 
| where name == "David"
// 修正原查询时间范围的问题:between需小值在前、大值在后,且范围要覆盖你的数据时间
| where date_part between (datetime(2022-05-01) .. datetime(2022-05-15))
// 过滤规则示例:保留job_1到job_4全部非空的行,可根据需求调整判断逻辑
| where isnotempty(job_1) and isnotempty(job_2) and isnotempty(job_3) and isnotempty(job_4)
| project job_1, job_2, job_3, job_4

如果只需要过滤null值、保留空字符串,把isnotempty()替换为isnotnull()即可。

2. 移除整列全为空的列

没有内置一步到位的算子,可以通过narrow()+pivot()组合实现,自动丢弃所有全空的列,不需要手动枚举列名:

let table_name = datatable(name:string, date_part:datetime, job_1:string, job_2:string, job_3:string, job_4:string)
[
     "David", datetime(2022-05-9), "Architect", "", "", "Engineer"
];
table_name 
| where name == "David"
| where date_part between (datetime(2022-05-01) .. datetime(2022-05-15))
| project job_1, job_2, job_3, job_4
// 将列转为键值对行结构,过滤掉空值
| evaluate narrow()
| where isnotempty(Value)
// 转回宽表结构,全空的列会被自动剔除
| evaluate pivot(Column, any(Value))

运行上面的示例,最终返回结果只会保留有值的job_1、job_4两列,全空的job_2、job_3会被自动移除。

原查询的注意点

  • between语法要求范围左值小于右值,你原来写的between (now() .. -10d)顺序颠倒,无法匹配到正确数据
  • 示例数据的时间是2022年5月,和当前时间差超过2年,用now()-10d的范围根本匹配不到这条数据,测试时需要调整时间范围覆盖你的数据时间点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 16:21:44