Hive查询count(*)有数据,但是select * 没有数据

若发生将一个使用LZO压缩过的表数据导入一个没有被压缩过表内,

类似于如下两个表:

图一:LZO压缩

Hive查询count(*)有数据,但是select * 没有数据

图二未压缩

Hive查询count(*)有数据,但是select * 没有数据
查询将出现这种状况,hdfs目录下明明有数据,count(*)有数据总量,但是select就是查询不出来,
具体原因:
表的结构是未压缩过的,但是数据是压缩过的,通过select(此处查询的方法跟表的结构有关系)查询压缩过的结果,肯定不会显示,

具体解决办法:
使用select的时候指定对应的压缩方法就可以查询出来压缩过的数据,类似于下:

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

select * ....就可以查到数据了。