Hive分区参考

2019-03-26  本文已影响0人  liuzx32

一、为啥分区

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. 为什么分桶
    提高数据的细粒度,将之前的单个文件变成多个文件
    作用:
    1、对数据进行抽样查询,较为高效。
    2、可以使查询效率提高

  2. 分桶技术
    分桶字段是表内字段,默认是对分桶的字段进行hash值,然后模总的桶数,得到的值则是分区桶数

  3. hive分桶的关键字
    bucket
    clustered by(id) into 4 buckets

注意:

分区使用表外的字段,分桶使用表内字段
分区可以使用load加载数据,而分桶就必须要使用insert into方式加载数据
分区常用;分桶少用。

上一篇下一篇

猜你喜欢

热点阅读