Hive中count(1)结果为0的原因


        执行count(1)或count(*)统计行数时,默认会从Hive的元数据库中查询 rowsNum 对应值作为结果返回。但是如果是使用加载数据文件load data的方式填充表数据,则hive元数据不会收集此统计信息,那么count时就会为0。

       也就是说通过insert的方式写入数据的表会更新hive元数据的rowsNum信息;通过load、put等方式写入数据的表不会更新hive的元数据rowsNum信息。  Hive收集的统计信息与收集时机见官方文档

解决办法:

1、使用analyze命令手动更新表统计信息,如:

analyze table ods_crm_user compute statistics;

2、对于类似于count(1)的基础查询不使用元数据中的统计信息,而是执行Job,即设置参数值为false

set hive.compute.query.using.stats=false;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM