使用外部表将对象存储中的 CSV 中的选择性字段加载到 ADW

Load selective fields from CSV in object storage to ADW using external tables

我们可以使用外部 Table 仅将平面文件中的选择性列加载到 ADW 中吗?客户有一个生成的巨大平面文件,他们想要一种方法来查看是否有一种方法可以只将他们想要的列从文件中导入 ADW

到目前为止,这是我尝试过的:对象存储中的 CSV 文件有三列,我想在这里只拉出其中的两列:

            BEGIN  
   DBMS_CLOUD.CREATE_EXTERNAL_TABLE(   
      table_name =
            >
            'gentherm_canalyser5'
            ,   
      credential_name =
            >
            'DBCREDENTIAL_123'
            ,   
      file_uri_list =
            >
            'https://objectstorage.us-ashburn-1.oraclecloud.com/n/natdsepltfrmanalyticshrd1/b/TEST/o/123test_can.csv'
            ,
      format =
            > json_object(
            'type' value 'csv'
            , 'skipheaders' value '1'
            )
            , 
      field_list =
            > '"Time" decimal,
                     "dutyMax" decimal'
            ,  
      column_list =
            > 'time number,
                      dutymax number'
            )
            ;
   END
            ;
/ 

我一直收到这个错误:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-03025: For CSV format files, field Time is not delimited.  

任何指示,这是如何工作的?

创建外部 table 定义 CSV 文件中的所有列,然后仅 SELECT 您感兴趣的列。使用外部 table 定义,您不能假装内容是不在文件中。

因此假设您有一个您不想处理的附加尾随列 FOOBAR NUMBER,您的代码和处理过程如下所示:

BEGIN  
   DBMS_CLOUD.CREATE_EXTERNAL_TABLE(   
      table_name =
            >
            'gentherm_canalyser5'
            ,   
      credential_name =
            >
            'DBCREDENTIAL_123'
            ,   
      file_uri_list =
            >
            'https://objectstorage.us-ashburn-1.oraclecloud.com/n/natdsepltfrmanalyticshrd1/b/TEST/o/123test_can.csv'
            ,
      format =
            > json_object(
            'type' value 'csv'
            , 'skipheaders' value '1'
            )
            , 
      field_list =
            > '"Time" decimal,
                     "dutyMax" decimal'
            ,  
      column_list =
            > 'time number,
                      dutymax number, FOOBAR NUMBER'
            )
            ;
   END
            ;
/ 

..然后你只需做一个

SELECT time, dutyMax FROM gentherm_canalyser5;

.. 处理您感兴趣的列。