4.5 分区表

Hive 把表组织成分区(partition).

这个是根据分区列的值对表进行粗略划分的机制.

使用分区可以加快数据切片(slice)的查询速度.

分区表要创建表的时候就要指定好分区.

每个分区对应 HDFS 文件系统中的一个文件夹. 每个分区其实就是表目录下的子目录.

比如, 查看日志文件比较大, 我们只想看某一个的日志, 普通的表需要挨个查询. 如果按照日期分区后, 则只需要在相应的分区中查询就可以了, 大大提高了查询的速度.

4.5.1 分区表基本操作

步骤1: 创建分区表

create table dept_partition(
    deptno int, dname string, loc string
)
partitioned by (year string)
row format delimited fields 
terminated by '\t';

partitioned by (year string) 就表示在创建分区表. year 就表示分区列. 注意: 分区列不能是表中的字段.否则会抛出异常.

步骤2: 向分区表中导入数据

load data local inpath '/opt/module/datas/dept1.txt' into table dept_partition partition(year='201709');

注意: 导入数据的一定要指定导入到哪个分区.

步骤3: 查询分区表中的数据

使用 where子句从分区表中查询数据

select * from dept_partition where year="201709";
// 可以查看有哪些分区
show partitions dept_partition;

步骤4: 增加分区

增加单个分区:

alter table dept_partition add partition(month='201706') ;

同时增加多个分区:

alter table dept_partition add partition(month='201705') partition(month='201704');

步骤5: 删除分区

删除单个分区:

alter table dept_partition drop partition (month='201704');

同时删除多个分区:

alter table dept_partition drop partition (month='201705'), partition (month='201706');

步骤6: 查看有多少分区

show partitions dept_partition;

注意:

  • 如果对不是分区表使用这个命令会抛出异常.

4.5.2 分区表注意事项

创建二级分区

create table dept_partition2(
    deptno int, dname string, loc string
)
partitioned by (month string, day string)
row format delimited fields terminated by '\t';

加载数据到分区

load data local inpath '/opt/module/datas/dept.txt' into table
 default.dept_partition2 partition(month='201709', day='13');

查询分区数据

使用where子句查询

select * from dept_partition2 where month='201709' and day='13'

查询二级分区数

show partitions dept_partition2 partition(month='201709')

4.5.3 分区表和数据产生关联

根据情况不同有 3 种方式:

上传数据后修复

手动创建分区目录, 后面直接通过 hdoop fs ... 的方式把数据上传到分区目录, 则需要修复一下即可.

msck repair table dept_partition2;

上传数据后添加分区

手动创建分区目录, 后面直接通过 hdoop fs ... 的方式把数据上传到分区目录, 则根据手动创建的目录, 再执行添加分区的命令就可以了.

alter table dept_partition2 add partition(month='201709',
 day='11');

上传数据后load数据到分区

手动创建分区目录, 则再执行 load命令也可以.

load data local inpath '/opt/module/datas/dept.txt' into table
 dept_partition2 partition(month='201709',day='10');
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-12-09 20:40:58

results matching ""

    No results matching ""