使用 DBMS_CLOUD.EXPORT_DATA 将数据作为文本导出到对象存储

使用 DBMS_CLOUD.EXPORT_DATA 将数据作为文本从 Autonomous Database 导出到云对象存储。文本格式导出选项为 CSV、JSON 或 XML

将 JSON 数据导出到云对象存储

显示通过指定查询将表数据从 Autonomous Database 导出为 JSON 数据的步骤。

此导出方法支持 Autonomous Database 支持的所有云对象存储,您可以使用 Oracle Cloud Infrastructure 资源主用户访问 Oracle Cloud Infrastructure 对象存储、Amazon 资源名称 (ARN) 访问 AWS Simple Storage Service (S3)、访问 Azure BLOB 存储的 Azure 服务主用户或访问 Google Cloud Platform (GCP) 资源的 Google 服务账户。

  1. 连接到 Autonomous Database 实例。

    有关详细信息,请参阅连接到 Autonomous Database

  2. 使用 DBMS_CLOUD.CREATE_CREDENTIAL 存储您的云对象存储身份证明。

    例如:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'user1@example.com',
        password => 'password'
      );
    END;
    /

    usernamepassword 提供的值取决于您使用的云对象存储服务。

  3. 运行 DBMS_CLOUD.EXPORT_DATA 并将 format 参数 type 指定为值 json,以将结果导出为云对象存储上的 JSON 文件。
    要生成 JSON 输出文件,file_uri_list 参数有两个选项:
    • file_uri_list 值设置为云对象存储上现有存储桶的 URL。

    • file_uri_list 值设置为云对象存储上现有存储桶的 URL,并包含为导出的 JSON 生成文件名时要使用的文件名前缀。

    如果 file_uri_list 中未包含文件名前缀,则 DBMS_CLOUD.EXPORT_DATA 将提供文件名前缀。有关详细信息,请参阅文本输出的文件命名(CSV、JSON、Parquet 或 XML)

    例如,下面显示了在 file_uri_list 中指定的文件名前缀为 DBMS_CLOUD.EXPORT_DATA

    BEGIN
      DBMS_CLOUD.EXPORT_DATA(
        credential_name => 'DEF_CRED_NAME',
        file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/dept_export',
        query           => 'SELECT * FROM DEPT',
        format          => JSON_OBJECT('type' value 'json'));
    END;
    /

    在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关更多信息,请参见 Understanding Object Storage Namespaces

    当记录分隔符包括转义符(如 \r\n 或 \t)时,将记录分隔符用双引号括起来。例如,要使用记录分隔符 \r\n,请用双引号将值括起来:"\r\n"

    BEGIN
      DBMS_CLOUD.EXPORT_DATA(
        credential_name => 'DEF_CRED_NAME',
        file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/dept_export',
        query => 'SELECT * FROM DEPT',
        format => JSON_OBJECT('type' value 'json', 'recorddelimiter' value '"\r\n"' format json));
    END;
    /

    在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关更多信息,请参见 Understanding Object Storage Namespaces

    有关参数的详细信息,请参见EXPORT_DATA Procedure

    有关可用于 DBMS_CLOUD.EXPORT_DATA 的可用 format 参数的详细信息,请参见 DBMS_CLOUD Package Format Options for EXPORT_DATA

使用 DBMS_CLOUD.EXPORT_DATA 导出时的说明:

  • 如果需要,您提供的 query 参数可以是高级查询,例如包含联接或子查询的查询。

  • 使用 compression 选项指定 format 参数以压缩输出文件。

  • 如果不再需要导出的文件,请使用 DBMS_CLOUD.DELETE_OBJECT 过程或使用本机云对象存储命令删除这些文件。

将数据以 CSV 格式导出到云对象存储

显示通过指定查询将表数据从 Autonomous Database 导出为 CSV 数据的步骤。

