Hive中使用count(1)统计行数问题
目录
环境
- hadoop 3.3.4
- jdk 1.8.0_201
- hive 3.1.3
原因
因为执行count(1)或count(*)统计行数时,默认会从Hive的元数据库中查询 rowsNum 对应值作为结果返回,一般情况下,如果是使用加载数据文件load data的方式填充表数据,则不会收集此统计信息,Hive收集的统计信息与收集时机见官方文档。
解决方案
方案一
使用ANALYZE命令手动更新表统计信息,如:
|
|
方案二
配置修改hive.compute.query.using.stats,它是hive的一个配置参数,用于控制在执行查询时是否使用统计信息来优化查询计划。在hive 3.1.3中,该参数的默认值是true。
如果将值设置为true时,会尝试使用表的统计信息来优化查询计划。统计信息包括表的行数、列的基数、列的最小值和最大值等。通过使用统计信息,Hive 可以更好地估计查询的成本和选择合适的执行计划,从而提高查询性能。
如果将值设置为false时,将不会使用表的统计信息来优化查询计划。如果你希望禁用统计信息的使用,可以设置为false。
这里将其设置为false。在hive的配置文件(hive-site.xml)中添加以下配置:
|
|
然后重启hive
临时设置的话,在hive命令行中使用SET命令设置参数:
|
|
Buy me a coffee
支付宝
微信
