我的房间里有一张简单的table 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\u test/pt=201301010000000/data”,而不是“/group/myhive/test/hive/hive\u test/pt=201301010000000/”?
1条答案
按热度按时间m528fe3b1#
您没有得到错误,因为您在配置单元表上创建了分区,但在select语句期间没有分配分区名称。
在hive的分区实现中,表中的数据被分割到多个分区中。每个分区对应于分区列的特定值,并作为子目录存储在hdfs上的表目录中。当查询表时(如果适用),只查询表中所需的分区。
请在select查询中提供分区名称,或按以下方式使用查询:
有关配置单元分区的详细信息,请参阅链接。