Hive中处理json数据的两种方式
第一种:将json数据作为字符串进行处理
使用函数:
get_json_object:解析json数据,返回对应的数据
json_tuple:UDTF函数
使用案例:
–创建数据:vim /export/datas/hivedata.json
{“id”: 1701439105,“ids”: [2154137571,3889177061],“total_number”: 493}
{“id”: 1701439106,“ids”: [2154137571,3889177061],“total_number”: 494}
–创建表:
create table tb_json_test1 (
json string
);
–加载数据
load data local inpath ‘/export/datas/hivedata.json’ into table tb_json_test1;
–处理读取
select
get_json_object(t.json,’
.
i
d
′
)
,
g
e
t
j
s
o
n
o
b
j
e
c
t
(
t
.
j
s
o
n
,
′
.id'), get_json_object(t.json,'
.id′),getjsonobject(t.json,′.total_number’)
from
tb_json_test1 t ;
select
t2.*
from
tb_json_test1 t1
lateral view
json_tuple(t1.json, ‘id’, ‘total_number’) t2 as c1,c2;
第二种:通过专门的解析类直接加载一个json格式的数据到Hive中
使用案例:
–创建文件:vim /export/datas/hivedata.json
{“id”: 1701439105,“ids”: [2154137571,3889177061],“total_number”: 493}
{“id”: 1701439106,“ids”: [2154137571,3889177061],“total_number”: 494}
–添加jar包
add jar /export/datas/json-serde-1.3.7-jar-with-dependencies.jar;
–创建表:
create table tb_json_test2 (
id string,
ids array,
total_number int)
ROW FORMAT SERDE ‘org.openx.data.jsonserde.JsonSerDe’
STORED AS TEXTFILE;
–加载数据
load data local inpath ‘/export/datas/hivedata.json’ into table tb_json_test2;