关于hive:hive分区表

4次阅读

共计 1103 个字符,预计需要花费 3 分钟才能阅读完成。

1 分区表

[PARTITIONED BY (col_name data_type [COMMENT col_comment], …)]

1.1 分区表

在建表时,指定了 PARTITIONED BY,这个表称为分区表
PARTITIONED BY 以什么分区

1.2 分区概念

MR:在 MapTask 输入 key-value 时,为每个 key-value 计算一个区号,同一个分区的数据,会被同一个 reduceTask 解决
这个分区的数据,最终生成一个后果文件!
通过分区,将 MapTask 输入的 key-value 通过 reduce 后,扩散到多个不同的后果文件中!
Hive: 将表中的数据,扩散到表目录下的多个子目录 (分区目录) 中

1.3 分区意义

  • 分区的目标是为了就数据,扩散到多个子目录中,在执行查问时,能够只抉择查问某些子目录中的数据,放慢查问效率!
  • 只有分区表才有子目录(分区目录)
  • 分区目录的名称由两局部确定:分区列列名 = 分区列列值
  • 将输出导入到指定的分区之后,数据会附加上分区列的信息!
  • 分区的最终目标是在查问时,应用分区列进行过滤!

2 分区表操作

2.1 创立分区表

多级分区表,有多个分区字段
create external table if not exists learnwork.deptpart2(
deptno int,
dname string,
loc int
)
PARTITIONED BY(area string,province string)
row format delimited fields terminated by ‘\t’;


create external table if not exists learnwork.deptpart3(
deptno int,
dname string,
loc int
)
PARTITIONED BY(area string)
row format delimited fields terminated by ‘\t’
location ‘hdfs://hadoop101:9000/deptpart3’;

2.2 分区的查问

show partitions 表名

2.3 创立分区

  1. alter table 表名 add partition(分区字段名 = 分区字段值) ;

    • 在 hdfs 上生成分区门路
    • 在 mysql 中 metastore.partitions 表中生成分区的元数据
  2. 间接应用 load 命令向分区加载数据,如果分区不存在,load 时主动帮咱们生成分区
  3. 如果数据曾经依照标准的格局,上传到了 HDFS,能够应用修复分区命令主动生成分区的元数据
    msck repair table 表名;

注意事项:

  1. 如果表是个分区表,在导入数据时,必须指定向哪个分区目录导入数据
  2. 如果表是多级分区表,在导入数据时,数据必须位于最初一级分区的目录
正文完
 0