USQL Query从Json Data创建表

我有一个类似于[{}, {}, {}]的json,即可以有多行,每行有许多属性 – 值对,每行保持固定。

 @json = EXTRACT MainId string, Details string FROM @INPUT_FILE USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor(); 

这给了我json作为一个字符串。

我不知道如何得到: row[3].property4就像属性给定行的值。 使属性复杂化的是{Name:“XXX”,Value:“YYY”}

 @jsonnodes = SELECT JsonApp.JsonFunctions.JsonTuple(@json, "event", "id") AS json_map FROM @json; 

现在,上面的查询我试过,但它没有用。

它给了我错误:

 Rowset variable '@json' is not a scalar variable. 

我如何获得行属性对并将它们放在csv文件或表中?

谢谢你的帮助。

JSON看起来像:

 [{"MainId":"24201803","System":[{"Name":"event","Value":"S"},{"Name":"id","Value":""}], "Details":[{"Name":"EventName","Value":"W"},{"Name":"previd","Value":"88"}], "ttl":8640000}, ....Multiple Rows of the Same type as before....] 

我想要的输出是:

表列= MainId | System.event | System.id | Details.EventName | Details.previd | TTL

表的行的值将由具有相应属性值的行填充(如在json行中)。

在我的小测试用例中找到了一个下面的解决方案 – 我同意{“Name:’XXX’,Value:’YYY’}格式化会让事情变得有点棘手,但你仍然可以在没有自定义提取器的情况下完成这些工作 – 只需很多嵌套的JSON。

基本上,您从System和Details JSON(在@parse_json中)中提取SQLArray,然后将它们拆分为较小的JSON元组(在@get_nested中),最后在@output中提取“Values”。 见下面的代码。 如果您有疑问,请告诉我!

 CREATE ASSEMBLY [Microsoft.Analytics.Samples.Formats] FROM @FormatsAssembly; CREATE ASSEMBLY [Newtonsoft.Json] FROM @JSONAssembly; REFERENCE ASSEMBLY [Newtonsoft.Json]; REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats]; DECLARE @CommentsPath = "/JSONTest/rawJson.json"; @get_json = EXTRACT MainId int, System string, Details string, ttl int FROM @CommentsPath USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor(); @parse_json = SELECT MainId, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(System).Values AS SystemJson, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(Details).Values AS DetailsJson, ttl FROM @get_json; @get_nested = SELECT MainId, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(SystemJson[0]) AS SystemName, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(SystemJson[1]) AS SystemId, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(DetailsJson[0]) AS DetailsName, Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(DetailsJson[1]) AS DetailsPrevid, ttl FROM @parse_json; @output = SELECT MainId, SystemName["Value"] AS SystemEvent, SystemId["Value"] AS SystemId, DetailsName["Value"] AS EventName, DetailsPrevid["Value"] AS PrevId, ttl FROM @get_nested; OUTPUT @output TO @"/JSONTest/test1.csv" USING Outputters.Csv(outputHeader : true);