概述
- 需求:
1、批量查询HIVE表的大小和行数
2、批量查询HIVE表文件数和分区数 - 思路
借助程序(本文为Python2)遍历HIVE表,DESC FORMATTED
获取表状态信息 - 我们往往不需要所有表,而是指定的表,筛选方法:
1、制定表名规则,USE 库
+SHOW TABLES
+LIKE
进行筛选
2、在MySQL(HIVE元数据存储位置)进行筛选
批量获取HIVE表基本信息
SELECT
b.`NAME`, -- 库名
t.`TBL_NAME`, -- 表名
t.`TBL_TYPE`, -- 表类型
c.`PARAM_VALUE`, -- 表注释
s.`LOCATION` -- 表的HDFS路径
FROM `DBS`b
INNER JOIN `TBLS`t ON t.`DB_ID`=b.`DB_ID`
INNER JOIN `SDS`s ON s.`SD_ID`=t.`SD_ID`
LEFT JOIN (
SELECT `TBL_ID`,`PARAM_VALUE`
FROM `TABLE_PARAMS`
WHERE `PARAM_KEY`='comment'
)c ON c.`TBL_ID`=t.`TBL_ID`
WHERE t.`TBL_TYPE`='MANAGED_TABLE' OR t.`TBL_TYPE`='EXTERNAL_TABLE';
详细信息
SELECT
b.`NAME` AS `库名`
,t.`TBL_NAME` AS `表名`
,t.`TBL_TYPE` AS `表类型`
,c.`PARAM_VALUE` AS `表注释`
,s.`LOCATION` AS `表的HDFS路径`
,t.`VIEW_EXPANDED_TEXT` AS `视图的SQL`
,t.`OWNER` AS `表的属主`
,t.`OWNER_TYPE` AS `表的属主的类型`
,s.`INPUT_FORMAT` AS `表输入格式`
,s.`OUTPUT_FORMAT` AS `表输出格式`
-- ,s.`NUM_BUCKETS` AS `分桶数`
-- ,s.`IS_COMPRESSED` AS 是否压缩
FROM `DBS`b
INNER JOIN `TBLS`t ON t.`DB_ID`=b.`DB_ID`
INNER JOIN `SDS`s ON s.`SD_ID`=t.`SD_ID`
LEFT JOIN (
SELECT `TBL_ID`,`PARAM_VALUE`
FROM `TABLE_PARAMS`
WHERE `PARAM_KEY`='comment'
)c ON c.`TBL_ID`=t.`TBL_ID`
WHERE t.`TBL_TYPE`='MANAGED_TABLE' OR t.`TBL_TYPE`='EXTERNAL_TABLE';
查询单个HIVE表的大小和行数
DESC FORMATTED 库名.表名;
代码
MySQL建表,用于存储查询结果
USE data_management;
CREATE TABLE hive_table_status(
update_time TIMESTAMP