刚开始玩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