#!/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
Hive表多张日志表跑select insert合并为一张表
最新推荐文章于 2024-06-24 23:52:07 发布