我的输入数据如下:
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
我真的不明白所有的行最后是如何显示孟菲斯的。
答案 0 :(得分:0)
仔细阅读您的代码:
create EXTERNAL table seesaw (id int,name string,location string)
请注意,只有三列,id
,name
和location
。
但是,您的数据
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