Hive之数据类型和视图

news2025/7/19 0:06:14

Hive系列


第八章 数据类型和视图

8.1 数据类型

8.1.1 原子数据类型

在这里插入图片描述
(其实上图中有一点错误,大家可以找找看)

说明:

1、Hive 支持日期类型(老版本不支持),在 Hive 里日期一般都是用字符串来表示的,而常用的日期格式转化操作则是通过自定义函数进行操作,当然也可以直接指定为日期类型。

2、Hive 是用 Java 开发的,Hive 里的基本数据类型和 java 的基本数据类型基本上是对应的, 除了 String 类型。

3、有符号的整数类型:TINYINT、SMALLINT、INT 和 BIGINT 分别等价于 Java 的 Byte、Short、 Int 和 Long 原子类型,它们分别为 1 字节、2 字节、4 字节和 8 字节有符号整数。

4、Hive 的浮点数据类型 FLOAT 和 DOUBLE,对应于 Java 的基本类型 Float 和 Double 类型。

5、Hive 的 BOOLEAN 类型相当于 Java 的基本数据类型 Boolean。 

6、Hive 的 String 类型相当于数据库的 Varchar 类型,该类型是一个可变的字符串,不过它不 能声明其中最多能存储多少个字符,理论上它可以存储 2GB 的字符数。

8.1.2 复杂数据类型

8.1.2.1 理论

复杂数据类型包括数组(ARRAY)、映射(MAP)和结构体(STRUCT),具体如下所示

ARRAY:ARRAY 类型是由一系列相同数据类型的元素组成,这些元素可以通过下标来访问。 比如有一个 ARRAY 类型的变量 fruits,它是由['apple','orange','mango']组成,那么我们可以通过 fruits[1]来访问元素 orange,因为 ARRAY 类型的下标是从 0 开始的 。

MAP:MAP 包含 key->value 键值对,可以通过 key 来访问元素。比如”userlist”是一个 map 类 型 , 其 中 username 是 key , password 是 value ; 那 么 我 们 可 以 通 过 userlist['username']来得到这个用户对应的 password。

STRUCT:STRUCT 可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素,比如 user 是一个 STRUCT 类型,那么可以通过 user.address 得 到这个用户的地址。

示例:

CREATE TABLE student(  
	name STRING,  
	favors ARRAY<STRING>,  
	scores MAP<STRING, FLOAT>,     
	address STRUCT<province:STRING, city:STRING, detail:STRING, zip:INT> 
)     
	ROW FORMAT DELIMITED     
	FIELDS TERMINATED BY '\t'     
	COLLECTION ITEMS TERMINATED BY ';' 
	MAP KEYS TERMINATED BY ':' ; 

说明:

1、字段 name 是基本类型,favors 是数组类型,可以保存很多爱好,scores 是映射类型,可以保存多个课程的成绩,address 是结构类型,可以存储住址信息 。
2、ROW FORMAT DELIMITED 是指明后面的关键词是列和元素分隔符的 。
3、FIELDS TERMINATED BY 是字段分隔符 。
4、COLLECTION ITEMS TERMINATED BY 是元素分隔符(Array 中的各元素、Struct 中的各元素、 Map 中的 key-value 对之间) 。
5、MAP KEYS TERMINATED BY 是 Map 中 key 与 value 的分隔符 。
6、LINES TERMINATED BY 是行之间的分隔符 。
7、STORED AS TEXTFILE 指数据文件上传之后保存的格式 。

总结:在关系型数据库中,我们至少需要三张表来定义,包括学生基本表、爱好表、成绩表; 但在 Hive 中通过一张表就可以搞定了。也就是说,复合数据类型把多表关系通过一张表就 可以实现了。

8.1.2.2 实践

1、数组
create database db;
use db;
create table person(name string,location array<string>) row format delimited fields terminated by "\t" collection items terminated by ",";

vim array.txt,在里面添加如下数据
Huangbo	beijing,shanghai,tianjin,Hangzhou
Xuzheng	tianjin,chengdu,wuhan 
Wangbaoqiang	wuhan,shenyang,jilin

load data local inpath '/home/data/array.txt' into table person;

select * from person;
select location from person;
select location[0] from person;

2、map
vim map.txt
huangbo	yuwen:80,shuxue:89,yingyu:95
xuzheng	yuwen:70,shuxue:65,yingyu:81
wangbaoqiang	yuwen:75,shuxue:100,yingyu:75

接下来创建一个新的表,可以解析这个三个数据:
create table score(name string, scores map<string,int>) row format delimited fields terminated by '\t' collection items terminated by ',' map keys terminated by ':';

desc formatted score;

load data local inpath '/home/data/map.txt' into table score;

select * from score;
select name from score; 
select scores from score; 
select s.scores['yuwen'] from score s;

3、struct结构
建表语句: 
create table structtable(id int,course struct<name:string,score:int>) row format delimited fields terminated by '\t' collection items terminated by ','; 
 数据: 
vim structtable.txt
1	english,80
2	math,89
3	chinese,95
 
