Azure Kusto解析含date字段JSON的查询异常问题求助
Azure Kusto查询中JSON小写date字段无法访问的解决方法
在Azure Kusto查询时会遇到这样的异常:当JSON字段名为Date(首字母大写)时,查询能正常执行;但将字段名改为全小写的date后,查询就无法运行。
测试场景
场景1(正常运行)
let T = datatable(MyString:string) [ '{"Date":"2023-03-05T00:00:00.0000000Z","hour_start":"10:00","hour_end":"21:00","option":"recent"}' ]; T | project MyJson = parse_json(MyString) | extend Date_ = tostring(MyJson.Date)
场景2(无法运行)
let T = datatable(MyString:string) [ '{"date":"2023-03-05T00:00:00.0000000Z","hour_start":"10:00","hour_end":"21:00","option":"recent"}' ]; T | project MyJson = parse_json(MyString) | extend Date_ = tostring(MyJson.date)
原因分析
date是Kusto的保留关键字(属于日期/时间类的内置函数名称),直接用点符号.访问时,Kusto解析器会将其误认为是函数调用,而非JSON对象的字段名,导致查询报错。
解决方法
方法1:使用方括号语法访问字段
将点符号访问改为方括号包裹字段名的方式,明确告诉解析器这是JSON字段:
let T = datatable(MyString:string) [ '{"date":"2023-03-05T00:00:00.0000000Z","hour_start":"10:00","hour_end":"21:00","option":"recent"}' ]; T | project MyJson = parse_json(MyString) | extend Date_ = tostring(MyJson["date"])
方法2:使用bag_extract函数提取字段
通过Kusto内置的bag_extract函数指定字段名提取值,绕开关键字冲突:
let T = datatable(MyString:string) [ '{"date":"2023-03-05T00:00:00.0000000Z","hour_start":"10:00","hour_end":"21:00","option":"recent"}' ]; T | project MyJson = parse_json(MyString) | extend Date_ = tostring(bag_extract(MyJson, "date"))
内容的提问来源于stack exchange,提问作者Pawel Mazurek
相关产品推荐
相关产品推荐

