HIVE之JSON字符串与(array数组,map映射,struct结构体)
今天主要给大家分享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结构体)想要更加详细的了解,可以看之前我码过的其相关文章。
lateral view explode (split(column,‘exp’)) 爆炸函数-CSDN博客
希望大家今天收获满满,感谢大家的点赞与收藏,您的支持就是我创作最大的动力,下期再见。
更多推荐
所有评论(0)