2017-09-01 55 views
0

我有一个分区表,动态分区, 分区字段国籍,出生日期,HIVE“显示分区”命令不显示正确的分区

当我使用select * from emp_new where nationality='China',我得到以下三个记录,

+---------------+--------------+--------------+------------------+----------------------+--------------------+--+ 
| emp_new.name | emp_new.sex | emp_new.age | emp_new.job | emp_new.nationality | emp_new.birthdate | 
+---------------+--------------+--------------+------------------+----------------------+--------------------+--+ 
| Tony   | M   | 34   | IT specialist | China    | 198202    | 
| Katrina  | F   | 33   | IT specialist | China    | 198408    | 
| Cathy   | F   | 30   | IT specialist | China    | 198704    | 

但是当我运行show partitions emp_new partition(nationality='China'),我得到如下结果:

+-------------------------------------+--+ 
|    partition    | 
+-------------------------------------+--+ 
| nationality=China/birthdate=198408 | 
| nationality=China/birthdate=198202 | 
| nationality=China/birthdate=198704 | 
| nationality=China/birthdate=197509 | 
| nationality=China/birthdate=196704 | 
| nationality=China/birthdate=197805 | 
| nationality=China/birthdate=198201 | 
| nationality=China/birthdate=197701 | 
| nationality=China/birthdate=196708 | 
+-------------------------------------+--+ 

其实,我加载将数据编辑到此表中,并在之前使用静态和动态分区(nationality='China', birthdate),然后截断表并在稍后使用动态分区(nationality, birthdate)重新加载。

我不明白为什么旧分区仍然存在。

+0

文本替换照片(格式它使用CTRL + K),并添加表DDL –

回答

1

Truncate删除表格的数据文件。
不会删除存储区中的分区定义。
不会删除文件系统目录。

演示

hive> create table mytable (i int) partitioned by (p int); 
OK 

hive> insert into mytable partition (p) values (1,10),(2,10),(3,20),(4,30),(5,30),(6,30); 
OK 

hive> select * from mytable; 
OK 
mytable.i mytable.p 
1 10 
2 10 
3 20 
4 30 
5 30 
6 30 


hive> show partitions mytable; 
OK 
partition 
p=10 
p=20 
p=30 

hive> !tree ../local_db/mytable; 
../local_db/mytable 
├── p=10 
│   └── 000000_0 
├── p=20 
│   └── 000000_0 
└── p=30 
    └── 000000_0 

3 directories, 3 files 

hive> truncate table mytable; 
OK 

hive> select * from mytable; 
OK 
mytable.i mytable.p 

hive> show partitions mytable; 
OK 
partition 
p=10 
p=20 
p=30 

hive> !tree ../local_db/mytable; 
../local_db/mytable 
├── p=10 
├── p=20 
└── p=30 

3 directories, 0 files 
+0

谢谢,那么如何截断表,并在同一时间 删除Metastore中的分区定义并删除文件系统目录? – tonyibm

+0

第一件事第一件事。你有没有看到我对你的文章的评论? –

+0

刚更新了图片 – tonyibm

0

我知道原因, 我需要删除该分区截断表后, 感谢