首页 > 解决方案 > 将 csv 从 S3 加载到 Oracle

问题描述

我需要将保存在 AWS S3 位置的 csv 文件加载到 Oracle 表中。

我在 Oracle 文档页面(下面提到的代码)中看到了该LOAD DATA语句,但是没有将数据从 AWS S3 加载到 Oracle 表的选项。有谁知道Oracle中是否有这样做的功能?

LOAD DATA
    [LOW_PRIORITY | CONCURRENT] [LOCAL]
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT}
        [, col_name={expr | DEFAULT}] ...]

标签: oracleamazon-web-servicesamazon-s3oracle11g

解决方案


从我的角度来看,如果你有一个 CSV 文件,那么SQL*Loader是一个可以使用的工具。

它与每个 Oracle 数据库一起安装(因此,如果您可以访问本地服务器,那么您就拥有了它)。更好的是,您可以在自己的 PC 上使用该工具;SQL*Loader 是 Oracle实用程序的一部分,可以从客户端软件安装。或者,如果您在 PC 上安装 Oracle XE (Express Edition),它也包含它。

很快:您将创建一个控制文件,其中指定数据源(您的 CSV 文件)、目标表、您将加载的列等。然后从操作系统命令提示符运行它,就是这样。

SQL*Loader 非常非常快。


另一种选择是使用外部表功能;它的缺点是您必须有权访问数据库服务器(实际上,访问目录 - 指向通常位于数据库服务器上的文件系统目录的 Oracle 对象)。如果您不是 DBA,则必须与其中一位交谈,因为他们必须授予您所需的权限。

如果您使用它,那么您可以从 SQL 访问 CSV 文件,即您可以像查询普通 Oracle 表一样查询该文件并使用例如

insert into target_table (col1, col2, ...) 
select col1, col2, ... from csv_file_as_external_table

推荐阅读