全网最详细的Hive文章系列,强烈建议收藏加关注!
后面更新文章都会列出历史文章目录,帮助大家回顾知识重点。
目录
系列历史文章
前言
2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习。
有对大数据感兴趣的可以关注微信公众号:三帮大数据
Hive数据库和表操作
一、数据库操作
1、创建数据库
说明:hive的表存放位置模式是由hive-site.xml当中的一个属性指定的
2、创建数据库并指定hdfs存储位置
3、查看数据库详细信息
查看数据库基本信息
4、删除数据库
删除一个空数据库,如果数据库下面有数据表,那么就会报错
强制删除数据库,包含数据库下面的表一起删除
二、数据库表操作
1、创建数据库表语法
说明:
1、CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。
2、EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
3、LIKE 允许用户复制现有的表结构,但是不复制数据。
4、ROW FORMAT DELIMITED 可用来指定行分隔符
5、STORED AS SEQUENCEFILE|TEXTFILE|RCFILE 来指定该表数据的存储格式,hive中,表的默认存储格式为TextFile。
6、CLUSTERED BY 对于每一个表(table)进行分桶(MapReuce中的分区),桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
7、LOCATION 指定表在HDFS上的存储位置。
2、Hive建表时候的字段类型
分类 | 类型 | 描述 | 字面量示例 |
原始类型 | BOOLEAN | true/false | TRUE |
TINYINT | 1字节的有符号整数 -128~127 | 1Y | |
SMALLINT | 2个字节的有符号整数,-32768~32767 | 1S | |
INT | 4个字节的带符号整数(-2147483648~2147483647) | 1 | |
BIGINT | 8字节带符号整数 | 1L | |
FLOAT | 4字节单精度浮点数1.0 | ||
DOUBLE | 8字节双精度浮点数 | 1.0 | |
DEICIMAL | 任意精度的带符号小数 | 1.0 | |
STRING | 字符串,变长 | “a”,’b’ | |
VARCHAR | 变长字符串 | “a”,’b’ | |
CHAR | 固定长度字符串 | “a”,’b’ | |
BINARY | 字节数组 | 无法表示 | |
TIMESTAMP | 时间戳,毫秒值精度 | 122327493795 | |
DATE | 日期 | ‘2016-03-29’ | |
Time | 时分秒 | ‘12:35:46’ | |
DateTime | 年月日 时分秒 | ||
复杂类型 | ARRAY | 有序的的同类型的集合 | ["beijing","shanghai","tianjin","hangzhou"] |
MAP | key-value,key必须为原始类型,value可以任意类型 | {"数学":80,"语文":89,"英语":95} | |
STRUCT | 字段集合,类型可以不同 | struct(‘1’,1,1.0) |
3、内部表操作
未被external修饰的是内部表(managed table),内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/warehouse),删除内部表会直接删除元数据(metadata)及存储数据,因此内部表不适合和其他工具共享数据。
1、hive建表初体验
2、创建表并指定字段之间的分隔符
3、根据查询结果创建表
4、根据已经存在的表结构创建表
5、查询表的类型
6、删除表
查看数据库和HDFS,发现删除内部表之后,所有的内容全部删除
4、外部表操作
在创建表的时候可以指定external关键字创建外部表,外部表对应的文件存储在location指定的hdfs目录下,向该目录添加新文件的同时,该表也会读取到该文件(当然文件格式必须跟表定义的一致)。
外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive外部表的时候,数据仍然存放在hdfs当中,不会删掉。
1、数据装载载命令Load
Load命令用于将外部数据加载到Hive表中
语法:
参数:
load data:表示加载数据
local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表
inpath:表示加载数据的路径
overwrite:表示覆盖表中已有数据,否则表示追加
into table:表示加载到哪张表
student:表示具体的表
partition:表示上传到指定分区
2、操作案例
分别创建老师与学生表外部表,并向表中加载数据
源数据如下:
student.txt
01 赵雷 1990-01-01 男
02 钱电 1990-12-21 男
03 孙风 1990-05-20 男
04 李云 1990-08-06 男
05 周梅 1991-12-01 女
06 吴兰 1992-03-01 女
07 郑竹 1989-07-01 女
08 王菊 1990-01-20 女
teacher.txt
01 张三
02 李四
03 王五
创建老师表:
创建学生表:
从本地文件系统向表中加载数据
加载数据并覆盖已有数据
从hdfs文件系统向表中加载数据
其实就是一个移动文件的操作
需要提前将数据上传到hdfs文件系统,
注意,如果删掉teacher表,hdfs的数据仍然存在,并且重新创建表之后,表中就直接存在数据了,因为我们的student表使用的是外部表,drop table之后,表当中的数据依然保留在hdfs上面了
5、复杂类型操作
1、Array类型
Array是数组类型,Array中存放相同类型的数据
源数据:
说明:name与locations之间制表符分隔,locations中元素之间逗号分隔
zhangsan beijing,shanghai,tianjin,hangzhou
wangwu changchun,chengdu,wuhan,beijin
建表语句
导入数据(从本地导入,同样支持从HDFS导入)
常用查询:
6、分区表
分区不是独立的表模型,要和内部表或者外部表结合:
内部分区表
外部分区表
1、基本操作
在大数据中,最常用的一种思想就是分治,分区表实际就是对应hdfs文件系统上的的独立的文件夹,该文件夹下是该分区所有数据文件。
分区可以理解为分类,通过分类把不同类型的数据放到不同的目录下。
分类的标准就是分区字段,可以一个,也可以多个。
分区表的意义在于优化查询。查询时尽量利用分区字段。如果不使用分区字段,就会全部扫描。
在查询是通过where子句查询来指定所需的分区。
在hive中,分区就是分文件夹
创建分区表语法
创建一个表带多个分区
加载数据到分区表中
加载数据到一个多分区的表中去
多分区联合查询使用union all来实现
查看分区
添加一个分区
同时添加多个分区
注意:添加分区之后就可以在hdfs文件系统当中看到表下面多了一个文件夹
删除分区
7、分桶表
分桶就是将数据划分到不同的文件,其实就是MapReduce的分区
1、基本操作
将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去
开启hive的桶表功能(如果执行该命令报错,表示这个版本的Hive已经自动开启了分桶功能,则直接进行下一步)
设置reduce的个数
创建分桶表
桶表的数据加载,由于桶表的数据加载通过hdfs dfs -put文件或者通过load data均不好使,只能通过insert overwrite
创建普通表,并通过insert overwrite的方式将普通表的数据通过查询的方式加载到桶表当中去
创建普通表:
普通表中加载数据
通过insert overwrite给桶表中加载数据
8、修改表
1、表重命名
基本语法:
2、增加/修改列信息
3、删除表
4、清空表数据
只能清空管理表,也就是内部表
9、hive表中加载数据
1、直接向分区表中插入数据
通过insert into方式加载数据
通过查询方式加载数据
2、通过查询插入数据
通过load方式加载数据
多插入模式
常用于实际生产环境当中,将一张表拆开成两部分或者多部分
给score表加载数据
创建第一部分表:
创建第二部分表:
分别给第一部分与第二部分表加载数据
查询语句中创建表并加载数据(as select)
将查询的结果保存到一张表当中去
创建表时通过location指定加载数据路径
1、创建表,并指定在hdfs上的位置
2、上传数据到hdfs上
3、查询数据
10、hive表中的数据导出
将hive表中的数据导出到其他任意目录,例如linux本地磁盘,例如hdfs,例如mysql等等
1、insert导出
1)将查询的结果导出到本地
2)将查询的结果格式化导出到本地
3)将查询的结果导出到HDFS上(没有local)
2、hive shell 命令导出
基本语法:(hive -f/-e 执行语句或者脚本 > file)
3、export导出到HDFS上
4、sqoop导出
由于篇幅有限,在项目实战的系列文章详细介绍
📢博客主页:
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 Lansonli 原创,首发于 CSDN博客🙉
📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