HIVE常用函数的用法之JSON解析
命令格式:
1.GET_JSON_OBJECT(STRING json,STRING path)
命令说明:
用于在一个标准JSON字符串中,按照path抽取指定的字符串。每次调用该函数时,都会读一次原始数据,因此反复调用可能浪费性能和费用。您可以通过GET_JSON_OBJECT,结合UDTF,轻松转换JSON格式日志数据,避免多次调用函数
JSON:STRING类型,标准的JSON格式字符串。
path:STRING类型,表示在JSON中的path,以$开头。path详情请参见LanguageManual UDF。
:
表
示
根
节
点
。
.
:
表
示
子
节
点
。
[
]
:
[
n
u
m
b
e
r
]
表
示
数
组
下
标
,
数
组
格
式
为
k
e
y
[
s
u
b
1
]
[
s
u
b
2
]
[
s
u
b
3
]
…
…
。
∗
:
W
i
l
d
c
a
r
d
f
o
r
[
]
,
返
回
整
个
数
组
。
∗
不
支
持
转
义
。
特
别
说
明
:
如
果
J
S
O
N
为
空
或
非
法
的
J
S
O
N
格
式
,
则
返
回
N
U
L
L
。
如
果
J
S
O
N
合
法
,
p
a
t
h
也
存
在
,
则
返
回
对
应
字
符
串
。
不
支
持
一
个
O
b
j
e
c
t
中
出
现
相
同
的
K
e
y
,
例
如
a
:
1
,
a
:
0
,
可
能
导
致
无
法
解
析
。
不
支
持
E
m
o
j
i
表
情
字
符
串
。
例
:
+
−
−
−
−
+
j
s
o
n
+
−
−
−
−
+
"
s
t
o
r
e
"
:
"
f
r
u
i
t
"
:
[
"
w
e
i
g
h
t
"
:
8
,
"
t
y
p
e
"
:
"
a
p
p
l
e
"
,
"
w
e
i
g
h
t
"
:
9
,
"
t
y
p
e
"
:
"
p
e
a
r
"
]
,
"
b
i
c
y
c
l
e
"
:
"
p
r
i
c
e
"
:
19.95
,
"
c
o
l
o
r
"
:
"
r
e
d
"
,
"
e
m
a
i
l
"
:
"
a
m
y
@
o
n
l
y
f
o
r
j
s
o
n
u
d
f
t
e
s
t
.
n
e
t
"
,
"
o
w
n
e
r
"
:
"
a
m
y
"
h
i
v
e
>
S
E
L
E
C
T
G
E
T
J
S
O
N
O
B
J
E
C
T
(
s
r
c
j
s
o
n
.
j
s
o
n
,
′
:表示根节点。 .:表示子节点。 []:[number]表示数组下标,数组格式为key[sub1][sub2][sub3]……。 *:Wildcard for [],返回整个数组。*不支持转义。 特别说明:如果JSON为空或非法的JSON格式,则返回NULL。 如果JSON合法,path也存在,则返回对应字符串。 不支持一个Object中出现相同的Key,例如{a:1, a:0},可能导致无法解析。 不支持Emoji表情字符串。 例: +----+ json +----+ {"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" } hive> SELECT GET_JSON_OBJECT(src_json.json, '
:表示根节点。.:表示子节点。[]:[number]表示数组下标,数组格式为key[sub1][sub2][sub3]……。∗:Wildcardfor[],返回整个数组。∗不支持转义。特别说明:如果JSON为空或非法的JSON格式,则返回NULL。如果JSON合法,path也存在,则返回对应字符串。不支持一个Object中出现相同的Key,例如a:1,a:0,可能导致无法解析。不支持Emoji表情字符串。例:+−−−−+json+−−−−+"store":"fruit":["weight":8,"type":"apple","weight":9,"type":"pear"],"bicycle":"price":19.95,"color":"red","email":"amy@onlyforjsonudftest.net","owner":"amy"hive>SELECTGETJSONOBJECT(srcjson.json,′.owner’) FROM src_json;
amy
hive> SELECT GET_JSON_OBJECT(src_json.json, ‘KaTeX parse error: Undefined control sequence: \[ at position 13: .store.fruit\̲[̲0]') FROM src_j….non_exist_key’) FROM src_json;
NULL
数组情况:
GET_JSON_OBJECT(’{“array”:[[“aaaa”,1111],[“bbbb”,2222],[“cccc”,3333]]}’,’
.
a
r
r
a
y
[
1
]
[
1
]
′
)
=
"
2222
"
G
E
T
J
S
O
N
O
B
J
E
C
T
(
′
"
a
a
a
"
:
"
b
b
b
"
,
"
c
c
c
"
:
"
d
d
d
"
:
"
e
e
e
"
,
"
f
f
f
"
:
"
g
g
g
"
,
"
h
h
h
"
:
[
"
h
0
"
,
"
h
1
"
,
"
h
2
"
]
,
"
i
i
i
"
:
"
j
j
j
"
′
,
′
.array[1][1]')= "2222" GET_JSON_OBJECT('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','
.array[1][1]′)="2222"GETJSONOBJECT(′"aaa":"bbb","ccc":"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"],"iii":"jjj"′,′.ccc.hhh[*]’) = “[“h0”,“h1”,“h2”]”
GET_JSON_OBJECT(’{“aaa”:“bbb”,“ccc”:{“ddd”:“eee”,“fff”:“ggg”,“hhh”:[“h0”,“h1”,“h2”]},“iii”:“jjj”}’,’$.ccc.hhh[1]’) = “h1”
2.JSON_TUPLE(STRING json,STRING key1,STRING key2,…)
命令说明:
该函数用于一个标准的JSON字符串中,按照输入的一组键(key1,key2,…)JSON抽取各个键指定的字符串。
参数说明:
JSON:STRING类型,标准的JSON格式字符串。
key:STRING类型,用于描述在JSON中的path,一次可输入多个,不能以美元符号($)开头。关于数据例子的更新下篇文章更新