首页 > 解决方案 > 使用 UNION ALL 运行时,Hive 中的 COUNT(*) 查询表现不同

问题描述

我运行了两个查询,以从按进程日期字段分区的 Hive 托管表中获取两个不同日期的记录数。

SELECT COUNT(1) FROM prd_fct.mktng WHERE process_dt='2018-01-01' --returned 2 million
SELECT COUNT(1) FROM prd_fct.mktng WHERE process_dt='2018-01-02' --returned 3 million

但是,如果我使用子句运行以下查询UNION ALL,则返回的计数与上述单个查询的计数不同。

SELECT '2018-01-01', COUNT(1) FROM prd_fct.mktng WHERE process_dt='2018-01-01' 
UNION ALL
SELECT '2018-01-02', COUNT(1) FROM prd_fct.mktng WHERE process_dt='2018-01-02' 

造成这种差异的根本原因是什么?

标签: hivehiveqlunion-all

解决方案


我们的一位队友帮助我们确定了问题。当我们运行单个 count( ) 查询时,查询不会在表上物理执行,而是从统计信息中获取计数。补救方法之一是收集表 agian 上的统计信息,然后单个表上的 count() 将反映实际计数

问候, 阿努普


推荐阅读