shell实操2-hive多个跑批表逐步切换,基于表的下游应用分情况处理

场景:

有一批平行的数据库db1, db2, db3, ...,每个库有同样命名的一批视图tb1; tb2; ...,这些视图展示的是最新跑批结果的数据,基于这些视图下游有一些应用。

现:要将这批视图转成分区物理表,再基于该分区物理表的最新跑批结果,即最新分区做下游应用。

要求是:每张表切换新跑批脚本的的时候,下游应用无感

方案:

将tb1; tb2; ...视图脚本改为物理表脚本,改好了的跑对接物理表最新分区的下游新应用;没改好的跑原来的下游应用。

2.针对每个db的每张tb, 切换其下游应用脚本为:

#!/bin/bash
#所需参数--库名;表名
#${DB_NAME}   --库名
#${TB_NAME}   --表名
#${EXEC_DATE} --跑批执行时间 PARTITION_COL
='prt_dt' #分区字段名--prt_dt PARTITION_VAL=${EXEC_DATE} #当前跑批分区日期 STD_DB_NAME=$(echo ${DB_NAME} | tr '[A-Z]' '[a-z]') #统一转小写 STD_TB_NAME=$(echo ${TB_NAME} | tr '[A-Z]' '[a-z]') hdfs_save_path=`hdfs dfs -ls -t hdfs://hadoop01/user/hive/warehouse/$STD_DB_NAME.db/$STD_TB_NAME` #若已切换为物理表,则在hdfs可以查到存储的表目录下的分区文件夹 echo $hdfs_save_path
partition_table_flg
=$(echo $hdfs_save_path | grep "prt_dt") echo "partition_table_flg:$partition_table_flg" 若有分区文件夹,可以grep出含有分区字段prt_dt的文件夹名称 if [[ "$partition_table_flg !="" ]] then echo "You are using new version, ${PARTITION_COL} = ${PARTITION_VAL}." `--若为已切换分区表,基于最新分区(当前跑批分区)的下游应用` else echo "You are using old version, date= ${PARTITION_VAL}." `--若未获取到分区的信息,任然取旧的应用方式` fi
原文地址:https://www.cnblogs.com/foolangirl/p/14139544.html