与UNION ALL一起运行时,蜂巢中的Count(*)查询行为不同

时间:2018-08-22 22:38:14

标签: hive hiveql union-all

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

Array

但如果我使用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

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

2 个答案:

答案 0 :(得分:0)

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

关于, 阿努普

答案 1 :(得分:0)

我也遇到了类似的问题,count(*)返回错误的计数。我在代码中添加了以下内容,现在计数是一致的。

对于非分区表,请使用: 分析表your_table_name计算统计

对于分区表,通过指定分区值来分析最近添加的分区: 分析表your_table_name PARTITION(your_partition_name = your_partition_value)COMPUTE STATISTICS;