为什么Hive使用分区表下其他文件的文件?

时间:2013-09-07 01:36:36

标签: sql hadoop hive

我的Hive中有一个简单的表格。它只有一个分区:

show partitions hive_test;                       
OK
pt=20130805000000
Time taken: 0.124 seconds

但是当我执行一个简单的查询sql时,结果发现文件夹20130805000000下的数据文件。为什么不只使用文件20130805000000

SQL:

SELECT buyer_id AS USER_ID from hive_test limit 1;

这是例外:

java.io.IOException: /group/myhive/test/hive/hive_test/pt=20130101000000/data
doesn't exist!
   at org.apache.hadoop.hdfs.DFSClient.listPathWithLocations(DFSClient.java:1045)
   at org.apache.hadoop.hdfs.DistributedFileSystem.listLocatedStatus(DistributedFileSystem.java:352)
   at org.apache.hadoop.fs.viewfs.ChRootedFileSystem.listLocatedStatus(ChRootedFileSystem.java:270)
   at org.apache.hadoop.fs.viewfs.ViewFileSystem.listLocatedStatus(ViewFileSystem.java:851)
   at org.apache.hadoop.hdfs.Yunti3FileSystem.listLocatedStatus(Yunti3FileSystem.java:349)
   at org.apache.hadoop.mapred.SequenceFileInputFormat.listLocatedStatus(SequenceFileInputFormat.java:49)
   at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:242)
   at org.apache.hadoop.hive.ql.io.HiveInputFormat.getSplits(HiveInputFormat.java:261)
   at org.apache.hadoop.mapred.JobClient.writeOldSplits(JobClient.java:1238)

我的问题是为什么hive试图找到文件“ / group / myhive / test / hive / hive_test / pt = 20130101000000 / data ”,但不是“ / group / myhive /测试/蜂巢/ hive_test / PT = 201301.01亿/

1 个答案:

答案 0 :(得分:0)

您没有收到错误,因为您在hive表上创建了分区,但在select语句中没有分配分区名称。

在Hive的分区实现中,表中的数据分为多个分区。每个分区对应于分区列的特定值,并作为子目录存储在HDFS上的表的目录中。在查询表时(如果适用),仅查询表的必需分区。

请在您选择的查询中提供分区名称或使用您的查询:

select buyer_id AS USER_ID from hive_test where pt='20130805000000' limit 1;

请参阅Link以了解有关hive分区的更多信息。