一、为啥分区
hive 为了避免全表查询,从而引进分区,将数据按目录进行划分,减少不必要的查询,从而提高效率
二、hive的分区和mysql分区的区别
mysql的分区字段用的是表内字段,hive的分区字段采用表外字段,也就是使用伪字段,分区字段在创建表的时候指定
分区的关键字:partitioned by(字段)
三、Hive中的动态分区
hive.exec.dynamic.partition=true; 是否允许动态分区
hive.exec.dynamic.partition.mode=strict/nostrict; 动态区模式为严格模式
hive.exec.max.dynamic.partitions=1000; 允许最大的动态分区
hive.exec.max.dynamic.partitions.pernode=100; 单个节点允许最大分区
strict:严格模式,最少需要一个静态分区列(指定固定值)
nostrict:费严格模式,允许所有的分区字段都为动态。
hive的静态分区:分区数据已知
hive的动态分区:分区数据未知(不知道有多少个分区)
hive的混合分区:有动态有静态
四、hive的分桶
-
为什么分桶
提高数据的细粒度,将之前的单个文件变成多个文件
作用:
1、对数据进行抽样查询,较为高效。
2、可以使查询效率提高 -
分桶技术
分桶字段是表内字段,默认是对分桶的字段进行hash值,然后模总的桶数,得到的值则是分区桶数 -
hive分桶的关键字
bucket
clustered by(id) into 4 buckets
注意:
分区使用表外的字段,分桶使用表内字段
分区可以使用load加载数据,而分桶就必须要使用insert into方式加载数据
分区常用;分桶少用。
网友评论