此导出方法支持 Autonomous Database 支持的所有云对象存储。您还可以使用 Amazon Resource Names (ARN) 访问 AWS Simple Storage Service (S3),这是访问 Azure BLOB 存储的 Azure 服务主体,或者使用 Google 服务帐户访问 Google Cloud Platform (GCP) 资源。

  1. 连接到 Autonomous Database 实例。

    有关详细信息,请参阅连接到 Autonomous Database

  2. 使用 DBMS_CLOUD.CREATE_CREDENTIAL 存储您的云对象存储身份证明。

    例如:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'user1@example.com',
        password => 'password'
      );
    END;
    /

    usernamepassword 提供的值取决于您使用的云对象存储服务。

  3. 运行 DBMS_CLOUD.EXPORT_DATA 并将 format 参数 type 指定为值 csv,以将结果导出为云对象存储上的 CSV 文件。
    要生成 CSV 输出文件,file_uri_list 参数有两个选项:
    • file_uri_list 值设置为云对象存储上现有存储桶的 URL。

    • file_uri_list 值设置为云对象存储上现有存储桶的 URL,并包含为导出的 CSV 文件生成文件名时要使用的文件名前缀。

    如果 file_uri_list 中未包含文件名前缀,则 DBMS_CLOUD.EXPORT_DATA 将提供文件名前缀。有关详细信息,请参阅文本输出的文件命名(CSV、JSON、Parquet 或 XML)

    例如,下面显示了在 file_uri_list 中指定的文件名前缀为 DBMS_CLOUD.EXPORT_DATA

    BEGIN
      DBMS_CLOUD.EXPORT_DATA(
        credential_name => 'DEF_CRED_NAME',
        file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/dept_export',
        query           => 'SELECT * FROM DEPT',
        format          => JSON_OBJECT('type' value 'csv', 'delimiter' value '|', 'compression' value 'gzip'));
    END;
    /

    在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关更多信息,请参见 Understanding Object Storage Namespaces

    有关参数的详细信息,请参见EXPORT_DATA Procedure

    有关可用于 DBMS_CLOUD.EXPORT_DATA 的可用 format 参数的详细信息,请参见 DBMS_CLOUD Package Format Options for EXPORT_DATA

使用 DBMS_CLOUD.EXPORT_DATA 导出时的说明:

  • 如果需要,您提供的 query 参数可以是高级查询,例如包含联接或子查询的查询。

  • 使用 compression 选项指定 format 参数以压缩输出文件。

  • 如果不再需要导出的文件,请使用 DBMS_CLOUD.DELETE_OBJECT 过程或使用本机云对象存储命令删除这些文件。

将数据作为参数导出到云对象存储

显示通过指定查询将表数据从 Autonomous Database 导出为 Cloud Object Storage 的步骤。

此导出方法支持 Autonomous Database 支持的所有云对象存储,您可以使用 Oracle Cloud Infrastructure 资源主用户访问 Oracle Cloud Infrastructure 对象存储、Amazon 资源名称 (ARN) 访问 AWS Simple Storage Service (S3)、访问 Azure BLOB 存储的 Azure 服务主用户或访问 Google Cloud Platform (GCP) 资源的 Google 服务账户。

  1. 连接到 Autonomous Database 实例。

    有关详细信息,请参阅连接到 Autonomous Database

  2. 使用 DBMS_CLOUD.CREATE_CREDENTIAL 存储您的云对象存储身份证明。

    例如:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'user1@example.com',
        password => 'password'
      );
    END;
    /

    usernamepassword 提供的值取决于您使用的云对象存储服务。

  3. 运行 DBMS_CLOUD.EXPORT_DATA 并将 format 参数 type 指定为值 parquet,以将结果导出为云对象存储上的参数文件。
    要生成 parquet 输出文件,有 file_uri_list 参数的两个选项:
    • file_uri_list 值设置为云对象存储上现有存储桶的 URL。

    • file_uri_list 值设置为云对象存储上现有存储桶的 URL,并包含为导出的参数文件生成文件名时要使用的文件名前缀。

    如果 file_uri_list 中未包含文件名前缀,则 DBMS_CLOUD.EXPORT_DATA 将提供文件名前缀。有关详细信息,请参阅文本输出的文件命名(CSV、JSON、Parquet 或 XML)

    例如,下面显示了在 file_uri_list 中指定的文件名前缀为 DBMS_CLOUD.EXPORT_DATA

    BEGIN
      DBMS_CLOUD.EXPORT_DATA(
        credential_name => 'DEF_CRED_NAME',
        file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/dept_export',
        query           => 'SELECT * FROM DEPT',
        format          => JSON_OBJECT('type' value 'parquet', 'compression' value 'snappy'));
    END;
    /

    在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关更多信息,请参见 Understanding Object Storage Namespaces

    有关参数的详细信息,请参见EXPORT_DATA Procedure

    有关可用于 DBMS_CLOUD.EXPORT_DATA 的可用 format 参数的详细信息,请参见 DBMS_CLOUD Package Format Options for EXPORT_DATA

