如何在SQL Loader加载数据过程中自动重格式化日期
解决方案
SQL Loader 原生支持加载过程中自动完成日期格式转换,无需提前预处理CSV文件,性能远高于逐行转换方案。
现有配置失败的原因
你在DATE关键字后指定的是目标表的日期展示格式,而SQL Loader中DATE后接的格式参数是用来描述CSV文件中输入的日期字符串的格式,不是输出到表的格式。Oracle DATE类型是内部二进制存储结构,你看到的DD-MON-YY只是数据库的NLS_DATE_FORMAT参数控制的展示样式,只要导入时正确识别输入的日期字符串,存储到表中的数据自然会匹配数据库的日期规则,查询时也会按DD-MON-YY正常展示。
正确的控制文件配置
LOAD DATA INFILE 'data.csv' TRUNCATE INTO TABLE data FIELDS TERMINATED BY '|' TRAILING NULLCOLS ( COL1, COL2, CREATED_DATE DATE 'YYYY-MM-DD HH24:MI:SS', LAST_UPDT_DATE DATE 'YYYY-MM-DD HH24:MI:SS' )
注意这里用HH24而不是HH,避免CSV中12~23点的时间识别错误。
千万级数据加载优化建议
- 启动SQL Loader时添加
DIRECT=TRUE参数开启直接路径加载,跳过大部分数据库逻辑层校验,加载速度可提升3~10倍,完全可以应对1000万级别的CSV文件。 - 若存在可忽略的无效日期行,可添加
ERRORS=10000参数避免少量脏数据导致加载中断。
内容的提问来源于stack exchange,提问作者Russell Quinlan
相关产品推荐
相关产品推荐

