Hive复杂数据类型之 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映射的数据。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/658803.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux命令 jps(Java Process Status)解释

文章目录 1、第一种解释2、第二种解释3、第三种解释 1、第一种解释 jps 命令本身并不是一个标准的 Unix/Linux 命令&#xff0c;但您可能是想提到 jps 的一个变种或误写了 jps 为 jps&#xff0c;而实际上可能是想提及 jps&#xff08;Java Virtual Machine Process Status To…

linux下常用的终端命令

文章目录 1. MV移动文件、重命名文件1.1 移动文件&#xff1a;mv [选项] 源文件或目录 目标文件或目录1.2 文件重命名 2. 查找&#xff1a;文件&#xff0c;内容&#xff0c;统计文件2.1 find查找文件2.2 Linux查找文件内容 3. 查看当前用户4. linux修改文件所属用户和组5. 复制…

红酒配餐中的酒杯选择与使用技巧

在红酒配餐中&#xff0c;酒杯的选择与使用技巧是影响品鉴体验的重要因素。合适的酒杯不仅能展现出红酒的优雅和风味&#xff0c;还能提升用餐的仪式感和愉悦感。云仓酒庄雷盛红酒以其卓着的品质和丰富的口感&#xff0c;成为了红酒爱好者们的首要选择品牌。下面将介绍在红酒配…

菜鸟的JavaSE学习之旅7

这是一个目录 数组工具类Arrays数学工具类Math继承重写&#xff08;Override&#xff09;覆盖、覆写注意 构造方法super关键字用法this关键字super和this 抽象抽象方法和抽象类格式抽象方法和抽象类使用抽象方法和抽象类注意事项 数组工具类Arrays java.util.Arrays是一个与数…

飞书API(10):通过阿里云MaxCompute数仓入库 - 转为阿里云 DataFrame 再入库

一、引入 上一小节介绍了怎么入库到阿里云的 MaxCompute 数仓&#xff0c;其中涉及到 2 种入库方式&#xff0c;一种是转为阿里云的 DataFrame&#xff0c;然后类似 pandas 的 DataFrame 直接写入 MySQL 的方法&#xff0c;将数据写入表中&#xff1b;另外一种是转为列表&…

linux开发之设备树四、设备树中断节点

中断节点 这里是由原厂的BSP工程师写的一部分 在CPU的外部有一个GIC控制器&#xff0c;外设会连接在GIC控制器上 设备树是对硬件进行描述的&#xff0c;所以设备树会对CPU进行描述&#xff0c;也要对GIC 控制器进行描述&#xff0c;这部分的代码由原厂的BSP工程师进行编写&…

微软Build开发者大会速览,OpenAI CEO站台剧透新模型

5月22日凌晨&#xff0c;微软Build 2024开发者大会在美国西雅图召开。微软CEO萨蒂亚纳德拉在会上发表主题演讲&#xff0c;宣布了超过50项产品更新&#xff0c;涵盖AI基础设施、模型产品以及生产力工具等多个领域。纳德拉强调&#xff0c;微软一直致力于让人工智能理解人类并帮…

Python的解析网页

课前案例 通过requests模块爬取指定网站中的图片并保存到本地目录中。 上述案例采用的是同步方式下载图片&#xff0c;效率太低。异步方式如下&#xff08;线程&#xff09;&#xff1a; # target为目标函数&#xff1b;args中传入的是download函数的参数url threading.Threa…

TypeScript系列之-- 数组和元组类型

数组的定义&#xff1a; 第一种&#xff0c;可以在元素类型后面接上[] let list: number[] [1, 2, 3]; 第二种方式是使用数组泛型&#xff0c;Array<元素类型> let list: Array<number> [1, 2, 3]; 如果数组想每一项放入不同数据怎么办&#xff1f;用元组类型…

C# yolov8 TensorRT +ByteTrack Demo

C# yolov8 TensorRT ByteTrack Demo 目录 效果 说明 项目 代码 Form2.cs YoloV8.cs ByteTracker.cs 下载 参考 效果 说明 环境 NVIDIA GeForce RTX 4060 Laptop GPU cuda12.1cudnn 8.8.1TensorRT-8.6.1.6 版本和我不一致的需要重新编译TensorRtExtern.dll&…

