2017-06-13 94 views
0

我有一個EXTERNAL hive表存儲在LZO格式。該表中有一些行,但我無法通過「select *」獲取數據。我的表格格式肯定存在一些問題,但我不知道如何解決這個問題。Hive:select * no result

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 

只有 「SELECT *」 返回任何結果。也許「select *」不是通過map-reduce執行的?

+0

[gzip文件的負載csv文件到配置單元(的可能的複製https://stackoverflow.com/questions/44450451/load -csv-文件的,用gzip文件到蜂巢) –

回答

0

我發現簡單的SQL(沒有count,sum,group by等等)不會被map-reduce執行,它將通過讀取作業(直接讀取hdfs文件)執行。但是,我的hdfs文件是以lzo格式存儲的,讀取它會有一些問題。

一個解決方案是強制簡單的SQL去map-reduce。

set hive.fetch.task.conversion=none; 
0

我很抱歉,真正的原因。 我忘爲LZO的參數,因而HDFS文件是TEXTFILE格式:(

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