Hive分区

目录

一:分区的概念和分区表

二:对分区的操作

三:Hive动态分区

1:概念

2:开启动态分区支持

3:操作语句


一:分区的概念和分区表

分区表指的是在创建表时指定分区空间,实际上就是在hdfs上表的目录下再创建子目录。

在使用数据时如果指定了需要访问的分区名称,则只会读取相应的分区,避免全表扫描,提高查询效率。

分区表实际上是在表的目录下再以分区命名,建子目录

作用:进行分区裁剪,避免全表扫描,减少MapReduce处理的数据量,提高效率

一般在公司的hive中,所有的表基本上都是分区表,通常按日期分区、地域分区

分区表在使用的时候记得加上分区字段

分区也不是越多越好,一般不超过3级,根据实际业务衡量

  create external table 表名
            (
                字段名1 字段类型1,
                字段名2 字段类型2,
                ...
            )pratition by (分区字段 字段类型)
            ROW FORMAT DELIMITED FIELDS TERMINATED BY '分隔符'  // 必选指定列之间的分隔符 
            STORED AS file_format
            location 'HDFS路径';

    注意: 分区字段和普通字段没区别(不能重复)

二:对分区的操作

添加分区:
  alter table 表名 add partition(分区字段='值');
删除分区:
  alter table 表名 drop partition(分区字段='值');
查看分区:

show partitions 表名; // 推荐这种方式(直接从元数据中获取分区信息)

select distinct pt from 表名; // 不推荐

插入数据:

insert into table 表名 partition(pt='20210902') select * from表名;
 load data local inpath '路径' into table 表名 partiton(分组字段='值');
  分区不存在自动创建

查询某个分区的数据

// 全表扫描,不推荐,效率低

select count(*) from 表名 ;

// 使用where条件进行分区裁剪,避免了全表扫描,效率高

select count(*) from 表名 where pt='20210101';

// 也可以在where条件中使用非等值判断

select count(*) from 表名 where pt<='20210112' and pt>='20210110';

三:Hive动态分区

1:概念

有的时候我们原始表中的数据里面包含了 ''日期字段 dt'',我们需要根据dt中不同的日期,分为不同的分区,将原始表改造成分区表。 hive默认不开启动态分区 动态分区:根据数据中某几列的不同的取值 划分 不同的分区

2:开启动态分区支持

hive>set hive.exec.dynamic.partition=true;

hive>set hive.exec.dynamic.partition.mode=nostrict;

hive>set hive.exec.max.dynamic.partitions.pernode=1000;

3:操作语句

insert into table 分区表 partition (分区字段) select id,name,age,gender,clazz,date from 原表;

开启后,查询的语句中最后的对应的字段作为动态分区的字段,会按照这个字段进行分区,相同的值会放到同一个分区

注意:1:分区字段不会按照名字匹配,按照位置(匹配查询到的最后一个字段) 匹配的是位置不是字段

2:先建立原始表然后加载数据在建立分区表进行插入数据

3:分区字段需要放在 select 的最后,如果有多个分区字段 同理,它是按位置匹配,不是按名字匹配

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值