SQLLDR 导入碎片化CSV数据脚本

2024年 7月 20日 73.0k 0

背景

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

  • 碎片文件目录如下
    SQLLDR 导入碎片化CSV数据脚本-1

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> 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
SQLLDR 导入碎片化CSV数据脚本-2

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论