跑批检测 项目说明

现在有一个表是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