概述
文章目录
- 一、内部表与外部表
- 1.1 内部表与外部表的区别
- 1.2 内部表与外部表的使用时机
- 二、分区表与分桶表
- 2.1 分区表
- 2.2 分桶表
一、内部表与外部表
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的四种表模型的全部内容,希望文章能够帮你解决【学习历程】16 Hive的四种表模型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复