使用 DBMS_CLOUD.EXPORT_DATA 导出时的说明:

  • 如果需要,您提供的 query 参数可以是高级查询,例如包含联接或子查询的查询。

  • 使用 compression 选项指定 format 参数以压缩输出文件。type parquet 的缺省 compressionsnappy

  • 如果不再需要导出的文件,请使用 DBMS_CLOUD.DELETE_OBJECT 过程或使用本机云对象存储命令删除这些文件。

  • 有关 Oracle 类型到参数类型的映射的详细信息,请参见 DBMS_CLOUD Package Oracle Data Type to Parquet Mapping

    不支持以下类型,或者它们对使用 DBMS_CLOUD.EXPORT_DATA 导出 Parquet 的支持存在限制:

    Oracle 类型 注:

    BFILE

    不支持

    BLOB

    不支持

    DATE

    支持的限制如下:DATE 格式仅支持日期、月份和年份。不支持小时、分钟和秒。

    有关将 DATE 导出到 Parquet 的 NLS 格式限制的详细信息,请参见 DBMS_CLOUD Package Oracle Data Type to Parquet Mapping

    INTERVAL DAY TO SECOND

    支持并在内部被视为字符串

    INTERVAL YEAR TO MONTH

    支持并在内部被视为字符串

    LONG

    不支持

    LONG RAW

    不支持

    NUMBER

    支持,但存在以下限制:

    • 最大精度可以为 38,小数位数可以小于精度。
    • 如果没有为列 NUMBER 类型提供精度和小数位数,则默认情况下使用精度 38 和小数位数 20。
    • NUMBER 类型不支持负比例。

    Object Types

    不支持

    TIMESTAMP

    支持,但存在以下限制:

    • 如果有多个列具有不同的精度,则采用最高的精度。
    • TIMESTAMP WITH TIME ZONE Oracle 数据类型将仅使用时间戳。

    有关将 TIMESTAMP 导出到 Parquet 的 NLS 格式限制的详细信息,请参见 DBMS_CLOUD Package Oracle Data Type to Parquet Mapping

将数据作为 XML 导出到云对象存储

显示通过指定查询将表数据从 Autonomous Database 导出为 XML 数据的步骤。

此导出方法支持 Autonomous Database 支持的所有云对象存储。您还可以使用 Amazon Resource Names (ARN) 访问 AWS Simple Storage Service (S3),这是访问 Azure BLOB 存储的 Azure 服务主体,或者使用 Google 服务帐户访问 Google Cloud Platform (GCP) 资源。

  1. 连接到 Autonomous Database 实例。

    有关详细信息,请参阅连接到 Autonomous Database

  2. 使用 DBMS_CLOUD.CREATE_CREDENTIAL 存储您的云对象存储身份证明。

    例如:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'user1@example.com',
        password => 'password'
      );
    END;
    /

    usernamepassword 提供的值取决于您使用的云对象存储服务。

  3. 运行 DBMS_CLOUD.EXPORT_DATA 并将 format 参数 type 指定为值 xml,以将结果导出为云对象存储上的 XML 文件。
    要生成 XML 输出文件,file_uri_list 参数有两个选项:
    • file_uri_list 值设置为云对象存储上现有存储桶的 URL。

    • file_uri_list 值设置为云对象存储上现有存储桶的 URL,并包含为导出的 JSON 生成文件名时要使用的文件名前缀。

    如果 file_uri_list 中未包含文件名前缀,则 DBMS_CLOUD.EXPORT_DATA 将提供文件名前缀。有关详细信息,请参阅文本输出的文件命名(CSV、JSON、Parquet 或 XML)

    例如,下面显示了在 file_uri_list 中指定的文件名前缀为 DBMS_CLOUD.EXPORT_DATA

    BEGIN
      DBMS_CLOUD.EXPORT_DATA(
        credential_name => 'DEF_CRED_NAME',
        file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/dept_export',
        query           => 'SELECT * FROM DEPT',
        format          => JSON_OBJECT('type' value 'xml', 'compression' value 'gzip'));
    END;
    /

    在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关更多信息,请参见 Understanding Object Storage Namespaces

    有关参数的详细信息,请参见EXPORT_DATA Procedure

    有关可用于 DBMS_CLOUD.EXPORT_DATA 的可用 format 参数的详细信息,请参见 DBMS_CLOUD Package Format Options for EXPORT_DATA

