hive - 使用 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'
造成这种差异的根本原因是什么?
解决方案
我们的一位队友帮助我们确定了问题。当我们运行单个 count( ) 查询时,查询不会在表上物理执行,而是从统计信息中获取计数。补救方法之一是收集表 agian 上的统计信息,然后单个表上的 count() 将反映实际计数
问候, 阿努普
推荐阅读
- php - PHP:如何获取请求页面并获取正文和 http 错误代码
- xamarin.forms - 如何在 xamarin 表单的工具栏项中添加字体图标
- php - 为什么 JSON 值不显示在 PHP 中?
- python - 成功运行任务但不跳过
- python - 我收到“RequestsDependencyWarning:urllib3 (1.25.3) 或 chardet (3.0.4) 与支持的版本不匹配!”
- asp.net-core - Blazor:如何从子组件中的事件中获取发件人
- flutter - 如何从类字段设置提供者值?
- parallel-processing - 如何在 Vulkan 中适当地设置工作组计数
- ansible - 无法使用循环复制文件
- regex - 修剪标签之间的空间