标签:分桶 16 外部 分区 Hive 分区表 表与 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。