问题:项目中需要获取hive所有分区表的分区信息并显示到页面
如图:
编写sql语句:
SELECt main.*,b.numRows,b.totalSize FROM ( SELECt main.TBL_ID AS metaObjectId ,main.TBL_NAME AS tabName ,b.PART_ID AS partId ,b.PART_NAME AS partitionName ,b.CREATE_TIME AS createTime ,b.LAST_ACCESS_TIME AS updateTime FROM TBLS main INNER JOIN PARTITIONS b ON main.TBL_ID = b.TBL_ID WHERe b.PART_NAME IS NOT NULL ) main LEFT JOIN ( SELECt PART_ID AS partId, MAX(CASE PARAM_KEY WHEN 'numRows' THEN PARAM_VALUE ELSE 0 END) AS numRows, MAX(CASE PARAM_KEY WHEN 'totalSize' THEN PARAM_VALUE ELSE 0 END) AS totalSize FROM PARTITION_PARAMS GROUP BY PART_ID ) b ON main.partId=b.partId;
最终结果如下:
剩下的就是java实现连接mysql执行语句并封装结果给前端了,比较简单,不写了
TBLS:hive所有表的基础信息,包括id,表名,等等
PARTITIONS:跟分区有关的表, 包括分区id,创建时间,分区表名,以及TBLS主表关联id等等
PARTITION_PARAMS:分区表比较重要的一些数据
主要字段:
numfiles:该分区下的文件数,
numRows:该分区下记录数,
rawDataSize是指原始数据的大小,
totalSize是指占用HDFS存储空间大小,
transient_lastDdlTime最后一次ddl时间
对于非分区的表可以看这篇文章:
Hive通过元数据库获取表的数据量,占用空间
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)