Hive(六)JSON函数

概念

什么是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;
posted @   一年都在冬眠  阅读(117)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示