如何在KQL查询中指定参数?

时间:2019-05-29 11:15:41

标签: parameters kql

我正在尝试使用查询参数和.NET Kusto SDK对Azure Data Explorer群集执行KQL查询。

我尝试将参数放在大括号{}中,并且不带大括号。

我已经阅读了有关将参数传递给查询的文档,但找不到任何有关通过.NET SDK传递给Azure Data Explorer时查询外观的示例。

当我在Kusto.Explorer工具中设置参数时,我的查询就会生效,但是使用SDK时运气不佳。

var queryParameters = new Dictionary<string, string>()
            {
                { "myscope", "scope001" },
                { "startdate", "2019-01-01" },
                { "enddate", "2019-01-30" },
                { "author", "Bob Jammo" }
            };

var query = @"declare query_parameters (myscope:string, startdate:string, enddate:string, author:string);
                            Events 
                            | where Scope == ""{myscope}"" 
                                and EventTime between (datetime({startdate}) .. datetime({enddate}))
                                and EventType == ""product""
                                and User.Email <> """"
                            | mv-expand Payload.products
                            | where Payload_products.authors contains ""{author}""
                            | distinct DeviceId
                            | count";

using (var client = KustoClientFactory.CreateCslQueryProvider(ConfigurationManager.AppSettings["AdxConnectionString"]))
{
    var clientRequestProperties = new Kusto.Data.Common.ClientRequestProperties(
        options: null,
        parameters: queryParameters);

    clientRequestProperties.ClientRequestId = StepsBase.ScenarioScope;

    using (var reader = client.ExecuteQuery(query, clientRequestProperties))
    {
        reader.Read();
        return Convert.ToInt32(reader[0]);
    }
}

我收到一条错误消息,提示我尚未设置参数值:“语法错误:无法解析查询:无法解析日期时间文字:'datetime(startdate)'“

1 个答案:

答案 0 :(得分:0)

从错误消息来看,这是因为您使用的是datetime({startdate})而不是todatetime({startdate})

无论如何,您也可以考虑将startdateenddate的类型改成datetime而不是string开头(并在.NET中调整它们的定义字典)