使用 DBMS_CLOUD.EXPORT_DATA 导出时的说明:

  • 如果需要,您提供的 query 参数可以是高级查询,例如包含联接或子查询的查询。

  • 使用 compression 选项指定 format 参数以压缩输出文件。

  • 如果不再需要导出的文件,请使用 DBMS_CLOUD.DELETE_OBJECT 过程或使用本机云对象存储命令删除这些文件。

文本输出的文件命名( CSV、JSON、Parquet 或 XML

介绍使用 DBMS_CLOUD.EXPORT_DATACSV、JSON、Parquet 或 XML 文本文件输出的输出文件命名。

DBMS_CLOUD.EXPORT_DATA 执行使用 query 参数指定的查询,并将结果发送到云对象存储存储桶中的文本文件或目录。输出格式取决于您指定的 format 参数 typeCSV、JSON、Parquet 或 XML 之一)。

为了加快过程并尽可能快地生成输出,DBMS_CLOUD.EXPORT_DATA 会划分其工作。这意味着,根据系统资源,在运行 DBMS_CLOUD.EXPORT_DATA 时,该过程会在云对象存储存储桶或目录中创建多个输出文件。

生成的每个文件的格式为:

[FileNamePrefix | client_info_module_action]_sequenceNum_timestamp.format_extension.[compression_extension]

  • FileNamePrefix :(可选)如果提供了 FileNamePrefixDBMS_CLOUD.EXPORT_DATA 将使用文件名前缀为结果生成文件名。FileNamePrefix 是使用在 file_uri_list 参数值中的存储桶或目录名称之后提供的文本指定的。

    不能为 file_uri_list 中的 FileNamePrefix 提供多个值。

  • client_info _ module _ action :如果文件名前缀未随 file_uri_list 参数一起提供,则 DBMS_CLOUD.EXPORT_DATA 使用 client_info 、应用程序 moduleaction 的组合作为文件名前缀(当此信息可用时)。该过程从运行查询的数据库会话的应用程序信息中获取这些名称。有关 client_infomodule 名称和 action 名称的信息,请参见 Oracle Database 19c PL/SQL Packages and Types ReferenceOracle Database 23ai PL/SQL Packages and Types Reference 中的 DBMS_APPLICATION_INFO

    如果未随 file_uri_list 提供文件名前缀,并且数据库会话属性不可用,则 DBMS_CLOUD.EXPORT_DATA 将使用文件名前缀 "data"。

  • sequenceNum :与 DBMS_CLOUD.EXPORT_DATA 查询关联的序列号。根据查询、数据库服务和 ECPU(如果数据库使用 OCPU,则为 OCPU)的数量,有一个或多个 sequenceNum 。此外,根据结果的大小,每个 sequenceNum 都有一个或多个输出文件。

  • timestamp :上载文件的时间戳。

  • format_extension :默认值取决于 format type 值:

    • CSV 格式:.csv
    • JSON 格式:.json
    • PARQUET 格式 .parquet
    • XML 格式:.xml

    有关更多信息,请参见DBMS_CLOUD Package Format Options for EXPORT_DATA 中有关 format 选项 fileextension 的说明。

  • compression_extension :将 format 参数与 compression 选项以及值 gzip 结合使用时,这是 "gz"

    format typeparquet 时,也支持 compressionsnappy,并且是缺省值。

例如,以下 DBMS_CLOUD.EXPORT_DATA 过程中的文件名前缀在 file_uri_list 参数中指定为 dept_export。此示例将以指定格式生成到提供的对象存储的输出。

