[陷阱]HIVE外部分区表一定要增加分区

刚开始玩HIVE外部表可能会遇到的小陷阱。

只要我们牢记外部表也是一种表就可以,普通表有分区,外部表也是有分区的。所以如果是基于分区表创建的外部表一定要对外部表执行ALTER TABLE table_name ADD PARTITION。否则是根本访问不到数据的。

例子应该会更直观:
原始的表:
hive> desc shaka_test_external;
OK
id      bigint
gender  string(分区字段

记录:
hive> select * from shaka_test_external;
OK
0       0
1       1
2       1

基于上表的数据创建外部表:
create external table ext_shaka_test_external
like shaka_test_external
location 'hdfs://hdpnn:9000/group/hive/shaka_test_external';

如果此时直接访问数据,那么是没有记录的:

hive> show partitions ext_shaka_test_external;

OK

Time taken: 0.098 seconds

hive> select * from ext_shaka_test_external;
OK
Time taken: 0.229 seconds
 

陷阱来了,添加分区后就能访问了:
hive> alter table ext_shaka_test_external add partition (gender='0');
OK
Time taken: 0.18 seconds
hive> alter table ext_shaka_test_external add partition (gender='1');
OK
Time taken: 1.305 seconds
hive> select * from ext_shaka_test_external;
OK
0       0
1       1
2       1
Time taken: 0.251 seconds
hive> select * from ext_shaka_test_external where gender = '0';
OK
0       0
Time taken: 0.175 seconds

相关推荐