文章目录
1. 内部表、外部表
1.1 内部表
-
默认情况下创建的表就是内部表。
-
删除内部表时,会删除数据以及表的元数据。
-
可以使用
DESCRIBE FORMATTED tablename
来获取表的元数据描述信息,从中可以看出表的类型。
1.2 外部表
-
外部表中的数据不是Hive拥有或管理的。
-
创建一个外部表,需要使用
EXTERNAL
语法关键字。 -
删除外部表只会删除元数据,而不会删除实际数据。
-
可以使用
DESCRIBE FORMATTED tablename
来获取表的元数据描述信息,从中可以看出表的类型。
1.3 内、外部表差异
- 两者,Hive都在Hive Metastore中管理定义、字段类型等元数据信息。
- 删除内部表时,会从Metastore中删除表元数据,还会从HDFS中删除其所有数据文件。
- 删除外部表时,只会从Metastore中删除表的元数据,并保持HDFS位置中的实际数据不变。
1.4 Location关键字的作用
- 创建外部表不指定location,由默认参数控制
2. 分区表-Partitioned Tables
2.1 概念
- 当Hive表对应的数据量大、文件个数多时,为了避免查询时全表扫描数据,Hive支持根据指定的字段对表进行分区。
2.2 创建
- 分区表语法
注意:分区字段不能是表中已经存在的字段,因为分区字段最终也会以虚拟字段的形式显示再表结构上
- 实例示范:
2.3 分区表数据加载
2.3.1 静态分区
- 静态分区指的是分区属性值是由用户再加载数据的时候手动指定的。
- 语法如下:
Local参数用于指定待加载的数据是位于本地系统还是HDFS文件系统。
2.3.2 动态分区
- 动态分区指的是分区的字段值是基于查询结果(参数位置)自动推断出来的。核心语法是
insert+select
。 - 启动hive动态分区,需要在hive会话中设置两个参数:
- 实例示范:
2.4 注意事项
一、分区表不是建表的比要语法规则,是一种优化手段表,可选;
二、分区字段不能是表中已有的字段,不能重复;
三、分区字段是虚拟字段,其数据并不存储在底层的文件中;
四、分区字段值的确定来于用户价值数据手动指定(静态分区)或者根据查询结果位置自动推断(动态分区)
五、Hive支持多重分区,也就是说在分区的基础上继续分区,划分更加细粒度。
3. 分桶表-Bucketed Tables
3.1 概念
- 分桶表也叫做桶表,叫法源自建表语法中bucket单词,是一种用户优化查询而设计的表类型。
- 分桶表对应的数据文件被拆分成若干个独立的小文件。
- 在分桶时,要指定根据哪个字段将数据分为几桶
3.2 规则
- 分桶规则如下:桶编号相同的数据会被分到同一个桶当中。
3.3 语法
- CLUSTERED BY (col_name)表示根据哪个字段进行分;
- INTO N BUCKETS表示分为几桶(也就是几个部分)。
- 注意:分桶的字段必须是表中已经存在的字段。
- 实例示范:
3. 事务表-Transactional Tables
3.1 局限性
- 尚不支持BEGIN,COMMIT和ROLLBACK。所有语言操作都是自动提交的。
- 仅支持ORC文件格式(STORED AS ORC)
- 默认情况下事务配置为关闭。需要配置参数开启使用。
- 表必须是分桶表才可以使用事务功能。
- 表参数transactional必须为true;
- 外部表不能成为ACID表,不允许从非ACID会话读取/写入ACID表。
3.2 配置开启事务、创建事务表
4. 视图-Views
4.1 概念
- Hive中的视图(view)是一种虚拟表,只保存定义,不实际存储数据。
- 通常从真实的物理表查询中创建生成视图,也可以从已经存在的视图上创建新视图。
- 创建视图时,将冻结视图的架构,如果删除或更改基础表,则视图将失败。
- 视图是用来简化操作的,不缓冲记录,也没有提高查询性能。
4.2 语法
- 创建视图:
create view <viewname> as select ... from <tablename> limit ...;
- 显示当前已有的视图
show tables;
show views;--hive v2.2.0之后支持
- 视图的查询使用
select * from <viewname>;
- 查看视图定义
show create table <viewname>;
- 删除视图
drop view <viewname>;
- 更改视图属性
alter view <viewname> set TBLPROPERTIED('comment'='This is a view');
- 更改视图定义
alter view <viewname> as select ... from <tablename> limit ...;
5. 物化视图-Materialized Views
5.1 概念
- 物化视图是一个包括查询结果的数据库对象,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果。在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果
- 使用物化视图的目的就是通过预计算,提高查询性能
5.2 物化视图、视图区别
- 视图是需您的,逻辑存在的,只有定义没有存储数据。
- 物化视图是真实的,物理存在的,里面存储着预计算的数据。