当前位置:首页 >休闲 >Hive 内置的 Json 解析函数 就是“行转列”的过程

Hive 内置的 Json 解析函数 就是“行转列”的过程

2024-06-26 12:28:21 [百科] 来源:避面尹邢网

Hive 内置的内置 Json 解析函数

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

背景

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

Hive 内置的 Json 解析函数 就是“行转列”的过程

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

Hive 内置的 Json 解析函数 就是“行转列”的过程

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

Hive 内置的 Json 解析函数 就是“行转列”的过程

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

举例:

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')

说明:

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

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

举例:

test_data = '{ "name": "zhangsan",
"age": 18,
"preference": "music"}'

查询sql语句:

select get_json_object(test_data,'$.preference');

解析结果:

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

sql语句如下:

select get_json_object(test_data,'$.age'),get_json_object(test_data,'$.preference');

执行结果如下:

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

Hive内置的json解析函数:json_tuple

语法:

json_tuple(json_string, column1, column2, column3 ...)

说明:

解析 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"
}'

(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;

解析结果:

  • get_json_object函数 & json_tuple函数。
  • get_json_object 函数的使用语法中,使用到$.加上 json 的 key。
  • json_tuple 函数的使用语法中,不能使用$.加上 json 的 key,如果使用则会导致解析失败。
  • json_tuple 函数与 get_json_object 函数对比,可以发现 json_tuple 函数的优点是一次可以解析多个 json 字段。
  • 但是如果被要求解析的 json 是一个 json 数组,那么这两个函数都无法完成解析。
责任编辑:姜华 来源: 今日头条 jsonHive数据库

(责任编辑:娱乐)

    推荐文章
    热点阅读