在企业中可能会遇到统计Hive库下所有库下所有表的DDL,这里我们使用shell写个脚本进行统计。
#! /bin/bash
current_dir=$(cd $(dirname $0);pwd)
echo "当前路径:${current_dir}"
# 导出Hive库名
hive -e "show databases;" > ${current_dir}/all_database.db
# 删除all_database.db 文件中的各其他日志记录
sed -i '/^[0-9Logging]/d' all_database.db
for database in `cat $current_dir/all_database.db`
do
# 要采用追加模式,否则遍历的时候会覆盖
echo "create database if not exists $database;" >> ${current_dir}/create_database_all_DDL.sql
# 进入数据库中,遍历库下所有的表
hive -e "use $database;show tables" >$current_dir/$database.tb
# 删除$database.tb文件中多于的日志,只保留表名
sed -i '/^[0-9Logging]/d' $current_dir/$database.tb
# 遍历数据库下所有的表
for table in `cat $current_dir/$database.tb`
do
echo "------------$database.$table---------------" >> ${current_dir}/${database}_all_DDL.sql
hive -e "show create table $database.$table" >> ${current_dir}/${database}_all_DDL.sql
# 删除${database}_all_DDL.sql文件中多于的日志
sed -i '/^[0-9Logging]/d' ${current_dir}/${database}_all_DDL.sql
# 打印换行符
echo -e "\n" >> ${current_dir}/${database}_all_DDL.sql
done
done
sed -i '/^[0-9Logging]/d'
在这里对上面这个语句进行一个解释
-i 是对文本进行编辑
/^[0-9Logging]/ 匹配以数字开头或者是以Logging开头的内容
/d 是执行删除操作