Hive 快速查询DB下的表及行数

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;

你可能感兴趣的:(Hive,大数据)