我正在尝试使用查询参数和.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)'“
答案 0 :(得分:0)
从错误消息来看,这是因为您使用的是datetime({startdate})
而不是todatetime({startdate})
。
无论如何,您也可以考虑将startdate
和enddate
的类型改成datetime
而不是string
开头(并在.NET中调整它们的定义字典)