元数据管理-hive表Statistics信息获取

1概述

表的基础信息维护展示是数据仓库元数据管理的主要内容之一,对于hive来说如表名,表注释,内外表类型,列的字段名、字段类型、字段备注、是否是分区字段,存储文件类型,压缩格式等信息,这些都是在建表时就可以获取的。还有一些和表中数据存储相关的信息,比如行数,文件数,压缩前后存储大小等信息是随着ETL数据变化而变化的,我们希望在ETL结束后能够获取这些最新信息到我们元数据管理系统中。庆幸的是hive支持表statistic信息的自动统计,我们可以直接从hive的元数据库中获取到这些信息。

2Statistics(统计信息)介绍

Statistics并不是hive的专属特性,在oracle和mysql等数据库中也有分析表存储了表的统计信息,数据库根据这些统计信息对查询计划进行优化。hive同样把表的统计信息作为输入,通过成本优化函数获取最优的执行计划。

hive已经支持表,分区,列级别的统计信息:

1)表和分区的统计信息(0.7.0版本开始支持)

  • 行数
  • 文件数
  • 文件大小

2)列的统计信息(0.10.0版本开始支持)

  • number of distinct values
  • number of NULL values
  • number of TRUES/FALSE values
  • min/max values
  • avg/max of column length

3Statistics使用

1)表,分区级别的统计信息

对于新创建的表或者分区,默认情况下,如果通过INSERT OVERWRITE的方式插入数据,那么Hive会自动将该表或分区的统计信息更新到元数据。有一个参数来控制是否自动统计,hive.stats.autogather,默认为true.

对于已经存在表或分区我们可以通过ANALYZE命令手动更新其Statistics信息:

ANALYZE TABLE Table1 COMPUTE STATISTICS;//统计全表的所有分区的信息

ANALYZE TABLE Table1 COMPUTE STATISTICS NOSCAN;//只统计文件数和文件大小,不扫描文件行数,执行较快

ANALYZE TABLE Table1 PARTITION(ds='2008-04-09', hr=11) COMPUTE STATISTICS;//统计执行分区的信息

非分区表的statics信息存在hive元数据表TABLE_PARAMS中:

select * from TABLE_PARAMS where TBL_ID=102966

分区表的statics信息存在hive元数据表PARTITION_PARAMS 中:

select * from PARTITION_PARAMS where PART_ID=3011

desc命令查看统计信息

语法:

DESCRIBE formatted TABLE1;

DESCRIBE formatted TABLE1 PARTITION(ds='2008-04-09', hr=11);

 

2)列级别的统计信息

对于列级别的统计信息默认自动统计是关闭的,由参数hive.stats.column.autogather控制,默认false(hive3.0后为true)。

同样我们可以通过ANALYZE命令手动更新其Statistics信息

ANALYZE TABLE Table1 COMPUTE STATISTICS FOR COLUMNS;//统计全表或所有分区列信息

ANALYZE TABLE Table1 PARTITION(ds, hr) COMPUTE STATISTICS FOR COLUMNS;//统计指定分区列的信息

对于非分区表列的statics信息存在hive元数据表TABLE_COL_STATS中:

对于分区表列的statics信息存在hive元数据表PART_COL_STATS中:

4避坑指南

笔者曾经对多个表执行analyze命令,为了加快执行速度,开启了多个线程并行去执行,但是最后发现元数据中数据发生混乱,其A表的分区映射到了B表下,导致数据查询错误。怀疑这个命令是非线程安全的,如果同时对多个表执行annalyze命令会导致元数据库中的数据出现混乱,大家使用的时候需要注意

更多技术文章请关注公众号:

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值