zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    BFC——块级格式化上下文
    深入浅出——float
    NodeJS 学习记录
    JavaScript高级程序设计 第六章 面向对象程序设计
    软件项目管理课感想
    第八周PSP 新折线图和饼图 个人时间管理
    第七周PSP 新折线图和饼图 个人时间管理
    Alpha、伪Beta 发布个人感想与体会
    ”单元测试“理解与感悟
    编程
  • 原文地址:https://www.cnblogs.com/foolangirl/p/14139544.html
Copyright © 2011-2022 走看看