导入数据: 
load data local inpath '/home/data/structtable.txt' into table structtable; 
 
查询语句: 
select * from structtable;
select id from structtable;
select course from structtable;
select t.course.name from structtable t;
select t.course.score from structtable t;

8.2 Hive视图

8.2.1 理论

和关系型数据库一样,Hive 也提供了视图的功能,不过请注意,Hive 的视图和关系型数据库的视图还是有很大的区别:
1、只有逻辑视图,没有物理视图;
2、视图只能查询,不能 Load/Insert/Update/Delete 数据;
3、视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的那些子查询 。

创建视图

create view view_name as select * from carss; 
create view carss_view as select * from carss limit 500; 

查看视图

show tables;   // 可以查看表,也可以查看视图 
desc view_name  // 查看某个具体视图的信息 
desc carss_view 

删除视图

drop view view_name 
drop view if exists carss_view 

使用视图

create view sogou_view as select * from sogou_table where rank > 3 ; 
select count(distinct uid) from sogou_view; 

8.2.2 实际操作

视图
use myhive;
查询下面的语句
select department, count(*) as total from student group by department;

select a.department,a.total from (select department, count(*) as total from student group by department) a;

创建一个视图:
create view groupby_dpt_count as select department, count(*) as total from student group by department;

select a.department,a.total from groupby_dpt_count a;//虚表
select department,total from groupby_dpt_count;//虚表

show views;1.x不对,2.x对,3.x对。
show tables;//对的

删除视图:
drop table groupby_dpt_count;//这是不可以的。不同版本不一样。注意测试。
2021-10-11 22:19:59,670 ERROR [5f4ee6d3-64c4-4b25-afe9-b17761db9179 main] exec.DDLTask: Failed
org.apache.hadoop.hive.ql.metadata.HiveException: Cannot drop a view with DROP TABLE
.......
注意测试,不同的版本不一样。hive3.1.2报错如上

drop view groupby_dpt_count;//可以的


声明:
        文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。


By luoyepiaoxue2014

微博地址: http://weibo.com/luoyepiaoxue2014 点击打开链接

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STC 51单片机40——汇编语言 串口 接收与发送

实际运行&#xff0c;正常 ; 仿真时&#xff0c;单步运行&#xff0c;记得设置虚拟串口数据【仿真有问题&#xff0c;虚拟串口助手工作不正常&#xff01;】 ORG 0000H MOV TMOD ,#20H ;定时器1&#xff0c;工作方式2&#xff0c;8位重装载 MOV TH1,#0FDH ; 波特率…

智慧酒店解决方案-最新全套文件

智慧酒店解决方案-最新全套文件一、建设背景为什么要建设智慧酒店一、智慧酒店功能亮点 &#xff1a;二、智慧酒店八大特色&#xff1a;二、建设思路三、建设方案四、获取 - 智慧酒店全套最新解决方案合集一、建设背景 为什么要建设智慧酒店 一、智慧酒店功能亮点 &#xff1…

mysql-8.0.31-macos12-x86_64记录

常用的命令 停止MySQL服务 : sudo /usr/local/mysql/support-files/mysql.server stop 启动MySQL服务 : sudo /usr/local/mysql/support-files/mysql.server start 重启MySQL服务 : sudo /usr/local/mysql/support-files/mysql.server restart 修改mysql密码 关闭mysql服务…

Qt5开发从入门到精通——第十二篇二节(Qt5 事件处理及实例——多线程控制、互斥量、信号量、线程等待与唤醒)

提示&#xff1a;欢迎小伙伴的点评✨✨&#xff0c;相互学习c/c应用开发。&#x1f373;&#x1f373;&#x1f373; 博主&#x1f9d1;&#x1f9d1; 本着开源的精神交流Qt开发的经验、将持续更新续章&#xff0c;为社区贡献博主自身的开源精神&#x1f469;‍&#x1f680; 文…

【C语言数据结构】带头节点与不带头节点的单链表头插法对比

前言 近期在学习STM32代码框架的过程中&#xff0c;老师使用链表来注册设备&#xff0c;发现使用了不带头节点的单链表&#xff0c;注册时使用头插法。之前在本专题整理学习过带头节点的单链表&#xff0c;因此本文整理对比一下两种方式的头插法区别&#xff0c;具体实现在次&…

html表白代码

目录一.引言二.表白效果展示1.惊喜表白2.烟花表白3.玫瑰花表白4.心形表白5.心加文字6.炫酷的特效一.引言 我们可以用一下好看的网页来表白&#xff0c;下面就有我觉得很有趣的表白代码。评论直接找我要源码也行。 下载整套表白文件 二.表白效果展示 1.惊喜表白 2.烟花表白 源码…

【TS】泛型以及多个泛型参数

泛型 给函数或者属性定义类型的时候&#xff0c;类型是固定的&#xff0c;当业务发生变动时可能不好维护&#xff0c;例如&#xff1a;函数类型固定为string,后续需求更改不好维护&#xff0c;比如需要传入number类型&#xff0c;那么这个函数就不适用了 function add( val :…

数学题类英语作文