深入分析 Android Activity (十)

文章目录 深入分析 Android Activity (十)1. Activity 的资源管理1.1 使用资源 ID 访问资源1.2 Drawable 资源1.3 使用 TypedArray 管理资源1.4 使用资源配置 2. Activity 的数据存储2.1 SharedPreferences2.2 文件存储2.3 SQLite 数据库2.4 ContentProvider 3. Activity 的性能…

倪老师是教我们如何去读书

之前一篇我们了解了倪老师&#xff0c;告诉我们如何去学习一些东西&#xff0c;今天这一篇&#xff0c;我把倪老师视频里面总结的几点&#xff0c;倪老师教我们如何去读书&#xff0c;我把一些小细节做了一个简单的整理&#xff0c;我们共同地去看&#xff0c;倪老师是教我们如…

JVS物联网、逻辑引擎、智能BI(重构优化)5.21功能新增说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

SqliSniper:针对HTTP Header的基于时间SQL盲注模糊测试工具

关于SqliSniper SqliSniper是一款基于Python开发的强大工具&#xff0c;该工具旨在检测HTTP请求Header中潜在的基于时间的SQL盲注问题。 该工具支持通过多线程形式快速扫描和识别目标应用程序中的潜在漏洞&#xff0c;可以大幅增强安全评估过程&#xff0c;同时确保了速度和效…

使用 Django 连接 MySQL 数据库

文章目录 步骤一&#xff1a;安装必要的库和驱动步骤二&#xff1a;配置数据库连接步骤三&#xff1a;执行数据库迁移步骤四&#xff1a;开始使用 MySQL 数据库创建一个模型迁移模型到数据库使用模型进行数据操作创建新记录&#xff1a;查询记录&#xff1a;更新记录&#xff1…

Innodb Buffer Pool缓存机制(一)一条sql的执行过程

思维导图 石墨文档&#xff1a;https://shimo.im/mindmaps/NJkbnZV0ePINXzkR 一、SQL的执行 执行过程&#xff1a; 加载缓存数据&#xff0c;加载id为1的记录所在的整页数据&#xff08;相当于索引树的一个结点&#xff0c;16KB&#xff09;&#xff1b;写入更新数据的旧值到…

重生奇迹mu卡智力的方法

1、准备3个号A打手,B智力MM,C随意。 2、使用C匹配组队,但是不能选择自动进入队伍。 3、用A申请C的队伍,但是C不做通过处理。 4、用A组B,用快捷键D的方式。 5、所谓的卡智力就是智力MM可以给打手加属性加血&#xff0c;但是并不在一个队伍里享受经验&#xff0c;适用于MM不是…

如何提升网站运营效率

企业网站作为品牌展示、客户获取和商业目标实现的关键平台&#xff0c;其运营效率的提升对增强用户体验、搜索引擎排名和转化率至关重要。以下是一些有效技术和策略的介绍&#xff0c;旨在助力您提高网站运营的效率。 一、网站速度的优化 1.1 利用内容分发网络&#xff08;CD…

基于Docker的ROS开发

本文主要介绍如何使用Docker在Windows和Linux环境中部署并使用ROS&#xff0c;通过Docker Container运行ROS&#xff0c;可以方便我们在一个本地环境中运行多个ROS版本。 更多内容&#xff0c;访问专栏目录获取实时更新。 关于ROS的版本 参考ROS1 Distribution Wiki和ROS2 Dis…

轻松驾驭文件管理:一键转换格式,自定义重命名,让你的文件整理更高效便捷!

在日常工作和生活中&#xff0c;我们经常会面临需要修改文件格式的情况。无论是转换文件为更普遍使用的格式&#xff0c;还是根据特定需求调整文件的扩展名&#xff0c;都需要一个简单而有效的文件管理工具来完成这项任务。那么&#xff0c;文件批量改名高手将会让您在文件格式…