当我们想统计下现有的数据库下有哪些表,以及表的相关信息,需要做数据资产盘点,发现数据库和表太多的时候,当然是想通过脚本自动的去获取,以下脚本实现了扫描hive库下的表信息并输出到csv
# 获取所有数据库
databases=(`hive -e "show databases;"`);
# 遍历得到每个数据库
for database in ${databases[*]}
do
# 获取得到数据库下所有表
tables=(`hive -e "use ${database};show tables;"`);
# 遍历得到每个表
for table in ${tables[*]};
do
echo "===============开始操作${database}.${table}==============="
# 获取表路径,有一条是sparkSQL创建的,过滤掉,并去除单引号,单引号在执行的时候会有一些问题
hdfs_path=(`hive -e "show create table ${database}.${table}" | grep hdfs | grep -v 'path' | sed $'s/\'//g'`);
# 获取表数据量
data_size=`hdfs dfs -du ${hdfs_path} | awk '{ SUM += $1 } END { print SUM/1024/1024}'`
# 获取hdfs文件最后一次访问或者更新时间
last_updatetime=`hdfs dfs -ls ${hdfs_path} | sort -k6,7 | tail -1 | awk '{print $6" "$7}'`
result=${database}","${table}","${hdfs_path}","$last_updatetime","${data_size};
echo ${result} >> /home/test/databases_tables.csv
echo "===============操作完成${database}.${table}==============="
done
done