Hive:选择*无结果

时间:2017-06-13 06:29:53

标签: hive

我有 LZO 格式的 EXTERNAL 配置单元表存储。此表中有一些行,但我无法通过" 选择* "来获取数据。我的表格格式一定存在一些问题,但我不知道如何修复它。

CREATE EXTERNAL TABLE tableName(
    column1 string
)
PARTITIONED BY ( 
    column2 string
)
ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '\t' 
STORED AS INPUTFORMAT 
    'com.hadoop.mapred.DeprecatedLzoTextInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
    'hdfs://.../tableName'

select count(*) from tableName; //return 1
select * from tableName; //return nothing
select column1, column2 from tableName group by column1,column2; //return data1 data2
select * from tableName where column2='data2'; //return nothing

仅"选择*"没有回报。也许"选择*"是不是通过map-reduce执行的?

2 个答案:

答案 0 :(得分:0)

我发现简单的SQL(没有count,sum,group by等)将不会被map-reduce执行,这将通过获取作业(直接读取hdfs文件)。但是,我的hdfs文件以lzo格式存储,读取它会有一些问题。

一个解决方案是强制简单的SQL转到map-reduce。

set hive.fetch.task.conversion=none;

答案 1 :(得分:0)

我很抱歉真正的原因。 我忘记了LZO的参数,因此hdfs文件是TEXTFILE格式:(

set hive.exec.compress.output=true;
set mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;