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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值