# 定义初始化map
declare -A map=([""]="" [""]="") # 输出所有key
echo ${map[@]} # 输出key对应的值
echo ${map[""]} # 遍历map
for key in ${!map[@]}
do
echo ${map[${key}]}
done
#!/bin/bash
#********************************************************************#
##author:郭昊
##create time:-- ::
#********************************************************************#
source /webser/odps/shell/odps.sh ### 定义变量
confSql="select concat_ws('|',check_id,check_desc,type,sql_txt) as flag from check_erroer_data_config where is_deleted = 0"
typeMap=(["a"]="" ["b"]="" ["c"]="" ["d"]="" ["e"]="") ### 主函数
main(){
# 清空结果表历史数据
db_query_retant "bigdata_db" "truncate table check_erroer_data_result" # 遍历配置表里的记录
db_query_retant "bigdata_db" "${confSql}"|sed '1d'|while read line
do
check_id=$(echo ${line}|awk -F'|' '{print $1}')
check_desc=$(echo ${line}|awk -F'|' '{print $2}')
type=$(echo ${line}|awk -F'|' '{print $3}')
sql_txt=$(echo ${line}|awk -F'|' '{print $4}') # 处理单引号
sql=$(echo ${sql_txt}|sed "s/'/''/g") # 处理执行语句
sql_excute=$(echo ${sql_txt}|sed "s/select/select ${check_id} as check_id,'${check_desc}' as check_desc,'${type}' as type,'${sql}' as sql_txt,DATABASE() as db_name,/i")
echo "${sql}"
echo "${sql_excute}" # 获取key对应的值
typeTenants=${typeMap[${type}]} # 统计异常数据量
if [ "${typeTenants}" != "" ]
then
if [ "${type}" == "gcxt" ]
then
upload_1 "${typeTenants}" "${sql_excute}" "check_id,check_desc,type,sql_txt,db_name,error_cnt" "check_erroer_data_result" "bigdata_db"
else
upload_2 "${typeTenants}" "${sql_excute}" "check_id,check_desc,type,sql_txt,db_name,error_cnt" "check_erroer_data_result" "bigdata_db"
fi
else
echo "[ERROR] Type: [ ${type} ] not match,Please check again"
fi
done # 删除正常的记录
db_query_retant "bigdata_db" "delete from check_erroer_data_result where error_cnt = 0"
} ### 运行主函数
main
-- 表结构设计
use bigdata_db;
-- 配置表
drop table check_erroer_data_config;
create table check_erroer_data_config(
check_id tinyint primary key auto_increment comment '检查项序号'
,check_desc varchar(500) not null comment '检查项描述'
,type varchar(100) not null comment '检查项类型'
,sql_txt varchar(1000) not null comment '检查SQL'
,is_deleted tinyint default 0 comment '是否已删除'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='业务异常数据巡检配置表'
; -- 结果表
drop table check_erroer_data_result;
create table check_erroer_data_result(
check_id tinyint not null comment '检查项序号'
,check_desc varchar(500) not null comment '检查项描述'
,type varchar(100) not null comment '检查项类型'
,db_name varchar(50) not null comment '检查数据库名'
,sql_txt varchar(1000) not null comment '检查SQL'
,error_cnt int(11) default 0 comment '异常记录数'
,update_time timestamp DEFAULT CURRENT_TIMESTAMP not null comment '更新时间'
,primary key(db_name,check_id)
,KEY `ix_error_cnt` (`error_cnt`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='业务异常数据巡检结果表'
;

shell map使用的更多相关文章

  1. shell map数据结构的实现

    前言     Bash默认不支持二维数组,如果我们想实现map 数据结构,可以安装如下的方式来进行构造   预备知识     eval:  它是shell内建命令,用于字符串的解析.它会首先扫描命令行 ...

  2. Hadoop高级培训课程大纲-管理员版

    一.课程概述 本次培训课程主要面向大数据系统管理人员和开发设计人员,基于开源社区大数据应用最活跃的Hadoop和HBase技术框架.围绕分布式文件存储(HDFS).分布式并行计算(Map/Recue) ...

  3. Hadoop高级培训课程大纲-开发者版

    一.课程概述 本次培训课程主要面向大数据系统管理人员和开发设计人员,基于开源社区大数据应用最活跃的Hadoop和HBase技术框架,围绕分布式文件存储(HDFS).分布式并行计算(Map/Recue) ...

  4. vim 配置.vimrc文件

    下面这个.vimrc文件是根据公司里的一个前辈配置的,这里记录下,方便以后使用.它的功能,其实跟网上很多.vimrc配置的相比,还是小儿科.我记录下来,主要还是因为自己已经习惯了这个工作环境跟快捷键. ...

  5. Shell中map的使用

    Shell中的map与array有很多的相似之处,array操作:https://www.cnblogs.com/qq931399960/p/10786111.html 一.在使用map时,需要先声明 ...

  6. Linux Shell管道调用用户定义函数(使shell支持map函数式特性)

    Linux中有一个管道的概念,常用来流式的处理文本内容,比如一个文件对其中的每一行应用好几个操作,出于两个方面的考虑可能需要在管道中使用用户定义函数: 1. 刚需: 内置的sed/awk之类的可能没法 ...

  7. Linux Shell:Map的用法

    Map定义: 在使用map时,需要先声明,否则结果可能与预期不同,array可以不声明 方式1: declare -A myMap myMap[" 方式2: declare -A myMap ...

  8. Linux Shell:根据指定的文件列表 或 map配置,进行文件位置转移

    读取配置文件,进行文件位置转移 在whenb.csv中指定了需要从/home/root/cf/下移除到/home/root/cf_wh/下文件列表,whenb.csv中包含记录如下: enb- enb ...

  9. MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程

    在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...

随机推荐

  1. https hsts 私密链接

    chrome强制转跳https,删除对某个域名的强制转跳即可 hrome的地址栏输入:chrome://net-internals/#hsts   在Delete domain下输入相对应的网址,不带 ...

  2. nignx ssl 配置

    1. 找一个目录,例如: usr/local/nginx/ssl ,进入该目录 2.  openssl genrsa -des3 -out server.key 1024  创建自身秘钥 3.  op ...

  3. CodeForces 289B Polo the Penguin and Matrix (数学,中位数)

    题意:给定 n * m 个数,然后每次只能把其中一个数减少d, 问你能不能最后所有的数相等. 析:很简单么,首先这个矩阵没什么用,用一维的存,然后找那个中位数即可,如果所有的数减去中位数,都能整除d, ...

  4. 设计模式18:Observer 观察者模式(行为型模式)

    Observer 观察者模式(行为型模式) 动机(Motivation) 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有依赖对象(观察者对象) ...

  5. Head First Python之4持久存储

    open()用法 # encoding:utf-8 try: # 写模式打开文件,若不存在该文件,则创建 out = open("data.out", "w") ...

  6. 深入理解java虚拟机(九)类加载器以及双亲委派模型

    虚拟机把类加载阶段中“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到虚拟机外部去实现,以便让程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类加载器”. 类与类加载器 任 ...

  7. 理解Javascript中的事件绑定与事件委托

    最近在深入实践js中,遇到了一些问题,比如我需要为动态创建的DOM元素绑定事件,那么普通的事件绑定就不行了,于是通过上网查资料了解到事件委托,因此想总结一下js中的事件绑定与事件委托. 事件绑定   ...

  8. node后台启动

    node启动后会占用当前shell 后台启动方式: 1.用forever进行管理 npm install -g forever forever start index.js   2.使用nohub命令 ...

  9. Maven项目常见错误

    一.Cannot change version of project facet Dynamic Web Module to 3.0. 和 One or more constraints have n ...

  10. .net 任务(Task)

    1. Task (任务): 很容易调用 ThreadPool.QueueUserWorkItem 实现异步操作,但是这个技术有许多 .net 引入Task类型来使用任务. 如下几种方式都是实现异步的方 ...