Hive-元数据查询表数据量

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;//统计指定分区列的信息
  • 对于非分区表列的statics信息存在hive元数据表TABLE_COL_STATS中
  • 对于分区表列的statics信息存在hive元数据表PART_COL_STATS中

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;//表属性

猜你喜欢

转载自blog.csdn.net/docsz/article/details/118364840