在hive中,没有JSON类的存在,一般使用string类型修饰,叫做JSON字符串。
在hive中内置了两个用于解析JSON的函数。
1.json_tuple
--是UDTF 表生成函数 输入一行,输出多行 一次提取读个值 可以单独使用 也可以配合lateral view侧视图使用
1.get_json_object
--是UDF普通函数,输入一行 输出一行 一次只能提取一个值 多次提取多次使用
--创建表
create table tb_json_test1 (
json string
);
--加载数据
load data local inpath '/root/hivedata/device.json' into table tb_json_test1;
select * from tb_json_test1;
-- get_json_object UDF函数 最大弊端是一次只能解析提取一个字段
select
--获取设备名称
get_json_object(json,"$.device") as device,
--获取设备类型
get_json_object(json,"$.deviceType") as deviceType,
--获取设备信号强度
get_json_object(json,"$.signal") as signal,
--获取时间
get_json_object(json,"$.time") as stime
from tb_json_test1;
--json_tuple 这是一个UDTF函数 可以一次解析提取多个字段
--单独使用 解析所有字段
select
json_tuple(json,"device","deviceType","signal","time") as (device,deviceType,signal,stime)
from tb_json_test1;
--搭配侧视图使用
select
json,device,deviceType,signal,stime
from tb_json_test1
lateral view json_tuple(json,"device","deviceType","signal","time") b
as device,deviceType,signal,stime;
--方式2: 使用JsonSerDe类在建表的时候解析数据
--建表的时候直接使用JsonSerDe解析
create table tb_json_test2 (
device string,
deviceType string,
signal double,
`time` string
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE;
load data local inpath '/root/hivedata/device.json' into table tb_json_test2;
select * from tb_json_test2;