Hive数据库数据表元数据导出脚本

表结构导出

 

## @Title  Hive库表元数据导出脚本
## @Author changxy

#!/bin/bash


##############注意修改Hive连接信息###############
hive=jdbc:hive2://127.0.0.1:10000
#################################################



# 获取当前时间
date=$(date +%H%M)
# 导出脚本保存目录
dir=/home

# 执行查询数据库命令
exec=$(beeline -u $hive -n hive -e "show databases;")
# 按照换行分隔为数组
databases=(${exec//\\n/})
# 遍历数据库
for db in "${databases[@]}"
do
    if [[ $db != +* && $db != _* && $db != \| && $db != database_name ]]
    then
        # 写入创建数据库语句导出脚本文件
        echo "CREATE DATABASE IF NOT EXISTS $db;" >> $dir/hive_export_$date.sql
        
        # 执行show tables语句查询数据表
        exec=$(beeline -u $hive -n hive -e "use $db; show tables;")
        # 替换|字符
        exec=${exec//|/}
        # 根据换行转为数组
        tables=(${exec//\\n/})

        # 遍历数据表
        for tab in "${tables[@]}"
        do

            if [[ $tab != +* && $tab != tab_name ]]
            then
                echo "数据表: "$tab
                # 获取创建表DDL
                exec_create_table_ddl=$(beeline -u $hive -n hive -e "use $db; show create table $tab;")
                # 根据|分隔为数组对象
                lines=(${exec_create_table_ddl//\|/})
                # 定义create table dll语句
                ddl=''
                # 遍历create table ddl
                for line in "${lines[@]}"
                do
                    # 遇到ROW FORMAT SERDE跳出当前循环
                    if [[ $line == ROW ]]; then
                        break
                    elif [[ $line != +* && $line != createtab_stmt ]]; then
                        # 拼接create table脚本
                        ddl="$ddl $line"
                    fi
                done;
                # create table脚本最后面加上分号
                ddl="$ddl ;"
                # 写入导出文件
                echo $ddl >> $dir/hive_export_$date.sql
            fi

        done;

    fi
done

 

表结构导入

 

hive -f hive_export_1525.sql

 

posted @ 2021-07-01 15:43  codest  阅读(131)  评论(0编辑  收藏  举报