【问题标题】:Hive query for exploding list of values in a json用于在 json 中爆炸的值列表的 Hive 查询
【发布时间】:2020-12-17 21:59:34
【问题描述】:

Json

{
"Event": "StudentMarks",
"Marks Info": {
    "Marks": [{
        "ID": 1,
        "Name": "Sub1",
        "Value": "95"
    }, {
        "ID": 2,
        "Name": "Sub2",
        "Value": "96"
    }, {
        "ID": 3,
        "Name": "Sub3",
        "Value": 100
    }]
  },
"Grade": {
    "metric": "pass"
    }
}

我正在尝试获取 Marks Info json 下的值,其中包含带有键 Marks 的 json 列表。我能够获得这些值,但我无法像单独的值一样将其拆分出来。

查询我使用

 select  Student_ID, get_json_object(get_json_object(json_blob,'$.Marks Info'), '$.Marks[*].Value') from my_table where my_condition;
         
  Student_ID    |get_json_object(get_json_object(json_blob, '$.Marks Info'), '$.Marks[*].Value')
       1        |                  ["95","96,100"]

所需输出

我希望列名应该是这样的 Sub1 Sub2 Sub2 Grade 并且值应该从列表中爆炸 ["95","96,100"]

有人可以帮我解决这个问题吗?

     Student_ID | Sub1  | Sub2|    Sub2 |    Grade    
        1       | "95"  | "96"|    100  |   "pass"

【问题讨论】:

    标签: apache-spark hive apache-spark-sql


    【解决方案1】:

    尝试以下查询。 get_json_object 返回一个字符串,所以你需要摆弄它才能得到你想要的。

    select
        Student_ID,
        trim('[]"', x[0]) sub1,
        trim('[]"', x[1]) sub2,
        trim('[]"', x[2]) sub3,
        grade
    from (
        select
            Student_ID,
            split(get_json_object(json_blob, '$.Marks Info.Marks[*].Value'), ',') x,
            get_json_object(json_blob, '$.Grade.metric') grade
        from my_table
    )
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多