为何Hive外部Snappy压缩Avro表显示compressed:false?
问题解答
别担心,这个compressed:false的显示其实是个「假象」,完全不影响你的压缩数据正常使用,原因和解决思路如下:
为什么会显示false?
Hive元数据里的compressed字段,是用来标记Hive自身输出数据时是否启用了压缩(比如通过hive.exec.compress.output这类全局配置控制的场景),它并不会主动检测底层存储的Avro文件是否已经被外部工具(比如你用的Sqoop)压缩过。你的文件是Sqoop用Snappy压缩生成的Avro容器文件,Hive的这个元数据字段不会自动同步这个外部压缩状态,所以才会显示false。需要额外设置tblproperties吗?
完全不需要!Hive自带的Avro相关组件(AvroContainerInputFormat和AvroSerDe)本身就支持自动识别并解压Snappy压缩的Avro文件,不管这个元数据显示什么,你执行查询时都能正常读取压缩后的内容。验证数据是否正常可用的小方法
可以简单执行一条查询测试:SELECT COUNT(*) FROM customers_avro;如果能正常返回结果,就说明压缩数据已经被正确处理了。也可以用HDFS命令直接查看文件内容:
hdfs dfs -text /path/to/your/avro/files/*.avro这条命令会自动解压Snappy压缩的Avro文件并输出内容,能正常显示就说明一切没问题。
总结一下:不用纠结compressed:false的显示,你的压缩数据已经在正常工作了,不需要额外添加任何tblproperties属性。
内容的提问来源于stack exchange,提问作者Bala
相关产品推荐
相关产品推荐

