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

如何编写Kusto查询:变量含指定三值时返回空结果

Kusto查询实现指定逻辑

需求:

  • 当someValues数据表同时包含"111"、"222"、"333"三个字符串时,查询返回空结果
  • 若仅包含其中1个或2个字符串,则返回"False"

示例数据

let someValues = datatable (name: string)
[
 "111",
 "222",
 "333",
];
// my query

用户尝试的代码(未达成目标)

let someValues = datatable (name: string)
[
 "111",
 "222",
 "333",
];
someValues
| summarize make_set(name)
| where set_name contains "111" and set_name contains "222" and set_name contains "333" // 这段代码无效,因为满足条件时会输出1行结果,而非空

等效C#逻辑代码

static void Main(string[] args)
{
    List<string> s = new List<string>() {"111", "222", "333"};
    if (s.Contains("111") && s.Contains("222") && s.Contains("333"))
        return; // 不返回任何结果
    else
    {
        Console.WriteLine("False"); // 输出"False"
    }
}

正确的Kusto查询方案

方案一:使用集合包含判断函数

let someValues = datatable (name: string)
[
 "111",
 "222",
 "333",
];
let requiredValues = dynamic(["111", "222", "333"]);
someValues
| summarize valueSet = make_set(name)
| where not(set_has_all(valueSet, requiredValues))
| project result = "False"

逻辑说明:

  1. 定义需要检查的目标字符串数组requiredValues
  2. 将someValues中的字符串聚合为一个唯一值集合valueSet
  3. 用set_has_all判断集合是否包含所有目标元素,取反后仅保留不满足条件的情况
  4. 输出"False";若满足同时包含三个字符串,where条件过滤后无结果返回

方案二:统计匹配数量判断

let someValues = datatable (name: string)
[
 "111",
 "222",
 "333",
];
let requiredValues = dynamic(["111", "222", "333"]);
someValues
| summarize matchedCount = countif(name in (requiredValues))
| where matchedCount != array_length(requiredValues)
| project result = "False"

逻辑说明:

  1. 统计someValues中匹配目标字符串的数量matchedCount
  2. 当匹配数量不等于目标数组长度(3)时,输出"False";否则返回空结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:35:37