概念
什么是JSON
- JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成
- JSON是存储和交换文本信息的语法,类似XML
- JSON比XML更小、更快,更易解析
JSON语法
- 数据在
名称/值
对中 - 数据由
,
分开 - 使用斜杠
\
来转义字符 - 大括号
{}
保存对象 - 中括号
[]
保存数组,数组可以包含多个对象
结构
- 对象:大括号保存的对象是一个无序的名称/值对集合,一个对象以左括号开始,右括号结束,每个键后跟一个冒号,名称/值对使用逗号分隔
- 数组:中括号[]保存的数组是值(value)的有序集合,一个数组以左中括号开始,右中括号结束,值之间使用逗号分隔
JSON函数
函数 | 说明 | 示例 |
---|---|---|
get_json_object(json_string, ‘$.key’) | 用于提取JSON字符串中的特定字段 | 获取json字符串中的name字段,get_json_object('{"name":"John","age":30}', '$.name') |
json_tuple(json_string, k1, k2 …) | 可以在一次函数调用中提取多个字段 | 获取json字符串中的name,age字段,get_json_object('{"name":"John","age":30}', 'name', 'age') |
explode函数
- 语法:
explode(Array OR Map)
- 说明:接收一个array或者map类型的数据作为输入,然后将array或map里面的元素按照每行的形式输出,也被称为列转行函数,通常与LATERAL VIEW一起使用,用于将一个数组或嵌套的JSON数组展开成多行
- 实例:包含JSON数组的表users
{
"name": "John Doe",
"interests": ["Reading", "Hiking", "Cooking"]
}
{
"name": "Jane Smith",
"interests": ["Running", "Swimming"]
}
展开interests数组,并将每个兴趣爱好作为单独的行
SELECT name, interest
FROM users
LATERAL VIEW explode(interests) t AS interest;
- LATERAL VIEW: 这个关键字用于将explode函数的结果与原始表users进行连接,以便每行的interests数组展开成多行
- explode(interests): 这个函数将interests数组展开,每个元素成为一行
- t AS interest: 这是LATERAL VIEW的别名定义,t是一个临时表,interest是展开后的列名
name | interest
------------+---------
John Doe | Reading
John Doe | Hiking
John Doe | Cooking
Jane Smith | Running
Jane Smith | Swimming
regexp_replace函数
- 语法:
regexp_replace(string A, string B, string C)
- 说明:将字符串A中的符合java正则表达式B的部分替换为C,注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数
--将,替换为;
select regexp_replace('{"user_name":"chimchim","age":30,"sex":"woman"}', ',', ';');
JsonSerDe
- 从Hive 3.0.0开始,Hive内置了JsonSerDe,可以直接处理JSON文件,无需手动解析每个字段,在创建表时指定JsonSerDe序列化器,并在HDFS上存放JSON文件,就可以直接查询字段内容
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;
标签:interests,string,json,Hive,name,JSON,数组,函数
From: https://www.cnblogs.com/shihongpin/p/18454427