• 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
  • 相关阅读:
    音频(一)_音频认知(1.音频释义)
    音频_写在前面的话
    SignInWithAppleId(Apple登录接入)_unity篇
    编程工具~用了都说好的快捷键大杂烩
    Unity的PlayerPrefs存储路径
    unity如何判断应用的运行平台
    Unity资源加载机制www的坑
    VSCode快捷键
    MD5加密字符串并转化为base64(C#和PHP代码相同实现)
    转载:关于 Google Chrome 中的全屏模式和 APP 模式
  • 原文地址:https://www.cnblogs.com/foolangirl/p/14139544.html
Copyright © 2020-2023  润新知