暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQLLDR 导入碎片化CSV数据脚本

原创 布衣 2024-07-19
225

背景

  最近需要将Greenplum 里近3亿记录的表迁移Oracle 测试性能。通过Python里的pandas.to_csv将order订单表按日期生成碎片化CSV文件,再通过Oracle SQLLDR工具将碎片化的CSV文件导入Oracle;

  • 碎片文件目录如下
    image.png

SQLLDR 导入Oracle 脚本

#!/bin/sh source /home/oracle/.bash_profile startDate="$1" endDate="$2" echo "起始日期:$startDate" echo "结束日期:$endDate" #将日期转成秒 startDateTime=`date -d "$startDate" +%s` endDateTime=`date -d "$endDate" +%s` #两个日期秒数差 diff=`expr $endDateTime - $startDateTime` #计算天数(一天24*60*60=86400秒) diffCount=$(expr $diff/86400) #利用相差的天数输出两个日期之间所有日期 for((i=0;i<=$[diffCount];i++)) do # 当前日期 cDate=`date -d "$startDate $i day" +%Y-%m-%d` # 下个日期 nDate=`date -d "$cDate 1 day" +%Y-%m-%d` echo "SQL Load Data : $cDate" >> two.log # sqlldr 导入 sqlldr userid=two/'two' control=/home/oracle/two/two.ctl log=/home/oracle/two/two_${cDate}.log # 替换two.ctl 旧的日期目录 sed -i "s/$cDate/$nDate/g" two.ctl done

SQLLDR 控制文件 :two.ctl

OPTIONS(ROWS=10000,BINDSIZE=32250000,READSIZE=322500000,skip=1) LOAD DATA CHARACTERSET UTF8 INFILE '/home/oracle/two/2023-06-01/order.csv' INTO TABLE busi_order APPEND FIELDS TERMINATED BY ';' trailing nullcols ( id char(500), create_time TIMESTAMP "YYYY-MM-DD HH24:MI:SS", update_time TIMESTAMP "YYYY-MM-DD HH24:MI:SS" 字段略...... )

调用

sh two.sh 20230601 20231231 &

感言

  记录工作中的一些实用脚本,希望能给大家带来一些帮助,感觉有所帮助请关注公众号

公众号:布衣530
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论