欢迎来到思维库

思维库

Hive 内置的 Json 解析函数

时间:2025-11-04 14:44:15 出处:热点阅读(143)

背景

在大数据 ETL(Extract-Transfer-Load) 过程中,内置经常需要从不同的析函数据源来提取数据进行加工处理,比较常见的内置是从 Mysql 数据库来提取数据,而 Mysql 数据库中数据存储的析函比较常见方式是使用 json 串进行存储。

通过大数据加工处理出来的内置数据是需要具有可直观分析的特点,可从数据分析中挖掘出商业价值的析函。

因此在数据预处理层需要将 json 串进行“拍平”处理,内置所谓“拍平”是析函指将 json 中的 key 转换为表的列字段,其 key 对应的内置 value 值则为列字段对应的值。

“拍平”的析函处理行业内也可称为“行转列”处理,我举个例子你就能明白什么是内置行转列了。

举例:

user表字段如下:

现需要将 user 表中字段 detail_info 中的析函 json 串值,以每个 key 作为 user_detail_info 表的内置字段来进行存储。

实现的高防服务器析函 user_detail_info 表字段如下:

从 user 表到 user_detail_info 表的转换,就是内置“行转列”的过程。

你是否会好奇,在 Hive 中这个过程是如何实现的呢?

下文会解答你的疑惑。

Hive内置的json解析函数:get_json_object

语法: 复制get_json_object(json_string, $.column)1. 说明:

解析 json 的字符串 json_string, 返回 path 指定的内容。如果输入的 json 字符串无效,结果返回 NULL。

这个函数每次只能返回一个数据项。

举例: 复制test_data = {"name": "zhangsan", "age": 18

,

"preference": "music"}1.2.3. 查询sql语句: 复制select get_json_object(test_data,$.preference);1. 解析结果:

如果需要同时解析 age, preference 这两个字段。

sql语句如下: 复制select get_json_object(test_data,$.age),get_json_object(test_data,$.preference);1. 执行结果如下:

如果需要同时解析的字段很多,很显然使用这种方式写就比较麻烦了,这时候 json_tuple 这个函数是个更好的选择。

Hive内置的json解析函数:json_tuple

语法: 复制json_tuple(json_string, column1, column2, column3 ...)1. 说明:

解析 json 的字符串 json_string,可同时指定多个 json 数据中的 column,返回对应的源码库 value。如果输入的 json 字符串无效,结果返回 NULL。

举例:

例如:test_table1 表的 data 字段存储的是以下 json 串信息,现在想要获取这个 json 串的每个 key 并将其对应的 value 值查询出来。

(1). 准备 test_table1 表 data 字段的 json 数据 复制data = { "name": "rocky"

,

"age": 20

,

"prefer": "dance"

,

"height": 1.8

,

"nation": "China"}1.2.3.4.5.6.7. (2). sql查询语句 复制select t1.name

,

t1.age

,

t1.prefer

,

t1.height

,

t1.nation from (select data from test_table1 ) t0 lateral view json_tuple(t0.data

,

name

,

age

,

prefer

,

height

,

nation ) t1 as name,age,prefer,height,nation;1.2.3.4.5.6.7.8.9.10.11.12.13.14.15. 解析结果:

get_json_object函数 & json_tuple函数。get_json_object 函数的使用语法中,使用到$.加上 json 的 key。json_tuple 函数的使用语法中,不能使用$.加上 json 的 key,如果使用则会导致解析失败。json_tuple 函数与 get_json_object 函数对比,可以发现 json_tuple 函数的优点是一次可以解析多个 json 字段。但是如果被要求解析的 json 是一个 json 数组,那么这两个函数都无法完成解析。亿华云计算

分享到:

温馨提示:以上内容和图片整理于网络,仅供参考,希望对您有帮助!如有侵权行为请联系删除!

友情链接: