【问题标题】:Skipping columns which loading data into an external table跳过将数据加载到外部表中的列
【发布时间】:2016-05-19 11:17:34
【问题描述】:

这是我创建的外部表:

CREATE TABLE emp_load 
(
  "ESN_NO" VARCHAR2 (200), 
  "MAKER" VARCHAR2 (30), 
  "HANDSET" VARCHAR2 (20), 
  "MODEL_NO" VARCHAR2 (20), 
  "OMH_TTSL_FLAG" VARCHAR2 (10), 
  "OFFER" VARCHAR2 (100), 
  "STATUS" VARCHAR2 (20), 
  "STATUS_UPDATED_DATE" DATE
) ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER DEFAULT DIRECTORY "EXT_TAB_DIR" ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE skip 1
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    missing FIELD VALUES are NULL
    ) LOCATION ('BAU.csv')
) ;                         

BAU.csv文件的示例内容

ESN No          Make    Model   RI_value
A10000428A5348  Lava    C180    OFFER14
A10000428A5349  Lava    C180    OFFER14
A10000428A534A  Lava    C180    OFFER14
A10000428A534B  Lava    C180    OFFER14

它工作正常,但数据没有出现在我需要的列中;我希望列 handset 为空,但当前文件中的 model 值被加载到 handset 列中。所以我目前得到:

ESN_NO          MAKER  HANDSET  MODEL_NO  OMH_TTSL_FLAG  OFFER  STATUS  STATUS_UPDATED_DATE  
A10000428A5348  Lava   C180     OFFER14                                                      
A10000428A5349  Lava   C180     OFFER14                                                      
A10000428A534A  Lava   C180     OFFER14                                                      
A10000428A534B  Lava   C180     OFFER14                                                      

我希望跳过handset 列并将model 插入model_no;和omh_ttsl_flag 应被跳过,文件中的ri_value 应插入offer。所以我想结束的是:

ESN_NO          MAKER  HANDSET  MODEL_NO  OMH_TTSL_FLAG  OFFER    STATUS  STATUS_UPDATED_DATE  
A10000428A5348  Lava            C180                     OFFER14                               
A10000428A5349  Lava            C180                     OFFER14                               
A10000428A534A  Lava            C180                     OFFER14                               
A10000428A534B  Lava            C180                     OFFER14                               

如何在将数据加载到外部表时跳过这些列?

【问题讨论】:

  • @PravinS 你是怎么编辑的
  • 大概您确实需要表格具有该结构,所有这些列并按该顺序排列;您不能仅使用映射到文件值的四列来创建表吗?还是在您从文件中获取的列之后将您留空的所有列都留空?
  • 另外请检查我是否正确解释了您当前拥有的内容和您想要的内容,并且我对您的问题所做的编辑是正确的。

标签: oracle external-tables


【解决方案1】:

您可以通过将文件中的字段指定为fields 子句的一部分并指定不与the column transforms clause 一起出现的字段来执行此操作,例如:

COLUMN TRANSFORMS ("HANDSET" FROM NULL, "OMH_TTSL_FLAG" FROM NULL)

所以你的陈述变成:

CREATE TABLE emp_load 
(
  "ESN_NO" VARCHAR2 (200), 
  "MAKER" VARCHAR2 (30), 
  "HANDSET" VARCHAR2 (20), 
  "MODEL_NO" VARCHAR2 (20), 
  "OMH_TTSL_FLAG" VARCHAR2 (10), 
  "OFFER" VARCHAR2 (100), 
  "STATUS" VARCHAR2 (20), 
  "STATUS_UPDATED_DATE" DATE
)
ORGANIZATION EXTERNAL
(
  TYPE ORACLE_LOADER DEFAULT DIRECTORY "EXT_TAB_DIR" ACCESS PARAMETERS
  (
    RECORDS DELIMITED BY NEWLINE skip 1
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    MISSING FIELD VALUES ARE NULL
    (
      "ESN_NO" CHAR (200), 
      "MAKER" CHAR (30), 
      "MODEL_NO" CHAR (20), 
      "OFFER" CHAR (100)
    )
    COLUMN TRANSFORMS
    (
      "HANDSET" FROM NULL,
      "OMH_TTSL_FLAG" FROM NULL,
      "STATUS" FROM NULL,
      "STATUS_UPDATED_DATE" FROM NULL
    )
  )
  LOCATION ('BAU.csv')
) ;  

我已经包含了另外两列,这不是必需的,但有助于记录您期望看到的内容。

将您的示例数据转换为 CSV 加载为:

set sqlformat ansiconsole
column esn_no format a20
select * from emp_load;

ESN_NO          MAKER  HANDSET  MODEL_NO  OMH_TTSL_FLAG  OFFER    STATUS  STATUS_UPDATED_DATE  
A10000428A5348  Lava            C180                     OFFER14                               
A10000428A5349  Lava            C180                     OFFER14                               
A10000428A534A  Lava            C180                     OFFER14                               
A10000428A534B  Lava            C180                     OFFER14                               

【讨论】:

    【解决方案2】:
    insert into emp_load (ESN_NO,MAKER,MODEL_NO,OFFER)
    values ('A10000428A5348','Lava','Lava','OFFER14)
    

    默认为 null ,因此所有其他列将收到 null

    【讨论】:

    • 这是一个外部表,我想跳过一些列,所以我需要在 create 语句中更改它,我需要这些更改
    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多