我运行了两个查询,从按流程日期字段分区的配置单元托管表中获取两个不同日期的记录数。
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'
造成这种差异的根本原因是什么?
2条答案
按热度按时间0dxa2lsx1#
我们的一个队友帮我们找出了问题所在。当我们运行一个count()查询时,查询不是在表上实际执行的,而是从统计数据中获取count。补救方法之一是收集表agian上的stats,然后单个表上的count()将反映实际的count
你好,阿诺普
olqngx592#
我也面临着类似的问题
count(*)
返回不正确的计数。我添加了下面的代码和计数现在是一致的。对于非分区表使用:
对于分区表,通过指定分区值来分析最近添加的分区: