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;