Hive 使用UNION ALL运行配置单元中的COUNT(*)查询时表现不同

Hive 使用UNION ALL运行配置单元中的COUNT(*)查询时表现不同,hive,hiveql,union-all,Hive,Hiveql,Union All,我运行了两个查询,从一个按流程日期字段分区的配置单元管理的表中获取两个不同日期的记录数 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 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' 

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

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

问候,,
Anoop

我也面临着类似的问题,
count(*)
返回了不正确的计数。我在代码中添加了以下内容,现在计数是一致的

对于非分区表,请使用:

ANALYZE TABLE your_table_name COMPUTE STATISTICS
对于分区表,通过指定分区值来分析最近添加的分区:

ANALYZE TABLE your_table_name 
PARTITION(your_partition_name=your_partition_value) 
COMPUTE STATISTICS;