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;
posted @ 2022-02-08 11:10  _XiongH  阅读(1338)  评论(0编辑  收藏  举报