azure-data-explorer - 检查 Kusto 的特定列中是否存在字典的键?

标签 azure-data-explorer kql kusto-explorer

我得到了以下数据集:

let data = datatable(Timestamp:datetime, Name:string, Value:int)
            [
             datetime(2022-02-18 10:00:00 AM), "AX_100A_A00", 100,
             datetime(2022-02-18 10:01:00 AM), "BX_101B_B00", 200,
             datetime(2022-02-18 10:02:00 AM), "CX_102C_C00", 300,
             datetime(2022-02-18 10:03:00 AM), "DX_103D_D00", 400,  
             datetime(2022-02-18 10:04:00 AM), "EX_104E_E00", 500,
            ];
    let mydict = dynamic(
        {
             "100A":"New York"
            ,"101B":"Geneva"
            ,"102C":"France"
            ,"103D":"US"
            ,"104E":"Canada"
        }
    );
    data
    | summarize result = max(Value) by Floor_Name = tostring(mydict[substring(Name, 3, 4)])

为了说明我在这里想要实现的目标。两个下划线之间有一个代表特定位置的代码。

我的问题是,如何添加一个条件来检查两个下划线之间的单词是否不作为字典中的键存在,然后只显示两个下划线之间的值。但是,如果它确实存在于字典中,则显示其友好名称。让我们假设添加了一个新名称 FX_105F_F00。在这种情况下,由于在字典中找不到它,因此不应显示友好名称。它将按原样显示。应该在代码中的楼层名称中添加 iff 条件,但语法应该如何?

最佳答案

这里有几点需要注意:

  1. 对 JSON 文档中不存在的键进行寻址是有效的。
    在这种情况下返回的结果将为 null。
  2. The string data type doesn't support null values .
    使用tostring() null 值将返回空字符串。
  3. coalesce()确实适用于空字符串,与适用于其他数据类型的空值的方式相同。

所以,对于 105F , mydict["105F"]为 null 并且 tostring( mydict["105F"] ) 是一个空字符串,因此合并继续到第二个值 (Floor_Code)。


let data = datatable(Timestamp:datetime, Name:string, Value:int)
            [
             datetime(2022-02-18 10:00:00 AM), "AX_100A_A00", 100,
             datetime(2022-02-18 10:01:00 AM), "BX_101B_B00", 200,
             datetime(2022-02-18 10:02:00 AM), "CX_102C_C00", 300,
             datetime(2022-02-18 10:03:00 AM), "DX_103D_D00", 400,  
             datetime(2022-02-18 10:04:00 AM), "EX_104E_E00", 500,
             datetime(2022-02-18 10:05:00 AM), "FX_105F_F00", 600
            ];
    let mydict = dynamic(
        {
             "100A":"New York"
            ,"101B":"Geneva"
            ,"102C":"France"
            ,"103D":"US"
            ,"104E":"Canada"
        }
    );
    data
    | extend Floor_Code = substring(Name, 3, 4)
    | summarize result = max(Value) by Floor_Name = coalesce(tostring(mydict[Floor_Code]), Floor_Code)
<表类=“s-表”> <标题> 楼层名称 结果 <正文> 纽约 100 日内瓦 200 法国 300 美国 400 加拿大 500 105F 600

Fiddle

关于azure-data-explorer - 检查 Kusto 的特定列中是否存在字典的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72618246/

相关文章:

azure - 库斯托语言。仅当时间上的前一个值不相同时才获取一个值

Azure Log Analytics - 如何查看最近 x 天但仅在特定时间之间的日志?

azure - 如何通过 Azure 门户查找虚拟机上的 Windows 版本

azure-data-explorer - Kusto - 从 Kusto 图表中的变量(图例)中删除附加文本

azure - 更新物化 View azure adx?

azure - KQL Azure Log Analytics 无法从正则表达式解析日期时间

Azure blob 私有(private)/容器级访问问题

azure - KQL 更改评估数据透视表中的列顺序

azure - 如何在 KQL 上创建转化指标

azure - 在 Kusto 中使用有条件的百分位数