【问题标题】:Using column_ifexists in KQL user function在 KQL 用户函数中使用 column_ifexists
【发布时间】:2020-12-27 07:17:56
【问题描述】:

我正在尝试根据具有动态内容的旋转内容创建一个功能。我的场景示例如下所示:

let countActivities = (col: string) {
    array_length(column_ifexists(col, dynamic([])))
};
let testdata = datatable(ActivityId: string, Message: string, SessionId: string)
    ["1", "abc", "100",
     "2", "def", "100",
     "2", "ghi", "100",
     "4", "jkl", "100",
     "1", "mno", "200"];
testdata
| extend iActivityId = toint(ActivityId)
| evaluate pivot(iActivityId, make_set(Message), SessionId)
| project SessionId,
          Has1 = countActivities("1"),
          Has2 = countActivities("2"),
          Has3 = countActivities("3"),
          Has4 = countActivities("4");

我希望上面的countActivities 返回动态列的数组中的元素数,但是上面会导致错误columnifexists(): cannot be used in the function without tabular argument。我希望这是一个标量函数,因此不确定如何在这种情况下提供表格参数。

上面的countActivities应该怎么写才能实现呢?

【问题讨论】:

    标签: azure-data-explorer kql


    【解决方案1】:

    一列只能存在于表格表达式中(例如表格)。 您的原始函数没有这样的(即您希望列在哪里存在?),因此您看到的错误消息。

    下面的替代方案怎么样?

    let f = (arr:dynamic, col: string) {
        array_index_of(arr, col) != -1
    };
    let testdata = datatable(ActivityId: string, Message: string, SessionId: string)
        ["1", "abc", "100",
         "2", "def", "100",
         "2", "ghi", "100",
         "4", "jkl", "100",
         "1", "mno", "200"];
    testdata
    | summarize make_set(ActivityId) by SessionId
    | project SessionId,
              Has1 = f(set_ActivityId, "1"),
              Has2 = f(set_ActivityId, "2"),
              Has3 = f(set_ActivityId, "3"),
              Has4 = f(set_ActivityId, "4")
    

    -->

    SessionId   Has1    Has2    Has3    Has4
    100         TRUE    TRUE    FALSE   TRUE
    200         TRUE    FALSE   FALSE   FALSE
    

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 2021-06-10
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多