如何将AWS S3存储的CSV文件加载导入至Oracle数据库表
Oracle从AWS S3加载CSV文件到数据表的实现方案
你之前查询到的LOAD DATA属于MySQL的语法,并不适用于Oracle数据库。Oracle官方原生支持直接从AWS S3加载CSV数据到库表,常见可落地的实现方式如下:
- 方案1:使用Oracle内置
DBMS_CLOUD包(适用Oracle 18c及以上版本、Oracle自治数据库)
这是Oracle官方首推的方案,无需中转文件,可直接拉取S3文件导入,操作步骤如下:- 首先创建S3访问凭证
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'AWS_S3_CRED', username => 'AWS_ACCESS_KEY_ID', password => 'AWS_SECRET_ACCESS_KEY' ); END; /- 调用COPY_DATA过程直接导入CSV数据
可通过调整BEGIN DBMS_CLOUD.COPY_DATA( table_name => 'TARGET_TABLE_NAME', credential_name => 'AWS_S3_CRED', file_uri_list => 'https://<bucket-name>.s3.<region>.amazonaws.com/<csv-file-path>', format => JSON_OBJECT('type' VALUE 'csv', 'skipheaders' VALUE 1, 'delimiter' VALUE ',', 'encoding' VALUE 'UTF8') ); END; /format参数自定义字段分隔符、行分隔符、引号规则、跳过行数等属性,能力覆盖你之前了解的LOAD DATA的所有配置项。本地部署的Oracle如果没有预装DBMS_CLOUD,可自行按照官方标准流程手动安装启用。 - 方案2:SQL*Loader + AWS CLI中转(适用所有Oracle版本)
如果你的Oracle版本较低无法使用DBMS_CLOUD,可以通过中转文件的方式实现:- 通过
aws s3 cp命令将S3上的CSV文件下载到Oracle数据库所在服务器本地 - 编写SQL*Loader控制文件,定义CSV字段映射、分隔规则、表头跳过规则等配置
- 执行
sqlldr命令完成数据导入,配置规则和你熟悉的LOAD DATA语法高度兼容
- 通过
- 方案3:S3外部表(适用Oracle 19c及以上版本)
可以将S3上的CSV文件直接挂载为Oracle的外部表,无需提前导入即可直接查询,也可以通过INSERT INTO 目标表 SELECT * FROM 外部表的方式批量导入数据,配置时同样需要先通过DBMS_CLOUD创建S3访问凭证。
提示:如果Oracle部署在AWS EC2实例上,可以给EC2绑定具备S3访问权限的IAM角色,无需在代码中明文配置AWS密钥,安全性更高。
内容的提问来源于stack exchange,提问作者Sarath Subramanian
相关产品推荐
相关产品推荐