BEGIN
  DBMS_CLOUD.EXPORT_DATA(
    credential_name => 'DEF_CRED_NAME',
    file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/dept_export',
    query           => 'SELECT * FROM DEPT',
    format          => JSON_OBJECT('type' value 'json'));
END;
/

指定文件名前缀时,生成的输出文件包括文件名前缀,类似于以下内容:

dept_export_1_20210809T173033Z.json
dept_export_2_20210809T173034Z.json
dept_export_3_20210809T173041Z.json
dept_export_4_20210809T173035Z.json

生成的输出文件数取决于 Autonomous Database 实例中的结果大小、数据库服务以及 ECPU(如果数据库使用 OCPU,则为 OCPU)的数量。

在以下示例中,file_uri_list 参数不包含文件名前缀,并且提供了值为 gzipcompression 参数:

BEGIN
  DBMS_CLOUD.EXPORT_DATA(
    credential_name => 'DEF_CRED_NAME',
    file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/',
    query           => 'SELECT * FROM DEPT',
    format          => json_object('type' value 'json', 'compression' value 'gzip'));
END;
/

如果文件名前缀不在 file_uri_list 参数中,DBMS_CLOUD.EXPORT_DATA 将使用以下格式的文件名前缀:client_info _ module _ action 。对于此示例,生成的输出文件包括 DBMS_CLOUD.EXPORT_DATA 提供的文件名前缀,并使用 gzip 压缩这些文件,并添加文件扩展名 .gz,如下所示:

Client1_Module1_Action1_1_20210809T173033Z.json.gz
Client1_Module1_Action1_2_20210809T173034Z.json.gz
Client1_Module1_Action1_3_20210809T173041Z.json.gz
Client1_Module1_Action1_4_20210809T173035Z.json.gz

如果在运行 DBMS_CLOUD.EXPORT_DATAclient_info _ module _ action 会话信息不可用,则文件名前缀将设置为 data。例如:

data_1_20210809T173033Z.json.gz
data_2_20210809T173034Z.json.gz
data_3_20210809T173041Z.json.gz
data_4_20210809T173035Z.json.gz

例如,以下 DBMS_CLOUD.EXPORT_DATA 过程中的文件名前缀在 file_uri_list 参数中指定为 dept_export。此示例以指定格式生成到提供的目录的输出。

BEGIN
  DBMS_CLOUD.EXPORT_DATA(
    file_uri_list   => 'DATA_PUMP_DIR:sales.json',
    query           => 'SELECT * FROM SALES',
    format          => JSON_OBJECT('type' value 'json'));
END;
/

指定文件名前缀时,生成的输出文件包括文件名前缀,类似于以下内容:

sales_1_20230705T124523275915Z.csv

有关使用 DBMS_CLOUD.EXPORT_DATA 进行文件命名的说明:

  • DBMS_CLOUD.EXPORT_DATA 不会创建存储桶或目录。

  • DBMS_CLOUD.EXPORT_DATA 生成的文件数由 ECPU(如果数据库使用 OCPU,则为 OCPU)、数据库服务和结果数据大小决定。

  • file_uri_list 参数中提供目录对象名称时,以下情况适用:

    • 提供的目录必须存在,并且您必须对该目录具有 WRITE 访问权限。

    • 用双引号括起来时,目录名称区分大小写。

    • 不能提供身份证明名称参数。

  • 对于 CSV、JSON 或 XML 输出,默认情况下,当生成的文件包含 10MB 数据时,会创建新输出文件。但是,如果结果数据少于 10MB,则可能有多个输出文件,具体取决于数据库服务以及 Autonomous Database 实例的 ECPU 数(如果数据库使用 OCPU,则为 OCPU)。

    CSV、JSON 或 XML 的默认输出文件块大小为 10MB。可以使用 format 参数 maxfilesize 选项更改此值。有关更多信息,请参见DBMS_CLOUD Package Format Options for EXPORT_DATA

  • 对于 Parquet 输出,每个生成的文件小于 128MB,可以生成多个输出文件。但是,如果结果数据少于 128MB,则可能有多个输出文件,具体取决于数据库服务以及 Autonomous Database 实例的 ECPU 数(如果数据库使用 OCPU,则为 OCPU)。

    format 参数 maxfilesize 选项不适用于 Parquet 文件。