赞
踩
想写这篇文章蛮久了,但这个数据类型,确实很少用,翻遍了代码库的所有代码,也没有找到。
但,之前分享过的 Hive复杂数据类型之 array 数组,
Hive复杂数据类型之array数组_hive 建表设置array类型-CSDN博客
Hive复杂数据类型之 map 映射,
hive复杂数据类型之 map映射_hive复杂数据类型map-CSDN博客
HIVE之JSON字符串与(array数组,map映射,struct结构体),
HIVE之JSON字符串与(array数组,map映射,struct结构体)-CSDN博客
就差分享struct结构体一篇了,幸不辱命。
emmmm,它是用来描述一群类似对象的数据记录方法,有相同的属性。
存放N种不同类型的数据,结构体,也是集合的一种。
比如说,用 struct结构体 来描述一个班级所有小学生的信息。
除了学生id之外,所有信息字段(性别,体重,身高,爱好...)都可以放进去
stud_id | stud_info |
小明 | {'sex':'man','weight':'30kg','hight(cm)':123,'hobby':'画画'} |
大红 | {'sex':'woman','weight':'28kg','hight(cm)':112,'hobby':'发呆'} |
结论:
所以,它是描述一群类似对象(同一班级学生)的数据记录方法,
可存放N种不同类型的数据(字符串,数值...),
注意,每个对象再结构体的信息属性都是相同的,只是属性值不一样,
也是集合(每个属性:属性值, 就是一个元素)的一种。
老样子,直接上图:
结论:
- --数据类型带结构体 struct的建表语句
-
- drop table if exists db_tmp.stud_info ;
-
- create table db_tmp.stud_info (
-
- name string comment '姓名'
-
- ,info struct<sex:string,city:string,hight:int> comment '信息'
-
- ,ETL_time string comment 'ETL时间'
-
- ) ;
如上图一样,可以自己去定义数据的内容。
- --数据写入
-
- insert into table db_tmp.stud_info
-
- select '小明' , named_struct('sex','男' ,'city','北京', 'hight',180)
-
- ubion all
-
- select '小红' , named_struct('sex','女' ,'city','上海', 'hight',175)
-
- ........
注意,很多资料说
insert into table db_tmp.stud_info
values( '小明' , named_struct('sex','男' ,'city','北京', 'hight',180) ,'2024-05-27' )
这种方法,根本说不通,emmm至少在hive是不行的,会直接报错。
当然,也可以select其他表的字段信息拼接成为 结构体字段。
- -- 从其他的表借用字段组合成为 struct
-
- -- 假如有一张表,刚好有对应的姓名,性别,城市,身高字段
-
- insert into table db_tmp.stud_info
-
- select name
- , named_struct('sex',sex ,'city',city , 'hight',hight) as info
- ,'2024-05-27' as etl_time
-
- from xxxxx
- ;
再举个例子:
下图给出建表语句,数据插入sql,以及查询语句。(select 的是时间维表的字段信息)
当然,如果你有数据文件,可以根据数据文件的信息,来进行建表。
然后加载数据到表对应的HDFS路径下自动映射成表。
- -- 【方法1】数据加载语句: into 到表
-
- load data local inpath 'date/bdetl/adm/sql/stud_info.csv' into table db_tmp.stud_info ;
-
-
- -- 【方法2】数据加载语句: put到表的存储路径下
-
- hdfs dfs -put date/bdetl/adm/sql/stud_info.csv /user/hive/warehouse/temp.db/stud_info
可以采用 struct的 【字段名.属性】 来获取 属性值
虽然它是复杂结构,但是它却不能和explode一块使用!!
注意报错信息:explode函数炸开array数组,map映射的数据。
欢迎一键三连,您的每一个点赞收藏关注都是我持续奋斗的动力。
后续会分享更多优质的,不可思议的内容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。