概要

介绍hive sql中解析json的两种函数:
  • get_json_object(string json_string, string path)
  • json_tuple(json_string, k1, k2 ...)


正文

1. get_json_object

  • 语法: get_json_object(string json_string, string path)

  • 说明:
    第一个参数填写json对象变量,第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;如果输入的json字符串无效,那么返回NULL。
    每次只能返回一个数据项。

  • 举例:
    data 为 test表中的字段,数据结构如下:

data =
{
 "store":
        {
         "fruit":[{"weight":8,"type":"apple"}, {"weight":9,"type":"pear"}],  
         "bicycle":{"price":19.95,"color":"red"}
         }, 
 "email":"amy@only_for_json_udf_test.net", 
 "owner":"amy" 
}
  1. get单层值
hive> select  get_json_object(data, '$.owner') from test;
结果:amy
  1. get多层值.
hive> select  get_json_object(data, '$.store.bicycle.price') from test;
结果:19.95
  1. get数组值[]
hive> select  get_json_object(data, '$.store.fruit[0]') from test;
结果:{"weight":8,"type":"apple"}

遇到json数组可以用explode() 解析为多个item

2. json_tuple

  • 语法:json_tuple(json_string, k1, k2 ...)

  • 说明:解析json的字符串json_string,可指定多个json数据中的key,返回对应的value。如果输入的json字符串无效,那么返回NULL。
    注意json_tuple不需要加$.了,否则会解析不到。

  • 示例:

select 
b.name
,b.age
from tableName a lateral view
json_tuple('{"name":"zhangsan","age":18}','name','age') b as name,age;

结果:

name age
zhangsan 18

References
https://blog.csdn.net/qq_34105362/article/details/80454697
https://www.cnblogs.com/itlz/p/14758890.html

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