MRS Hive列统计信息

举报
fzhan 发表于 2021/12/28 19:44:05 2021/12/28
【摘要】 Hive列统计信息Hive的列统计信息记录了Hive表字段的元信息,根据字段类型的不同,统计的元信息也是稍有差异的。本文讲述两种常用的字段类型,int和string。int类型有4个统计信息,分别是:min、max、num_nulls、distinct_count;string类型也有4个统计信息,分别是: num_nulls、distinct_count、avg_col_len、max_c...

Hive列统计信息

Hive的列统计信息记录了Hive表字段的元信息,根据字段类型的不同,统计的元信息也是稍有差异的。本文讲述两种常用的字段类型,intstringint类型有4个统计信息,分别是:minmaxnum_nullsdistinct_countstring类型也有4个统计信息,分别是: num_nullsdistinct_countavg_col_lenmax_col_len

  • 创建Hive测试表

create table test_col_stats(id int,name string) partitioned by(part int);

此时,该表的字段是没有统计信息的,因为该表此时还没有数据

  • 往测试表插入数据

insert into test_col_stats partition(part=1) values(1,'a'),(2,'bb'),(3,'ccc'),(4,'test'),(5,'col'),(6,'stats');

查看测试表id字段的统计信息

desc formatted test_col_stats partition(part=1) id;

1.png

发现int类型的id字段的4个统计信息依然没有统计到数据。原因是Hive表字段的统计信息默认是关闭,即不会自动统计列的元信息。如果需要自动统计列的元信息,则可以设置以下两个参数为true

set hive.stats.autogather=true;

set hive.stats.column.autogather=true;

  • 计算Hive表列统计信息

对于已经存在数据的表,可以手动执行analyze语句来计算列的统计信息。

analyze table test_col_stats compute statistics for columns;

2.png

analyze语句执行完成后,再次查看列(id字段)的统计信息:

desc formatted test_col_stats partition(part=1) id;

3.png

查看string类型的name字段的统计信息:

desc formatted test_col_stats partition(part=1) name;

4.png


通过以上截图,发现该表id字段和name字段的统计信息已经能够查询出来,说明手动执行analyze语句计算统计信息成功。

  • Analyze语句(计算列统计信息)执行过程简述

首先,Beeline提交该语句后,Hiveserver会启动一个MapReduce任务,来统计各个列的元信息,将结果输出到hdfs的一个临时路径,待MapReduce任务完成后, Hiveserver接着启动一个StatsTask来读取MapReduce的输出结果,反序列化成列统计信息对象,最后通过Metastore持久化到Hive的元数据库。在持久化完成后,就可以在Beeline客户端查询到该表的列统计信息。值得一提的是,列统计信息的distinct_count指标并不是精确计算的,而是一个估计值,由HyperLogLog对象估计而来的。

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。