Statistics使用
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;//统计执行分区的信息
统计Hive元信息
- 非分区表的statics信息存在hive元数据表TABLE_PARAMS中
select * from TABLE_PARAMS where TBL_ID=102966
- 分区表的statics信息存在hive元数据表PARTITION_PARAMS 中
select * from PARTITION_PARAMS where PART_ID=3011
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;//统计指定分区列的信息
3、查询
与关系库一样hive表也能够通过查询元数据来得到总条数:
select d.NAME,t.TBL_NAME,t.TBL_ID,p.PART_ID,p.PART_NAME,a.PARAM_VALUE
from TBLS t
left join DBS d
on t.DB_ID = d.DB_ID
left join PARTITIONS p
on t.TBL_ID = p.TBL_ID
left join PARTITION_PARAMS a
on p.PART_ID=a.PART_ID
where t.TBL_NAME='emp' and d.NAME='ods' and a.PARAM_KEY='numRows';
select FORMAT(sum(a.PARAM_VALUE),0)
from TBLS t
left join DBS d
on t.DB_ID = d.DB_ID
left join PARTITIONS p
on t.TBL_ID = p.TBL_ID
left join PARTITION_PARAMS a
on p.PART_ID=a.PART_ID
where t.TBL_NAME='emp' and d.NAME='ods' and a.PARAM_KEY='numRows';
4、使用shell命令查看表存储文件大小
-- 单位b
hadoop fs -ls /user/hive/warehouse/dwd.db/comanpy/batch_no=97 | awk -F ' ' '{print $5}'|awk '{a+=$1}END {print a}'
--#查看分区表的容量 单位GB
hadoop fs -ls /user/hive/warehouse/dwd.db/comanpy/batch_no=97 | awk -F ' ' '{print $5}'|awk '{a+=$1}END {print a/(1024*1024*1024)}'
-- 自动转换单位
hadoop fs -du /user/hive/warehouse/dwd.db/comanpy/batch_no=97 | awk '{ sum=$1 ;dir2=$2 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s \t %s\n",sum/x,hum[x],dir2;break } }}'
5、查看Hive表
desc extended dwd.comanpy;//表字段
show create table dwd.comanpy;//建表语句
show tblproperties dwd.comanpy;//表属性
6、表修复元数据
set hive.msck.path.validation=ignore;
msck repair table ods.ods_qxb_t_websites_di;
desc formatted ods.ods_qxb_t_websites_di;