首页 > 其他分享 >Hive复杂数据类型之 Struct结构体

Hive复杂数据类型之 Struct结构体

时间:2024-05-29 09:32:23浏览次数:22  
标签:info Struct db 数据类型 Hive sex stud struct

想写这篇文章蛮久了,但这个数据类型,确实很少用,翻遍了代码库的所有代码,也没有找到。

但,之前分享过的 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结构体一篇了,幸不辱命。

1, 什么是 struct结构体

emmmm,它是用来描述一群类似对象的数据记录方法,有相同的属性。

存放N种不同类型的数据,结构体,也是集合的一种。

比如说,用 struct结构体 来描述一个班级所有小学生的信息。

除了学生id之外,所有信息字段(性别,体重,身高,爱好...)都可以放进去

stud_idstud_info
小明{'sex':'man','weight':'30kg','hight(cm)':123,'hobby':'画画'}
大红{'sex':'woman','weight':'28kg','hight(cm)':112,'hobby':'发呆'}

结论:

所以,它是描述一群类似对象(同一班级学生)的数据记录方法,

可存放N种不同类型的数据(字符串,数值...),

注意,每个对象再结构体的信息属性都是相同的,只是属性值不一样,

也是集合(每个属性:属性值, 就是一个元素)的一种。

2,结构体strcut 的建表语句

老样子,直接上图:

结论:

--数据类型带结构体 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时间'

) ;

3,结构体strcut 的数据写入

3.1,方法一

如上图一样,可以自己去定义数据的内容。

--数据写入

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是不行的,会直接报错。

3.2,方法二

当然,也可以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 的是时间维表的字段信息)

3.3,方法三

当然,如果你有数据文件,可以根据数据文件的信息,来进行建表。

然后加载数据到表对应的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 

4,结构体strcut 的数据取值

可以采用 struct的 【字段名.属性】  来获取 属性值

5,可以和 explode 爆炸函数一块使用嘛

虽然它是复杂结构,但是它却不能和explode一块使用!!

注意报错信息:explode函数炸开array数组,map映射的数据。

欢迎一键三连,您的每一个点赞收藏关注都是我持续奋斗的动力。

后续会分享更多优质的,不可思议的内容。

标签:info,Struct,db,数据类型,Hive,sex,stud,struct
From: https://blog.csdn.net/wowulita123/article/details/139248234

相关文章

  • redis数据类型之string,list
    华子目录key操作说明`SCANcursor[MATCHpattern][COUNTcount]``dump`与`restore``keys通配符`示例演示`string`说明`setbitkeyoffsetvalue``getbitkeyoffset``setrangekeyoffsetvalue``List`结构图相关命令`lremkeycountvalue``ltrimkeycountvalu......
  • E. Data Structures Fan
    非常有意思的一道思维题!!!!先上两个题解:题解1:题解2:总的思路就是伪“前缀和”,然后维护选0还是选1的异或和就够了。如果改变,就直接像前缀和那样改,证明理由就是0^a=a;a^a=0;代码:#define_CRT_SECURE_NO_WARNINGS#include<iostream>#include<vector>#include<algorithm>......
  • 单片机中的数据类型占用空间及取值范围
    参考链接 8051单片机基础5:数据类型占用空间大小及取值范围-电子工程世界(eeworld.com.cn)    参考资料:Keil>Help>uVisionHelp>Cx51CompilerUser’sGuide>LanguageExtensions>DataTypesKeil>Help>uVisionHelp>ArmCompiler5User......
  • datax 抽取hive表到doris
    datax读取hive表有两种方式,一种是读取hdfs文件路径HDFSReader,因为hive是存储在hdfs上。第二种是读取hive表RDBMSReader。HDFSReader{"job":{"setting":{"speed":{"channel":3},"......
  • C语言学习——break语句,continue语句,signed与unsigned,再论数据类型
    目录一、break语句二、continue语句 三、signed与unsigned1.当程序运行时,如果发生了越界:2.有符号与无符号 四、再论数据类型1.C语言中的sizeof关键字2.C语言中的奇葩整型(long)3.数据类型的本质区别一、break语句1、break语句可以结束当前循环的执行2、执行完brea......
  • 【Java】变量_数据类型
    1、变量1.1简介在JavaSE(JavaPlatform,StandardEdition)中,变量是用于存储数据的容器,每个变量都有一个类型,这个类型决定了变量可以存储的数据种类以及存储这些数据所需的内存空间大小。下面将详细介绍Java中变量的声明和数据类型。1.2变量声明变量必须要先声明,才能使用......
  • 可变数据类型(mutable)与不可变数据类型(immutable)总结
    一、基本概念不可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。其中基本数据类型都是不可变数据类型,例如int,如果一个int类型的数据发生改变,那么它指向了内存中的另一个地址,但是需要注意的是java缓存了......
  • 数据类型
    //如果要对一个数据进行精确的操作,第一步就是判断它的数据类型//1.原始类型数值:整数,小数字符串,使用引号当定界符:"zhu"布尔值:false,trueundefined:未定义null:空typeof:专用于原始类型的检测如console.log(typrof100);//2.引用类型/对象//函数也是对象,函数......
  • Java语言程序设计1 第二章:变量、数据类型、运算符、表达式
    一、变量1.概念:        计算机中的一块内存空间,存储数据的基本单元2.变量的组成部分:        数据类型、变量名、数据3.语法:        (1)先声明,再赋值:       ·数据类型变量名;//声明                变量......
  • Hive文档
    Hive知识体系保姆级教程一.Hive概览1.1hive的简介Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。其本质是将SQL转换为MapReduce/Spark的任务进行运算,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为M......