【发布时间】:2019-05-10 21:28:08
【问题描述】:
我最近开始在 Hive 中将 AvroSerDe 用于我的外部表。
Select col_name,count(*)
from table
group by col_name;
上面的查询给了我一个计数。下面的查询没有:
Select count(*)
from table;
【问题讨论】:
我最近开始在 Hive 中将 AvroSerDe 用于我的外部表。
Select col_name,count(*)
from table
group by col_name;
上面的查询给了我一个计数。下面的查询没有:
Select count(*)
from table;
【问题讨论】:
原因是 hive 只是查看表元数据并获取值。由于某种原因,表的统计信息不会在 hive 中更新,因为 count(*) 返回 0。
在创建表时写入的统计信息没有数据行,对于任何数据追加/更改,hive 需要在元数据中更新此统计信息。
运行 ANALYZE 命令收集统计信息并将其写入 Hive MetaStore。
ANALYZE TABLE table_name COMPUTE STATISTICS;
访问Apache Hive wiki了解更多关于 ANALYZE 命令的详细信息。
解决此问题的其他方法
使用 'limit' 和 'group by' 子句触发 map reduce 作业以获取 行数并给出正确的值
将 fetch 任务转换设置为 none 会强制 hive 运行 map reduce 计算行数的作业
hive> set hive.fetch.task.conversion=none;
【讨论】: