【问题标题】:U-SQL trying to Extract a list of ints from nested JSON objectU-SQL 试图从嵌套的 JSON 对象中提取整数列表
【发布时间】:2021-04-06 09:50:16
【问题描述】:

我正在尝试从该结构中提取 ErrorReasons 以及 State 和 Id

{
    "id": "abcGuid",
    "RegistrationStatus": {
        "State": 2,
        "ErrorReasons": [
            1,2,3
        ]
    },
}

我可以提取 Id、RegistrationStatus 和 State,但是我很难从 ErrorReasons 列表中获取整数列表。

我的起始提取物

@result =
    EXTRACT 
         [id] string
        ,[RegistrationStatus] string
    FROM @inputFileDaily
    USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();

然后我拉出State,并将ErrorReasons放到自己的字段中

@pre =
    SELECT JsonFunctions.JsonTuple(RegistrationStatus) ["State"] AS State,
           JsonFunctions.JsonTuple(RegistrationStatus) ["ErrorReasons"] AS ErrorReasons_data
    FROM @result;

@pre =
    SELECT State,
           JsonFunctions.JsonTuple(ErrorReasons_data).Values AS ErrorReasons_Array
    FROM @pre;

@CreateJSONTuple =
    SELECT State,
           JsonFunctions.JsonTuple(ErrorReasons)["0"] AS ErrorReason
    FROM @pre
         CROSS APPLY
        EXPLODE(ErrorReasons_Array) AS c(ErrorReasons);

这当然什么也得不到,因为它正在寻找字段“0” 如果我省略了 ["0"],那么它会抱怨将 sqlmap 输出到 csv。我试过 .Value, .Values, ["1"], [0], [1] .Values 当然也不适合我。 我觉得我真的很接近,只是缺少一个从错误原因中提取值列表的关键操作

【问题讨论】:

    标签: azure azure-data-lake u-sql


    【解决方案1】:

    用一点橡皮擦,不用多想,我就明白了,

    @CreateJSONTuple = 
    SELECT 
           A.ErrorReason AS Reason
    FROM @pre
         CROSS APPLY
            EXPLODE (ErrorReasons_Array) AS A(ErrorReason);
    

    并找到正确的文档来遵循 https://docs.microsoft.com/en-us/u-sql/data-types/built-in/complex-built-in-u-sql-types

    【讨论】:

    • 是的,你是对的。我已经更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多