Загружать выбранные поля из CSV в хранилище объектов в ADW с помощью внешних таблиц

Можно ли загружать в 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.  

Любые указатели, как это могло работать?

1 ответ

Создайте внешнюю таблицу, определяющую все столбцы в файле CSV, а затем ВЫБЕРИТЕ только те, которые вам интересны. С определением внешней таблицы вы не можете притворяться, что физически что-то не находится в файле.

Итак, если у вас есть дополнительный конечный столбец 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;

.. для обработки интересующих вас столбцов.

Другие вопросы по тегам