带分区的外部Hive表不读取文件

时间:2016-05-11 12:29:23

标签: hadoop hive

我已经创建了如下所示的外部配置单元表,并尝试在该位置读取该文件。

示例输入:

c1,c2,c3,c4,c5
ass,adda,ada,er,asa
asdasd,asd,asas,qwqw,dfdf

带分区的扩展表

create external table tablename(field3 varchar(50), field4 varchar(50), filed5 varchar(50))
partitioned by (field1 varchar(50), field2 varchar(50))
ROW FORMAT DELIMITED
fields terminated by ','
lines terminated by '\n'
location '/path/to/Folder/'
tblproperties ("skip.header.line.count"="1");

文件夹位置中只有一个csv文件,其中包含5列和1k行

在我尝试运行select查询时创建表格后,未显示任何结果。

然后我尝试创建外部表而不进行分区,如下所示,并在运行select查询时获取输出。

create external table tablename(field1 varchar(50), field2 varchar(50),field3 varchar(50), field4 varchar(50), filed5 varchar(50))
    ROW FORMAT DELIMITED
    fields terminated by ','
    lines terminated by '\n'
    location '/path/to/Folder/'
    tblproperties ("skip.header.line.count"="1");

我不知道我在哪里做错了。我对蜂巢很新。所以请帮助我。

2 个答案:

答案 0 :(得分:0)

据我所知,当您将数据从其他非配置数据/表加载到配置单元时,配置单元会按字段顺序获取源数据中的字段顺序。因此,如果对hive表进行分区,则只能将源数据中的最后一列用作分区。

在你的情况下,我不确定为什么你没有得到任何输出,虽然输出是错误的,因为field1将是field4field2将是field5在您的分区表中。

我知道的唯一间接方式(不好)是在创建时首先创建非分区表,然后将数据从非分区表复制到分区表。如果它占用了大量空间(虽然您稍后要删除非分区表),那么您需要更改源数据,我想,获取分区字段。

答案 1 :(得分:0)

使用以下命令Msck repair table <db_name>.<table_name>, 如果有关表的元数据尚不存在,则会将有关该配置单元表的元数据添加到配置单元元存储中。

相关问题