跑批检测 项目说明
现在有一个表是stock,需要按照股票代码分割导出文件,文件的格式为”股票代码.csv”
已知数据库有58万条股票记录,现在要求把这些股票数据导成csv格式,按照股票代码.csv的格式导出,每个小时执行并生产一个股票的csv文件。生成文件的顺序为股票代码从小到大排序。
质量要求
1) 该脚本可以需要带参数,参数的就是股票代码
2) 该脚本需要能够检测导出的数据,总数是否正确,其中检查成交总金额的总计是否相等,如果不相等,需要重跑。
3) 如果再次执行这个文件,文件先要检测文件是否存在,是个文件存在,那么考察文件内容是否符合2),不符合,生成csv文件
最后结果:
backup_stock stock_code
backup_stock.sh 000002
#
/backup/000001.csv
/backup/000002.csv
….
/backup/000100.csv
ctontab
接口要求
shell端和服务器端的契约
获取当前需要跑批的股票代码
存储过程名称 | 参数 | 返回值 |
---|---|---|
sp_get_stock_info | 无参数 | 打印出 股票代码 ,行数,交易量总汇总 ,例子 000001,5888,499499499494 |
sp_update_stock_log | stockid ,run_status,check_status | 无 |
状态含义:
run_status: B,开始,F,表示结束,R表示正在执行
check_status: N,未知, 默认状态, F,失败,S,成功
存储过程要求
1.查询出所有的文件记录条数
2.根据股票代码分组 利用row_num()分组 并记录每个分组的总数 输出一个分组的值
3.每一组保存到一个csv文件 格式:00000x.csv x为每个股票代码的序列号 文件名要求6位数不足前面补0 输出一个文件名
4.把结果记录到 count_gupiao 表里
用plsql写存储过程,保证能够执行成功,能否在Linux上调用 你们不用管
@杨优烽 @李昌信 @陈凯
[root@oracle bin]# cat export_csv.sh
#!/bin/bash
# 此文件放在/tmp/bin/convert_stock2_csv.sh
# 设置连接字符串
DBCONN="zs/123456@192.168.10.7/xe"
#获得当前需要跑得ID,股票代码 000001,5880,9030203023243 大数加减法
# get_current_stock
sqlplus -S zs/123456@192.168.10.7/xe <<EOF >result
set serveroutput on;
call get_current_stock();
EOF
retstring=$(sed -n '1p' result )
stockid=`echo $retstring | awk -F, '{print $1 }' `
rows=`echo $retstring | awk -F, '{print $2 }' `
total=`echo $retstring | awk -F, '{print $3 }' `
echo "stockid:$stockid,rows: $rows, total:$total"
#
# 转换csv文件的存储过程 convert_stock2_csv ( stockid )
# /tmp/output/{stockid}.csv
echo "start exporting $stockid"
sqlplus -S $DBCONN <<EOF
set serveroutput on
call exp_csv ('${stockid}' );
call sp_update_stock_log('${stockid}','F','S');
EOF
echo "$stockid exported "
exit 0
if [ -f /tmp/output/${stockid}.csv ] ; then
# 检查的文件总行数
# 检查所有的交易量总和
cz=`wc -l /tmp/output/${stockid}.csv `
cj=`awk '{sum+=$NF }' /tmp/output/${stockid}.csv`
# TODO:检查是否支持小数加减
if [ $cz -eq count -a $cj -eq zongliang ] ;
then
sqlplus -S $DBCONN <<EOF
call sp_update_stock_log('${stockid}','F','S');
EOF
else
call sp_update_stock_log('${stockid},'F','F');
fi
fi
crontab
每15秒执行一次
执行crontab -e
* * * * * /root/bin/export_csv.sh >/root/bin/export.csv.log 2>&1
* * * * * sleep 15 ; /root/bin/export_csv.sh >/root/bin/export.csv.log 2>&1
* * * * * sleep 30 ; /root/bin/export_csv.sh >/root/bin/export.csv.log 2>&1
* * * * * sleep 45 ; /root/bin/export_csv.sh >/root/bin/export.csv.log
`
作者:严锋 创建时间:2024-04-10 15:22
最后编辑:严锋 更新时间:2024-04-11 13:51
最后编辑:严锋 更新时间:2024-04-11 13:51