低版本的Hive不支持SHOW VIEWS命令,如果只想迁移Hive视图,需要先从Hive Metastore库里取出视图名,然后通过hive beeline来获取Hive视图的建表语句。
关于SHOW VIEWS命令的讨论:https://stackoverflow.com/questions/22295961/hiveql-query-to-list-only-the-views
对于Hive全量表(不区分表和视图)的导出与导入可以参见:
导出所有的hive库
#!/bin/bash# 1-export_database.shdir="output/database"if [ ! -d ${dir} ]; thenmkdir -p ${dir}fibeeline -u 'jdbc:hive2://hive01:10000/default' --silent=true --outputformat=tsv2 --showHeader=false -e "show databases" > ${dir}/databases.txt
导出库的所有hive视图
#!/bin/bash# 2-export_view.sh# Hive Metastore的mysql库信息db_host=X.X.X.Xdb_user=xxdb_pass=xxdb_name=xxfor database in `cat output/database/databases.txt`dodir="output/table"if [ ! -d ${dir} ]; thenmkdir -p ${dir}fimysql -h${db_host} -u${db_user} -p${db_pass} -D${db_name} -sN -e "select TBL_NAME from TBLS where TBL_TYPE = 'VIRTUAL_VIEW' and DB_ID = (select DB_ID from DBS where NAME = '${database}')" > ${dir}/${database}_tables.txtsed -i "s|^|${database}.|g" ${dir}/${database}_tables.txtdone
导出所有hive表的建表语句
#!/bin/bash# 3-export_create_table.shfor database in `cat output/database/databases.txt`dodir="output/create/${database}"if [ ! -d ${dir} ]; thenmkdir -p ${dir}fifor tablename in `cat output/table/${database}_tables.txt`dobeeline -u 'jdbc:hive2://hive01:10000/default' --silent=true --outputformat=tsv2 --showHeader=false -e "show create table ${tablename}" > ${dir}/${tablename}.txtdonedone
导入hive表
比如将hive视图导入到带kerberos认证的hive集群。
#!/bin/bash# 5-load_table.shfor database in `cat output/database/databases.txt`dofor tablename in `ls output/create/${database}/*.txt`doecho "load ${tablename}"beeline -u 'jdbc:hive2://centos01:10000/default;principal=hive/_HOST@CENTOS' --silent=true --outputformat=tsv2 --showHeader=false -f ${tablename}echo ""donedone
启停脚本
任务启动脚本
#!/bin/bash# load_start.shnohup /bin/bash /root/export_hive_view/5-load_table.sh 2>&1 >> load_stdout.log &
如果需要把标准输出和标准错误写到不同的日志文件里,可以改成 nohup bin/bash /root/export_hive_view/5-load_table.sh 2>> load_stderr.log 1>> load_stdout.log &
任务停止脚本
#!/bin/bash# load_stop.shps -ef | grep "5-load_table.sh" | grep -v grep | awk '{print $2}' | xargs kill -9
chmod u+x load_start.shchmod u+x load_stop.sh
执行导出和导入
./load_start.shtail -f load_stdout.log
欢迎关注我的微信公众号“九万里大数据”,原创技术文章第一时间推送。欢迎访问原创技术博客网站 jwldata.com[1],排版更清晰,阅读更爽快。

引用链接
[1]
jwldata.com: https://www.jwldata.com
文章转载自九万里大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




