分区无法理解

时间:2016-06-26 20:35:44

标签: hive partition

我的输入数据如下:

1,srinivas,courtthomas,memphis
2,vindhya,courtthomas,memphis
3,srinivas,courtthomas,kolkata
4,vindhya,courtthomas,memphis

我创建了以下查询:

create EXTERNAL table seesaw (id int,name string,location string) partitioned by (address string) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile LOCATION '/seesaw';

LOAD DATA INPATH '/sampledoc' OVERWRITE INTO TABLE seesaw PARTITION (address = 'Memphis');

当我尝试获取查询时,它如下:

Select * from seesaw;                                                                     
OK
1   srinivas    courtthomas Memphis
2   vindhya courtthomas Memphis
3   srinivas    courtthomas Memphis
4   vindhya courtthomas Memphis

我真的不明白所有的行最后是如何显示孟菲斯的。

2 个答案:

答案 0 :(得分:0)

仔细阅读您的代码:

create EXTERNAL table seesaw (id int,name string,location string)

请注意,只有三列,idnamelocation

但是,您的数据

1,srinivas,courtthomas,memphis
2,vindhya,courtthomas,memphis
3,srinivas,courtthomas,kolkata
4,vindhya,courtthomas,memphis

有四列。这里有点腥。

LOAD DATA INPATH '/sampledoc'
  OVERWRITE INTO TABLE seesaw
  PARTITION (address = 'Memphis');

您要求按courtthomas对仅包含Memphis的类别进行分区。结果是不要惊讶不是你想要的。

答案 1 :(得分:0)

如果您使用外部表,则需要为每个分区手动创建文件夹,即在您的情况下 - 创建两个文件夹[address = Memphis]和[address = kolkata]并复制相应的输入数据文件文件夹,然后将分区添加到元数据,如下所示:

ALTER TABLE seesaw ADD PARTITION(address='Memphis');
ALTER TABLE seesaw ADD PARTITION(address='kolkata');

请参阅此文章,了解如何执行此操作的简单示例 - hive-external-table-with-partitions