我运行了两个查询,以从按日期划分的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
造成这种差异的根本原因是什么?
答案 0 :(得分:0)
我们的一位队友帮助我们确定了问题所在。 当我们运行单个count()查询时,该查询不会在表上实际执行,而是从统计信息中获取。 一种补救措施是收集表agian上的统计信息,然后单个表上的count()将反映实际计数
关于, 阿努普
答案 1 :(得分:0)
我也遇到了类似的问题,count(*)返回错误的计数。我在代码中添加了以下内容,现在计数是一致的。
对于非分区表,请使用: 分析表your_table_name计算统计
对于分区表,通过指定分区值来分析最近添加的分区: 分析表your_table_name PARTITION(your_partition_name = your_partition_value)COMPUTE STATISTICS;