简单的Hive查询为空

时间:2012-07-05 15:32:49

标签: hadoop hive

我有一个csv日志文件。使用以下句子将其加载到Hive后:

CREATE EXTERNAL TABLE iprange(id STRING, ip STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\,' STORED AS TEXTFILE LOCATION '/user/hadoop/expandediprange/';

我希望执行一个简单的查询,例如:

select * from iprange where ip="0.0.0.2";

但我得到一个空洞的结果。

我在HDFS上运行Hive,我应该使用HBase吗? 我的结论是它与表格大小有关。日志文件为160 MB,Hive中生成的表有800万行。如果我尝试创建一个较小的文件并将其加载到Hive,它将起作用。

知道什么是错的?

编辑:我忘了说它使用一个小实例在Amazon Elastic MapReduce上运行。

1 个答案:

答案 0 :(得分:0)

我发现了问题。这真的不是一个Hive问题。我使用Hadoop作业的输出作为输入,在该作业中,我在键中写入输出,将值保留为空字符串:

context.write(new Text(id + "," + ip), new Text(""));

问题是Hadoop默认在键和值之间插入一个制表符,并且字段也是一个字符串,所以我在每一行都有一个尾随制表符。我发现它使用Pig,因为它包含输出()。

我的解决方案是将分隔符设置为另一个字符,因为我只有两个字段,我在键中写入一个,另一个在值中,并将分隔符设置为"," :

conf.set("mapred.textoutputformat.separator", ",");

也许可以在Hive中修剪这些东西。