最近我看到过这样一道英语作文题&#xff0c;这类英语作文题很少见&#xff0c;但也有必要讲一讲怎么写。 简化题意&#xff1a;帮Peter完成一下一道题&#xff1a; f(x)ax2−(a6)x3ln⁡xf(x)ax^2-(a6)x3\ln xf(x)ax2−(a6)x3lnx &#xff08;1&#xff09;讨论当a1a1a1时&am…

CMake中file的使用

CMake中的file命令用于文件操作&#xff0c;其文件格式如下&#xff1a;此命令专用于需要访问文件系统的文件和路径操作 Readingfile(READ <filename> <variable>[OFFSET <offset>] [LIMIT <max-in>] [HEX])file(STRINGS <filename> <variab…

Java8-新特性及Lambda表达式

1、Java8新特性内容概述 1.1、简介 Java 8(又称为jdk1.8)是Java语言开发的一个主要版本 Java 8是oracle公司于2014年3月发布&#xff0c;可以看成是自Java 5以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性 1.2、新特性思维导图总结 1.…

JS中数组随机排序实现(原地算法sort/shuffle算法)

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;专注于前端领域各种技术&#xff0c;热衷分享&#xff0c;期待你的关注。 &#x1f4ab;系列专栏&#xff1a;vue3从入门到精通 &#x1f4dd;个人签名&#xff1a;不破不立 目录一、原地…

代码随想录刷题|LeetCode 70. 爬楼梯(进阶) 322. 零钱兑换 279.完全平方数 139.单词拆分

目录 70. 爬楼梯 &#xff08;进阶&#xff09; 思路 爬楼梯 1或2步爬楼梯 多步爬楼梯 322. 零钱兑换 思考 1、确定dp数组及其含义 2、确定递推公式 3、初始化dp数组 4、确定遍历顺序 零钱兑换 先遍历物品&#xff0c;再遍历背包 先遍历背包&#xff0c;再遍历物品 279.完全平方…

【操作系统实验】线程的创建+信号量通信

sem_init: 功能&#xff1a;初始化信号量 返回值&#xff1a;创建成功返回0&#xff0c;失败返回-1 参数sem&#xff1a;指向信号量结构的一个指针 参数pshared&#xff1a;不为&#xff10;时此信号量在进程间共享&#xff0c;为0时当前进程的所有线程共享 参数value&#xf…

react context原理

带着问题思考&#xff1a; 1 Provder 如何传递 context&#xff1f;2 三种获取 context 原理 &#xff08; Consumer&#xff0c; useContext&#xff0c;contextType &#xff09;&#xff1f;3 消费 context 的组件&#xff0c;context 改变&#xff0c;为什么会订阅更新 &a…

Vue+iview将表格table以excel文件导出的几种方式

前言 在日常工作中&#xff0c;若是经常跟后台管理系统打交道的朋友想必对导出excel表格这种需求肯定很熟悉吧。不过我也问了身边的一些岗位为后端工程师的朋友&#xff0c;他们说在公司的话一般导出excel表格的工作一般由后端来做&#xff0c;前端只需要调用接口即可。我的话…

AI面试必备-《家居必备的AI精选资源列表》免费分享

本资源介绍 DeepMind科学家和工程师为有兴趣了解更多人工智能、机器学习和其他相关主题的学生整理的教育资源列表。 文末附本书免费获取地址。 内容截图 本资源免费下载地址 链接: https://pan.baidu.com/s/1IkPk0a3q2Z1z4FATG2y7HA?pwdwy3c 提取码: wy3c 往期精品内容推荐 大…

认知电子战 | 无线电中的认知理论

认知的概念 认知(Cognition)是指人认识外界事务的过程 认知本来是用于描述具有生命特征的物种的,借用于机器或系统上,就是指将认知的思想应用于机器上。 生物的认知特点: 感觉思考、推理、问题解答判断记忆分别对应于系统认知特点: 感知(各种传感器)机器学习算法、基…

算法提升:图的启发式搜索算法(A算法、A*算法)

启发式搜索算法 目录 概念 A算法 A*算法 概念 启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search)&#xff0c;它是利用问题拥有的启发信息来引导搜索&#xff0c;达到减少搜索范围、降低问题复杂度的目的&#xff0c;这种利用启发信息的搜索过程称为启发…

修改 Git 已经提交记录的 用户名 和邮箱

修改 Git 已经提交记录的 用户名 和邮箱 有关 Git 和版本控制的常见问题。 如何更改提交的作者姓名/电子邮件&#xff1f; 在我们进入解决方案之前&#xff0c;让我们找出您到底想要完成什么&#xff1a; 在提交之前更改作者信息在提交后更改作者信息&#xff08;即历史提交…

常见的前端安全问题(xss / csrf / sql / ddos / cdn...)

目录 1. xss&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击 1.1 持久型&#xff08;存储型&#xff09;攻击 / 非持久型&#xff08;反射型&#xff09;攻击 是什么&#xff1f; 1.2 xss 出现的场景&#xff1f;造成的危害&#xff1f; 1.3 防御 xss&#xff0…