我已经创建了如下所示的外部配置单元表,并尝试在该位置读取该文件。
示例输入:
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");
我不知道我在哪里做错了。我对蜂巢很新。所以请帮助我。
答案 0 :(得分:0)
据我所知,当您将数据从其他非配置数据/表加载到配置单元时,配置单元会按字段顺序获取源数据中的字段顺序。因此,如果对hive表进行分区,则只能将源数据中的最后一列用作分区。
在你的情况下,我不确定为什么你没有得到任何输出,虽然输出是错误的,因为field1
将是field4
而field2
将是field5
在您的分区表中。
我知道的唯一间接方式(不好)是在创建时首先创建非分区表,然后将数据从非分区表复制到分区表。如果它占用了大量空间(虽然您稍后要删除非分区表),那么您需要更改源数据,我想,获取分区字段。
答案 1 :(得分:0)
使用以下命令Msck repair table <db_name>.<table_name>
,
如果有关表的元数据尚不存在,则会将有关该配置单元表的元数据添加到配置单元元存储中。