Hive表多张日志表跑select insert合并为一张表

#!/bin/bash
#
#by lyg 20211203
#请必须修改变量TABLE_NAME
#
#

#日志存储所在
LOG_FILE=./si_table.log
#临时目录所在
TMP_DIR=./si_table_tmp
#汇聚所需要的表,表格式为 数据库.表
TABLE_NAME=tmp.test

#打印日志,格式可自行调整
function write_log(){
	YMD=`date -d today '+%Y-%m-%d %H:%M:%S'`
	echo '['$YMD'] '$1 >> $LOG_FILE	
}

#创建临时目录
mkdir -p $TMP_DIR

#执行hive语句查询所有数据库
write_log '执行hive语句查询所有数据库'

hive -e "show databases ;" > $TMP_DIR/database_tmp.txt

#进行数据库过滤,下面是过滤掉了default和tmp以及名称为空格的数据库
write_log '进行数据库过滤'

grep -Ev "default|tmp|^$" $TMP_DIR/database_tmp.txt > $TMP_DIR/database.txt

#调试使用,这里的意思是只要tmp中的表,若启用会覆盖上面的数据库过滤
#grep "tmp" $TMP_DIR/database_tmp.txt > $TMP_DIR/database.txt


#拼接show tables in aDatabases;语句,
write_log '拼接show tables in Databases;语句'

for database_name in `cat $TMP_DIR/database.txt`;do
 
        write_log '数据库: '$database_name
	#在每个数据库中过滤出表明以tbl_posinfohis开头的表
	hive -e "show tables in $database_name like 'tbl_posinfohis*' ;" | while read line
        do
                write_log '找到表: '$line

		#循环执行select insert 语句
		#如果表有特殊等语法请自行扩充
		write_log "执行语句: insert into $TABLE_NAME select 字段 from \`$database_name\`"."\`$line\`;"
		hive -e "insert into $TABLE_NAME select * from \`$database_name\`"."\`$line\` ;"

		#-------------如果想要对原表进行任何处理,请在下方写
			#如果使用drop,请先测试,写脚本者(lyg)并未测试
			#hive -e "drop table \`$database_name\`"."\`$line\` ;"
		#
 
        done
 
done

你可能感兴趣的:(大数据知识,Linux-Shell,数据库,hive,数据库,hadoop)