Hive 的分区表相关操作

分区表说明

分区表实际上就是 对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多.

分区表的操作

创建分区表

语法 partition by (字段 类型)

# 创分区表语句
create table hive_db(
    id int,
    name string
    )
    partitioned by (mouth string)
    row format delimited
    fields terminated by '\t';

# 查看分区表格式,发现定义的分区 也是一个字段

hive> desc  hive_db;
OK
id                      int                                         
name                    string                                      
mouth                   string     # 一个字段               

# Partition Information          
# col_name                data_type               comment             
mouth                   string                                      
Time taken: 0.106 seconds, Fetched: 8 row(s)

添加分区

一次添加一个分区

hive> alter table hive_db add partition(mouth="20200109");
OK
Time taken: 0.356 seconds

一次添加多个分区 注意空格分隔

hive> alter table hive_db add partition(mouth="20200111") partition(mouth="20200110");
OK
Time taken: 0.356 seconds

删除分区

一次删除一个分区

hive> alter table hive_db drop partition(mouth="202001407");
Dropped the partition mouth=202001407
OK
Time taken: 0.601 seconds

一次删除多个分区 注意逗号分隔

hive> alter table hive_db drop partition(mouth="20200110"),partition(mouth="20200111");
Dropped the partition mouth=20200110
Dropped the partition mouth=20200111
OK
Time taken: 0.371 seconds

加载数据到分区表

# 加载
loal data local inpath '/root/student.txt' into table hive_db partitionh(mouth=20200107);

# 查看内容 发现分区也显示出来了
hive> select * from hive_db;
OK
1    Bob        202001407
2    Black    202001407
3    Jeck    202001407
Time taken: 0.103 seconds, Fetched: 3 row(s)

查看HDFS上的 Hive 分区表数据

mark

查看分区数据

查询全部数据

# 会把多个分区数据一起查询出来

hive> select * from hive_db;
OK
1    Bob    202001407
2    Black    202001407
3    Jeck    202001407
1    Bob    202001408
2    Black    202001408
3    Jeck    202001408
Time taken: 0.116 seconds, Fetched: 6 row(s)

查询单个分区的数据

hive> select * from hive_db where mouth=202001407;
OK
1    Bob    202001407
2    Black    202001407
3    Jeck    202001407
Time taken: 0.376 seconds, Fetched: 3 row(s)

二级分区表

二级分区表就是在一级分区表的基础上,在加一个字段

create table stu(
    id int,
    name string
    )
    partitioned by(mouth string,day string)
    row format delimited
    fields terminated by '\t';

导入数据到二级分区表

语法 load data local inpath '文件' into table stu partition(mouth="01",day="07"); partition( ) 里面是对应的分区字段

hive> load data local inpath '/root/student.txt' into table stu partition(mouth="01",day="07");
Loading data to table test.stu partition (mouth=01, day=07)
Partition test.stu{mouth=01, day=07} stats: [numFiles=1, numRows=0, totalSize=21, rawDataSize=0]
OK
Time taken: 0.554 seconds

mark

扩展

三级分区、四级分区... 都是一样的道理,但很没有必要

发表评论 / Comment

用心评论~