我最近开始使用 AvroSerDe 我在 hive 里的外置table。
AvroSerDe
Select col_name,count(*) from table group by col_name;
上面的查询给了我一个计数。如以下查询所示:
Select count(*) from table;
33qvvth11#
原因是hive只查看表元数据并获取值。由于某些原因,配置单元中未更新表的统计信息,因为count(*)返回0。在创建表时,统计信息是在没有数据行的情况下写入的,对于任何数据追加/更改,hive需要在元数据中更新此统计信息。运行analyze命令收集统计信息并将它们写入配置单元元存储。 ANALYZE TABLE table_name COMPUTE STATISTICS; 有关analyze命令的更多详细信息,请访问apachehivewiki。解决这个问题的其他方法使用'limit'和'groupby'子句触发map reduce job以获取行数并给出正确的值将fetch task conversion设置为none将强制配置单元运行map reduce作业来计算行数 hive> set hive.fetch.task.conversion=none;
ANALYZE TABLE table_name COMPUTE STATISTICS;
hive> set hive.fetch.task.conversion=none;
1条答案
按热度按时间33qvvth11#
原因是hive只查看表元数据并获取值。由于某些原因,配置单元中未更新表的统计信息,因为count(*)返回0。
在创建表时,统计信息是在没有数据行的情况下写入的,对于任何数据追加/更改,hive需要在元数据中更新此统计信息。
运行analyze命令收集统计信息并将它们写入配置单元元存储。
ANALYZE TABLE table_name COMPUTE STATISTICS;
有关analyze命令的更多详细信息,请访问apachehivewiki。解决这个问题的其他方法
使用'limit'和'groupby'子句触发map reduce job以获取行数并给出正确的值
将fetch task conversion设置为none将强制配置单元运行map reduce作业来计算行数
hive> set hive.fetch.task.conversion=none;