Kusto中如何将格式化datetime作为dynamic类型传入sql_request插件
报错原因
两个报错的根因分别是:
- Kusto的
dynamic({})字面量语法仅支持写入常量值,不支持直接引用外部通过let定义的变量,编辑器解析到变量名时无法识别为字面量合法内容,就会抛出expected '}'的语法错误。 - 你当前调用
sql_request仅传入了3个参数,部分环境的语法校验规则会要求显式传入第四个可选的配置项参数,否则会报参数数量不匹配的提示。 - 额外冗余操作:用
todynamic()包裹format_datetime()返回值没有必要,format_datetime本身返回标准字符串类型,不需要额外转动态类型。
正确传参方法
- 构造带变量的dynamic类型参数字典时,不要用
dynamic({})字面量写法,改用内置函数bag_pack()生成属性包,该函数支持直接传入变量作为键值对的值,返回结果就是标准dynamic类型,完全符合sql_request的参数要求。 - 给
sql_request补传第四个参数,没有特殊配置需求时直接传dynamic(null)即可,不会影响原有查询逻辑。 - 如果SQL端的date字段是日期/时间类型,可以省略
format_datetime转换步骤,直接传入原始的datetime类型值,插件会自动完成类型映射,避免SQL端隐式转换带来的性能问题。
修正后可运行代码
let start_time = format_datetime(startTs, 'yyyy-MM-dd'); let end_time = format_datetime(endTs, 'yyyy-MM-dd'); let query = 'select * from [db].[Table] where date > @param0 and date < @param1'; let result = evaluate sql_request( auth, query, bag_pack('param0', start_time, 'param1', end_time), dynamic(null) );
内容的提问来源于stack exchange,提问作者varsha
相关产品推荐
相关产品推荐

