Hive的元数据信息存储在元数据库里面,因此可以通过元数据库来快速统计表及数据量的情况,这里以元数据库为MySQL为例,可以通过以下SQL命令快速获取,
以下SQL需要先进入MySQL元数据库中执行
select c.NAME, a.TBL_NAME, b.PARAM_KEY, b.PARAM_VALUE from hive.TBLS as a join hive.TABLE_PARAMS as b join hive.DBS c
where a.TBL_ID = b.TBL_ID and a.DB_ID = c.DB_ID and c.NAME IN ('bas','dma','mdb') and b.PARAM_KEY = 'numRows';
样例输出如下,
+------+---------------------------------------+-----------+-------------+
| NAME | TBL_NAME | PARAM_KEY | PARAM_VALUE |
+------+---------------------------------------+-----------+-------------+
| bas | syn_a_organ | numRows | 0 |
| bas | syn_code_entpostcode | numRows | 0 |
| bas | syn_code_enttypecode | numRows | 0 |
| bas | syn_code_invstycode | numRows | 0 |
| bas | syn_code_invtypecode | numRows | 0 |
| bas | syn_code_natcode | numRows | 0 |
。。。
除了这种方式,我们也可以通过Hue,或者用脚本的方式查询每个表的数据量,具体可以参考博客
hive里如何快速查看表中有多少记录数
不过,既然是从元数据表中获取,就涉及到数据准确性的问题,numRows保存的是表的统计信息数据,如果统计信息不更新,那么这个值可能也就不够准确,如果希望统计尽可能准确,建议先对表进行更新统计信息的动作,更新统计信息要注意区别表是分区表还是非分区表,主要命令为:
以下命令从Hive shell下面执行
--非分区 表
analyze table mdb.tmp_e_sm_baseinfo_special_3 compute statistics;
--分区表,单字段
ANALYZE TABLE dma.tmp_bh_e_ms_sum_d PARTITION(stat_date_p='20140922') COMPUTE STATISTICS;
--分区表,多字段
ANALYZE TABLE dma.tmp_bh_e_ms_sum_m PARTITION(stat_date_p='201711',idx_no1='MONTH_02') COMPUTE STATISTICS;