【学习历程】16 Hive的四种表模型
作者:互联网
文章目录
一、内部表与外部表
1.1 内部表与外部表的区别
1、建表语法的区别
- 外部表在创建的时候需要加上external关键字
2、删除表之后的区别
- 内部表删除后,表的元数据和真实数据都被删除了
- 外部表删除后,仅仅只是把该表的元数据删除了,真实数据还在,后期还是可以恢复出来
1.2 内部表与外部表的使用时机
- 内部表由于删除表的时候会同步删除HDFS的数据文件,所以确定如果一个表仅仅是你独占使用,其他人不使用的时候就可以创建内部表,如果一个表的文件数据,其他人也要使用,那么就创建外部表
- 一般外部表都是用在数据仓库的ODS层
- 内部表都是用在数据仓库的DW层
二、分区表与分桶表
2.1 分区表
1、原理与创建语句
在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天,或者每小时进行切分成一个个的小的文件,这样去操作小的文件就会容易得多了。
创建分区表语法:
增加partitioned by,如下:
create table score(s_id string, c_id string, s_score int) partitioned by (month string) row format delimited fields terminated by '\t';
2、静态分区和动态分区
- 静态分区
表的分区字段的值需要开发人员手动给定,如同上面的建表语句。 - 动态分区
按照需求实现把数据自动导入到表的不同分区中,不需要手动指定
要想进行动态分区,需要设置参数:
set hive.exec.dynamic.partition=true; #开启动态分区功能
set hive.exec.dynamic.partition.mode=nonstrict; #设置hive为非严格模式
2.2 分桶表
1、分桶表原理
分桶是相对分区进行更细粒度的划分,分桶将整个数据内容按照某列取hash值,对桶的个数取模的方式决定该条记录存放在哪个桶当中;具有相同hash值的数据进入到同一个文件中。
2、作用
- 取样sampling更高效。没有分桶的话需要扫描整个数据集。
- 提升某些查询操作效率,例如map side join
3、创建分桶表
在创建分桶表之前要执行一下命令:
- set hive.enforce.bucketing=true; 开启对分桶表的支持
- set mapreduce.job.reduces=4; 设置与桶相同的reduce个数(默认只有一个reduce)
标签:分桶,16,外部,分区,Hive,分区表,表与,hive,四种 来源: https://blog.csdn.net/Aries1Chan/article/details/120142183