【问题标题】:Extract Array from JSON in HiveQL在 HiveQL 中从 JSON 中提取数组
【发布时间】:2016-08-13 22:36:11
【问题描述】:

我有一列包含一个大型 JSON 对象。例如,我们称列 Column1,这是一个典型的元素:

{"key1":value,"key2":[{"subK11":val,"subK12":val},{"subK21":val,"subK22":val}]}

所以,我可以使用以下方法提取普通元素:

select get_json_object(Column1,'$.key1') as key1

但我一直无法弄清楚如何以可用的形式提取 ARRAY,因为:

select get_json_object(Column1,'$.key2') as key2 

返回 STRING 类型。所以我不能像往常一样从数组中选择元素。也就是说,这个查询会失败:

select key2[1] as first_element
from
(select get_json_object(Column1,'$.key2') as key2)

select explode(key2)
from
(select get_json_object(Column1,'$.key2') as key2 )

两者都给出错误,后者说“explode() 需要数组类型”。所以我认为问题在于 get_json_object 返回一个字符串。我需要它来识别 key2 包含一个 ARRAY,但我不知道该怎么做。

我是 Hive SQL 的新手,主要是 SQL 用户,所以请告诉我是否有任何明显我遗漏的疯狂内容。对于其他任何问题,我都没有找到此类问题的解决方案。

【问题讨论】:

    标签: sql json hiveql


    【解决方案1】:

    你可以使用hive-third-functions,它提供了json_array_extract函数,你可以像这样提取json数组信息:

    json_array_extract("[{\"a\":{\"b\":\"13\"}}, {\"a\":{\"b\":\"18\"}}, {\"a\":{\"b\":\"12\"}}]", "$.a.b"); => ["\"13\"","\"18\"","\"12\""]
    json_array_extract_scalar("[{\"a\":{\"b\":\"13\"}}, {\"a\":{\"b\":\"18\"}}, {\"a\":{\"b\":\"12\"}}]", "$.a.b") => ["13","18","12"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2019-07-27
      • 1970-01-01
      • 2014-07-05
      • 2021-12-08
      相关资源
      最近更新 更多