hive:统计hive中所有表的大小和创建时间

8 篇文章 0 订阅
3 篇文章 1 订阅

目的:获取hive中所有表的创建时间和表大小

本文给出了一个既可以统计hive中非分区表也可以统计分区表的表大小的方式。
由于业务上没有针对分区数据统计的需求,所以可以使用此种方式统计。
如果业务需要统计分区数据,这种方式就不合适了。

1、获取hive当前的表创建时间和表名

在hive的元数据存储数据库中执行(当前为mysql):

SELECT	CREATE_TIME,TBL_NAME FROM	TBLS ;

结果文件存储在:all_tables_name_createTime.txt(内容见第3点)

2、获取当前hdfs中hive库表存储路径和大小

hive_data_size_count.sh

#!/bin/env bash
HIVE_WAREHOUSE=/user/hive/warehouse
ALL_DATABASES=(`hdfs dfs -ls ${HIVE_WAREHOUSE} | awk '{print $8}'`)

for i in ${!ALL_DATABASES[@]}
do
 echo "当前库${ALL_DATABASES[i]}的大小:"
 hdfs dfs -du -h ${HIVE_WAREHOUSE} | grep ${ALL_DATABASES[i]}
 echo "当前库内表的大小"
 hdfs dfs -du -h ${ALL_DATABASES[i]}
 echo -e "\n\n"
done

结果文件存储在:hive_data_count6(文件内容见第4点)

3、将1中获取的hive创建时间转换为易读性好的格式

脚本名称:changeTimeFormat.sh
将有两列字段——hive表创建的时间(时间戳形式)、hive表名——的文件中,时间戳修改为阅读友好型的年月日时分秒形式。

#!/bin/env bash
while read line
do
 echo $line
 TIMESTAMP=`echo $line | awk '{print $1}'`
 TABLE_NAME=`echo $line | awk '{print $2}'`
 if [[ $TIMESTAMP -ne "CREATE_TIME" ]];then
 # 格式为:年月日|时分秒,之所以使用|作为间隔符,是因为文件是以\t制表符作为间隔,防止空格和制表符在使用echo命令时候无法将时间以整个字段进行分隔
 TIME_FORMAT=`date -d @$TIMESTAMP "+%Y-%m-%d|%H:%M:%S"`
 else
 TIME_FORMAT="CREATE_TIME"
 fi
 echo -e "$TIME_FORMAT\t$TABLE_NAME" >> all_tables_name_createTimeFormat.txt
done <all_tables_name_createTime.txt

源文件:all_tables_name_createTime.txt文件示例(间隔符是\t,制表符)

CREATE_TIME TBL_NAME
1618910542 yjj_bzy
1619074492 ods_yjj_bzy
1619075278 stg_yjj_bzy
1620637222 wxm_ods_test_2021_5_10

结果文件:all_tables_name_createTimeFormat.txt (间隔符是\t,制表符)

CREATE_TIME TBL_NAME
2021-04-20|17:22:22 yjj_bzy
2021-04-22|14:54:52 ods_yjj_bzy
2021-04-22|15:07:58 stg_yjj_bzy
2021-05-10|17:00:22 wxm_ods_test_2021_5_10

4、获得表的创建时间和大小

脚本名称:combineNameTimeSize.sh
脚本目的是从hdfs的/user/hive/warehouse目录中得到的表内容中获取hive元数据中实际存在的hive表的大小和创建时间

#!/bin/env bash

# bei pipei de wenjian
SOURCE_FILE=all_tables_name_createTimeFormat.txt
FILTER_FILE="hive_data_count6"
RESOUT_FILE=hive_table_name_size_time.txt

while read line
do
 TIME=`echo $line | awk '{print $1}'`
 TABLE_NAME=`echo $line | awk '{print $2}'`

 HIVE_TABLE_SIZE_PATH=`cat $FILTER_FILE | grep $TABLE_NAME`
 TABLE_SIZE=`echo $HIVE_TABLE_SIZE_PATH | awk '{print $1}'`
 HDFS_PATH=`echo $HIVE_TABLE_SIZE_PATH | awk '{print $2}'`

 if [[ "$TIME" -eq "CREATE_TIME" ]];then
 echo -e "$TIME\t$TABLE_NAME\tTABLE_SIZE\tHDFS_PATH" >> $RESOUT_FILE
 else
 echo -e "$TIME\t$TABLE_NAME\t$TABLE_SIZE\t$HDFS_PATH" >> $RESOUT_FILE
 fi
done < $SOURCE_FILE

被过滤的hdfs数据文件:hive_data_count6
(数据获取方式:hdfs dfs -du -h /user/hive/warehouse)

37.1K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_gc_info_i_y
12.7K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_gdccrb_i_d
7.6K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_gdfsfdcrb_i_d
4.2K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_xlljjsczrb_i_d
5.7K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_xlslyczqkrb_i_d
12.9K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_hw_yjswclzxclrb_a_d
10.7K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_js_ssljflxqinfo_i_d
2.7K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_js_vehicleinfo_i_m
1.8M /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_sr_store_i_d
13.9K /user/hive/warehouse/dwd_cgj.db/cgj_ods_s_csglj_zxc_station_a_d

结果数据:hive_table_name_size_time.txt

CREATE_TIME TBL_NAME TABLE_SIZE HDFS_PATH
2021-04-20|17:22:22 yjj_bzy 27.1K /user/hive/warehouse/ods.db/ods_yjj_bzy
2021-04-22|14:54:52 ods_yjj_bzy 27.1K /user/hive/warehouse/ods.db/ods_yjj_bzy
2021-04-22|15:07:58 stg_yjj_bzy 636.7K /user/hive/warehouse/stg.db/stg_yjj_bzy
2021-05-10|17:00:22 wxm_ods_test_2021_5_10 117.1K /user/hive/warehouse/test_hive2.db/wxm_ods_test_2021_5_10
2021-05-10|11:11:53 t_czfwjcxxb_wxm 1.1M /user/hive/warehouse/ods_zfw.db/t_czfwjcxxb_wxm

5、将hive_table_name_size_time.txt文件的内容拷贝到excel表格中,即可形成4列的数据表,便于数据统计

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值