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
  • 相关阅读:
    USACO 2.3 和为零 (DFS)
    公牛和母牛 (Standard IO)
    【NOIP2016提高A组模拟10.15】算循环
    USACO 2.2 集合(DP)
    USACO 2.2 序言页码 (MATH)
    NET实现微信公共平台上传下载多媒体文件(转)
    asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文
    LINQ to SQL语句
    JS时间(日期)比较或相减(暂时停用)
    json格式字符串处理
  • 原文地址:https://www.cnblogs.com/foolangirl/p/14139544.html
Copyright © 2011-2022 走看看