我有 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执行的?
答案 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;