是否可以使用动态数组/列表作为参数化kusto查询的输入?

2024-07-07 07:40:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序,它使用Python库azure.kusto.data从kusto集群查询数据。我想知道,是否可以使用动态数组作为参数化kusto查询的输入

现有的文档似乎没有调用这样的功能。 https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/queryparametersstatement?pivots=azuredataexplorer

在过去,传入字符串类型值工作得很好:

    params = {
        "scenario": "string",
        "env": "string2",
        "duration": "string3",
    }

    query = """
    declare query_parameters(scenario:string, env:string, duration:string);
    Some_Kusto_Query(scenario, env, duration)
    """

然后,我将把字典和查询字符串传递到Kusto库中,以获取所需的数据。这个很好用。不起作用的是,每当我尝试此版本时:

    params = {
        "scenario": "string",
        "env": "string2",
        "duration": "string3",
        "value_list": [1,2,3,4]
    }

    query = """
    declare query_parameters(scenario:string, env:string, duration:string, value_list:dynamic);
    Some_Kusto_Query(scenario, env, duration)
        | where value in value_list
    """

我已经尝试了许多不同的迭代,但似乎无法使其工作。此时我唯一的另一个想法是将value_list作为分隔字符串(例如,“1-2-3-4”)传入,并使用kusto中的split()函数将字符串反序列化回数组,但这似乎并不理想

任何提示或建议都将不胜感激——我已经浏览了Kusto文档/谷歌,但在网上没有遇到任何好的例子

谢谢


Tags: 数据字符串文档envdatastringvalue数组
3条回答

@Avnera有正确答案,还有一件事: 动态类型需要位于括号内:

| where value in (value_list)

参数列表中的值必须是文字,对于动态数组,文字如下所示:

dynamic([1,2,3])

例如:

params = {
    "scenario": "string",
    "env": "string2",
    "duration": "string3",
    "value_list": "dynamic([1,2,3,4])"
}

如果您用Python构造查询,那么您可以像下面那样传递它并执行它。我还包括一个包含两行的测试表,以帮助可视化结果:

let TestTable = datatable (ScenarioCol:string, evnCol:string, durationCol:string, numericalCol:int) 
[
    "scenario 1", "env 1", "duration x", 1,
    "scenario 1", "env 1", "duration x", 9
];
let MyQuery = (scenario:string, env:string, duration:string, value_list:dynamic)
{
    TestTable
    | where ScenarioCol == scenario
    | where evnCol == env
    | where durationCol == duration
    | where numericalCol in(value_list)
};
let scenario = "scenario 1";
let env = "env 1";
let duration = "duration x";
let valueList = dynamic([1,2,3,4]);
MyQuery(scenario, env, duration, valueList)

输出:

output table

正如您所看到的,它只是从集合中获取了具有匹配值的行

相关问题 更多 >