繁体   English   中英

USQL 查询从 Json 数据创建表

[英]USQL Query to create a Table from 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 | 系统事件| 系统 ID | 详情.事件名称 | 详情.previd | 特尔

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

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

基本上,您从系统和详细信息 JSON(在 @parse_json 中)中提取一个 SQLArray,然后将它们拆分为较小的 JSON 元组(在 @get_nested 中),最后在 @output 中提取“值”。 请参阅下面的代码。 如果您有问题,请告诉我!



    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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM