Hive SQL
- 通过分析需求来查看文档来完成指定的需求:
- 查看表中插入的数据
- 如果想查看更加详细的表的结构可以使用下面的sql语句
- 查看表中的信息
- 内部表与外部表在使用时的区别:
内部表在删除表时会将数据和元数据都会删除;
外部表在删除表时只会将元数据删除,但是数据还保存在hdfs的文件系统中
- 上述原因分析:
内部表创建后的数据还由hive进行对数据进行管理;
外部表创建的只是一个引用,hive不会对其中的数据进行管理。 - 创建分区时,定义的列的字段不能出现在表的结构中,创建分区可以提高查询检索的效率
- 因为dsn2进行了分区,所以进行导入数据时会报下面的错误:
- 创建两个分区时,hdfs会先按照第一分区的目录创建一级目录,在按第二分区来创建二级目录
- 分区的应用:如做日志分区时可以定义(年、月、日三个分区),如果只定义年的分区的时候粒度比较粗不方便实现对日志的检索、但如果定义年、月、日、时、分、秒的分区时粒度太细,不方便对分区进行管理与后期的维护;因此定义分区要根据实际需求来进行分区。
- 添加分区
- 删除分区
- 删除分区时,hive会将该分区关联的所有的分区全都删除
- 创建表时可以通过克隆表的元数据(表的结构),来实现快速来创建表,但是不会克隆数据(表中的数据)
- 创建表时将表的元数据与表中的数据进行复制
- 导入hdfs文件系统的数据
- 如果将数据手动移动到指定的目录后,查看表中的数据也是可以查到相关的数据
- 统计表中的数据并把结果复制到另外一张表中
Hive Serde、Beeline、JDBC
- 什么是Serde
- 我们只是Hive Serde这种方式实现了对数据的序列化与反序列化(对数据进行清洗),但是保存在hdfs中的数据还是没有发生任何变化,只是定义好了 读写规则。
- 当新添加的数据没有匹配上表格中的序列化与反序列化规则时,查看表中的数据会显示的行中出现很多的NULL。
- 关系型数据库是写时检查,而hive是读的时候检查(就是写入的时候并不会检查,当读的时候发现没有匹配规则的时候会显示NULL)。
- Hive Beeline客户端的使用
- 先在node03启动hiveserver2并查看后台进程
- 在node04客户端来启动beeline的第一种方式:
- 在node04客户端来启动beeline的第二种方式:
- HIve JDBC的运行方式
- Hive函数的书写要查看具体的函数文档
- 此处创建的是临时函数,退出之后函数自动销毁
Hive案例讲解
-
案例一:
-
整个sql语句的执行过程会转化为两个map/reduce的job来执行相关的任务
-
查看统计后的前10条数据结果
-
使用hive来实现数据的单词统计的分析思路:
-
如果只是输入set命令可以查看当前hive中的所有的参数设置
Hive的动态分区
- 使用动态分区需要的一些参数设置:
- 无论静态分区还是动态分区,其核心目的都是为了提高查询效率。
Hive分桶
- hive分桶的概念
- hive是如何进行分桶
- hive分桶应用场景一:
- 如果要将数据导入分桶表中要先创建普通表,先将数据导入普通表中,
再创建分桶表,然后通过insert into table bucket_table select colums from tb1;
Hive Lateral view、视图、索引
-
概念:
-
注意explode使用的注意:
-
由于udtf函数后面不能接任何函数或者任何的字段,存在缺点。
- Hive视图的概念
- 在关系型数据库中视图只可以作为查询,但是不能往视图上进行写数据
- Hive索引
- 索引创建好发现索引库是空的,所以需要重新rebuild索引库,才可以建立好索引库
- 查询相关表中的所有的索引信息
- 删除相关表的索引
Hive 运行方式、gui
- 1、控制台模式
- 2、脚本运行方式
- 在查看hive参数的时候可以将hive的相关参数写入到文件中,然后在查看
- Hive GUI接口
- 注意:在启动hive --service hwi 的时候要先启动hive --service metastore服务