Hive数据定义语言-DDL-建表高阶语法(内外部、分区、分桶、事务、视图、物化视图)


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 物化视图、视图区别

  • 视图是需您的,逻辑存在的,只有定义没有存储数据。
  • 物化视图是真实的,物理存在的,里面存储着预计算的数据。

5.3 语法

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值