【Hive SQL】解析json的几种方法
·
概要
介绍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"
}
- get单层值
hive> select get_json_object(data, '$.owner') from test;
结果:amy
- get多层值.
hive> select get_json_object(data, '$.store.bicycle.price') from test;
结果:19.95
- 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
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)