今天主要给大家分享JSON文件,如何映射成表!!!并且JSON文件的内容都是比较复杂,大概率都会涉及到(array数组,map映射,struct结构体),在这里给大家做一个小结,本章节信息量较大,难度较高。

1,JSON文件

1,现在有如下格式的JSON文件(teacher.txt) ,需要HIVE进行处理分析,我们如何设计成表呢??

上面图片的数据看起来挺累的,我们来看看下面这个。

2,JSON字符串

注意:下面图片是格式化之后的结果。文件中的每行数据都是为一个完整的字符串。

JSON 语法规则:数据为 键/值 对,数据由逗号分隔,大括号保存对象,方括号保存数组。

3,JSON如何设计成表

别慌,我们可以用hive专门负责解析JSON文件的JSON serde(序列化),

我们来看看JSON字符串里面,它是由4个数据信息组成的。

我们在设计表的字段必须要跟JSON字符串的4个一级字段(name,friends,students,address)保持一致就行。

但是我们发现一级字段(friends,students,address)具有嵌套结构,我们可以考虑使用hive复杂数据类型来保存其内容。

friends: 内容是[]包裹,里面的内容都是并列的,可以考虑array数组。

students:内容是{}包裹,里面的内容呈现都是由KV键值对的,KV映射唯一,可以考虑map映射。

address: 内容是{}包裹,里面的内容呈现都是由KV键值对的,KV映射不唯一,但是K一致,是通用属性,可以考虑struct结构体。

4,表的设计

注意 row format serde 后面跟的内容是 serde2.JsonSeeD是hive专门负责解析JSON文件。

我们只需要把JSON里的每一个一级字段,设置好映射在表里它的字段名称和字段类型即可。

5,文件加载映射成表

接下来就是把文件加载到HIVE里(刚刚建表的时候指定的路径,/user/hive/warehouse/teacher),映射成表 teacher。

注意:sruct结构体的属性名,在HIVE文件里,是不存在的,只存在{属性值1,属性值2....}

但是在表查询的时候可以展示出来{属性名1:属性值1,属性名2:属性值2....}

6,查看表的数据

select  * from teacher ;

映射成表之后,咱们来查询一下数据长什么样子。

好,数据加载出来了,确实和JSON字符串的字段数,数据内容都一致,是我们想要的结果(这里写入了两条的相同的哈)。

7,array, ,map, struct 数据如何取值

array用下标,字段名[0]表示第一个,字段名[1]表示第二个,以此类推。

map用字段名[key]。  struct用  字段名.[key]。

好了,今天的分享就到这里。如果大家对(array数组,map映射,struct结构体)想要更加详细的了解,可以看之前我码过的其相关文章。

hive复杂数据类型之 map映射-CSDN博客

Hive复杂数据类型之array数组-CSDN博客

lateral view explode (split(column,‘exp’)) 爆炸函数-CSDN博客

希望大家今天收获满满,感谢大家的点赞与收藏,您的支持就是我创作最大的动力,下期再见。

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