自动截取sql并合并,生成执行HQL
### 提取SQL语句
FILE_PATH="/data/SCRIPT"
cat tables | while read file
do
echo "-----> ${file}"
start=`grep -nEi "^insert|^with" ${FILE_PATH}/${file}|awk -F':' '{print $1}'|head -`
end=$((`grep -nEi "^exitCodeCheck" ${FILE_PATH}/${file}|awk -F':' '{print $1}'` - ))
sed -n "${start},${end}p" ${FILE_PATH}/${file}|sed 's/;$//g'
echo ";"
done > sql_script
### 生成语法测试
FILE_PATH="/data/SCRIPT"
cat tables | while read file
do
echo "-----> ${file}"
start=`grep -nEi "^insert|^with" ${FILE_PATH}/${file}|awk -F':' '{print $1}'|head -`
end=$((`grep -nEi "^exitCodeCheck" ${FILE_PATH}/${file}|awk -F':' '{print $1}'` - ))
sed -n "${start},${end}p" ${FILE_PATH}/${file}|sed 's/;$//g'
echo "limit 0"
echo ";"
done > sql_script_limit
# 替换文件中的dos回车
sed -i 's#^M$#\n#g' sql_script
### 文件dos 转 unix
find . -type f|xargs -i dos2unix {}
FILE_PATH="/home/userNmae/hive_data_init/"
script="sql_script"
run_script="run_${script}"
cat /dev/null > ${run_script}
for i in {'2018-02-28','2018-04-30','2018-06-30','2018-08-31','2018-09-03'}
do
etl_dt_start=${i}
etl_dt_end=`date -d "1 days ${etl_dt_start}" +%Y-%m-%d`
echo ${etl_dt_start} ${etl_dt_end}
etl_dt=`echo ${etl_dt_start}|sed 's/-/_/g'`
# etl_dt=`echo ${etl_dt_start_str::}`;
echo "use cmrh_dw;" > ${script}_${etl_dt}
echo "set hive.execution.engine=spark;" >> ${script}_${etl_dt}
echo "set hive.exec.dynamic.partition=true;" >> ${script}_${etl_dt}
echo "set hive.exec.dynamic.partition.mode=nonstrict;" >> ${script}_${etl_dt}
echo "---------> ${etl_dt_start} ${etl_dt_end} <---------" >> ${script}_${etl_dt}
echo "set hivevar:IncStartAll=${etl_dt_start};" >> ${script}_${etl_dt}
echo "set hivevar:IncEndAll=${etl_dt_end};" >> ${script}_${etl_dt}
echo "source ${FILEPATH}/${script};" >> ${script}_${etl_dt}
echo "hive -v -f ${script}_${etl_dt}" >> ${run_script}
done
### 修改版脚本
### script name: prod_init.sh
tables=$
script=sql_str_${tables}
run_script=run_${script}
file_path=/data/etlscript/DB_NAME/SCRIPT/DWD/
# 读取配置文件中的脚本名,提取相应脚本在生产环境中的SQL,合并成一个文件
cat ${tables} | while read file
do
echo "-----> ${file}"
start=`grep -nEi "^insert|^with" ${file_path}${file}|awk -F':' '{print $1}'|head -`
end=$((`grep -nEi "^exitCodeCheck" ${file_path}${file}|awk -F':' '{print $1}'` - ))
sed -n "${start},${end}p" ${file_path}${file}
# |sed 's/;$//g'
echo ";"
done > ${script} cat /dev/null > ${run_script}
#for day in {'2018-02-28','2018-04-30','2018-06-30','2018-08-31','2018-10-14'}
# 读取日期配置文件中的日期,遍历生成批次执行脚本
cat day_file|while read day
do
etl_dt_start=${day}
etl_dt_end=`date -d "1 days ${etl_dt_start}" +%Y-%m-%d`
# etl_dt_end=`date -d "1 months ${etl_dt_start}" +%Y-%m-%d`
echo ${etl_dt_start} ${etl_dt_end}
etl_dt_start_str=`echo ${etl_dt_start}|sed 's/-/_/g'`
echo "set hive.exec.dynamic.partition=true;" > ${script}_${etl_dt_start_str}
echo "set hive.exec.dynamic.partition.mode=nonstrict;" >> ${script}_${etl_dt_start_str}
echo "set hive.execution.engine=spark;" >> ${script}_${etl_dt_start_str}
echo "use cmrh_dw;" >> ${script}_${etl_dt_start_str}
# etl_dt_start_str=`echo ${etl_dt_start}|sed 's/-/_/g'`
# etl_dt_start_str=`echo ${etl_dt_start_str::}`;
echo "---------> ${etl_dt_start} ${etl_dt_end} <---------" >> ${script}_${etl_dt_start_str}
echo "set hivevar:IncStartAll=${etl_dt_start};" >> ${script}_${etl_dt_start_str}
echo "set hivevar:IncEndAll=${etl_dt_end};" >> ${script}_${etl_dt_start_str}
echo "source ${script}" >> ${script}_${etl_dt_start_str}
echo "hive -v -f ${script}_${etl_dt_start_str} > ${script}_${etl_dt_start_str}_log 2>&1 &" >> ${run_script}
done
EOF
自动截取sql并合并,生成执行HQL的更多相关文章
- 4.5 .net core下直接执行SQL语句并生成DataTable
.net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...
- .net core下直接执行SQL语句并生成DataTable
.net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...
- PL/SQL 报错:动态执行表不可访问,本会话的自动统计被禁止。 在执行菜单里你可以禁止统计,或在v$session,v$sesstat 和vSstatname表里获得选择权限。
现象: 第一次用PL/SQL Developer连接数据库,若用sys用户登录并操作则正常,若用普通用户比如haishu登录并创建一个表则报错“动态执行表不可访问,本会话的自动统计被禁止.在执行菜单里 ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- 谈一谈SQL Server中的执行计划缓存(下)
简介 在上篇文章中我们谈到了查询优化器和执行计划缓存的关系,以及其二者之间的冲突.本篇文章中,我们会主要阐述执行计划缓存常见的问题以及一些解决办法. 将执行缓存考虑在内时的流程 上篇文章中提到了查询优 ...
- sql关键字的解释执行顺序
sql关键字的解释执行顺序 分类: 笔试面试总结2013-03-17 14:49 1622人阅读 评论(1) 收藏 举报 SQL关键字顺序 表里面的字段名什么符号都不加,值的话一律加上单引号 有一 ...
- Apache Spark源码走读之11 -- sql的解析与执行
欢迎转载,转载请注明出处,徽沪一郎. 概要 在即将发布的spark 1.0中有一个新增的功能,即对sql的支持,也就是说可以用sql来对数据进行查询,这对于DBA来说无疑是一大福音,因为以前的知识继续 ...
- 在打包程序中自动安装SQL Server数据库 .
原文:在打包程序中自动安装SQL Server数据库 . 1.创建安装项目“Setup1”安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”. 在“添加新项目”对话框中,选择“项目类型” ...
- 为准确生成执行计划更新统计信息-analyze与dbms_stats
如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息. 例如索引跳跃式扫描(INDEX ...
随机推荐
- cocos2dx中替代goto的用法:do{}while(0)和CC_BREAK_IF
我们时常会调用某个函数来创建一个对象,但由于内存不足或其他异常情况发生时对象可能会创建失败,创建失败我们就要结束当前程序转到错误处理地方去处理错误或释放已生成的对象. int* p1 = new in ...
- 用bat写的一个小病毒
最近看了一点bat的知识,具体说是看了一个博客:http://blog.csdn.net/qsyzb/article/details/17364581 用了三天才看完=.=,感觉作者整理整理可以把博客 ...
- C++用指针变量作为函数的参数接受数组的值的问题的总结
实参和形参的四种结合方式 实参 形参 实例 数组名 数组名 1.1 数组名 指针变量 1.2 指针变量 数组名 1.3 指针变量 指针变量 1.4 本文以输入10个整数,然后对其进行排序,然后输出的程 ...
- ROS Learning-019 learning_tf-03(编程) 添加额外的坐标系 (Python版)
ROS Indigo learning_tf-03 添加额外的坐标系 (Python版) 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...
- 前端学习笔记2017.6.12 DIV布局网页
DIV的功能就是把网页划分成逻辑块的. 看下豆瓣东西页面的布局,我们来分析下. 按照先从上到下的原则,把这个页面分成几个块: 首先是最顶端的这个条,这是一个DIV,我们给它起个名字,叫banner 然 ...
- CF 1029E Tree with Small Distances
昨晚随便玩玩搞个div3结果浪翻了…… 强烈谴责D题hack数据卡常 考虑到本题中所要求的最短距离不会大于2,所以我们可以把所有结点到$1$的距离通过对$3$取模分类,考虑到直接自顶向下贪心不满足局部 ...
- C++中的内存重叠问题
内存重叠,直到做到一个笔试题才知道了什么是内存重叠.先上题目吧,是一个淘宝的笔试题,当时有点懵,不知道这个名词是啥子意思. 题目:补充下面函数代码: 如果两段内存重叠,用memcpy函数可能会导致行为 ...
- 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)
winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了 ...
- C#字符串要点(复习专用)
一.字符串 通过string定义一个字符串,或者通过String类来创建对象. 通过new String() 创建有一下几种构造函数(从元数据),以此顺序创建string: // // 摘要: // ...
- 计算DataTable某列的值(SUM)
参考,如下: