sqlldr : 在单列中加载 csv 文件的多列

Posted

技术标签:

【中文标题】sqlldr : 在单列中加载 csv 文件的多列【英文标题】:sqlldr : Load Multiple columns of a csv file in a single column 【发布时间】:2014-09-03 19:06:23 【问题描述】:

我有一个可以包含多列的 CSV 文件。

举例说明记录如下。

3333,Y,ABC
2222,Y,PQR
1111,N,FFF

表格有 2 列

Column 1 (Number), Column 2 (varchar2(4000)).

我想将 CSV 中的第一个字段加载到表的第 1 列,并将文件的所有字段保留到第 2 列。如何实现?

【问题讨论】:

您是否真的尝试过编写任何代码来做到这一点? 【参考方案1】:

这是一种方法。

CREATE TABLE myt
(
   col1   NUMBER,
   col2   VARCHAR2 (200)
);

控制文件:

LOAD DATA
INFILE *
INSERT
INTO TABLE MYT
(
    COL1 terminated by ',',
    COL2 terminated by '\n' "REPLACE(:COL2,',')"
)
BEGINDATA
3333,Y,ABC
2222,Y,PQR
1111,N,FFF

您的第一列以逗号结尾。该行的其余部分被视为由换行符终止的单列。如果你想摆脱 第二列的逗号,使用替换功能。

SQL> select * from myt;

      COL1 COL2
---------- --------
      3333 YABC
      2222 YPQR
      1111 NFFF

【讨论】:

【参考方案2】:

为了争论,这里有另一种方法。使用“Eat A Peach”的设置,此方法将输入字段定义为 BOUNDFILLER,这意味着将它们视为 FILLER,但请记住它们以供以后用作 BIND 数据。然后使 COL2 等于输入字段 1 和 2 的串联:

LOAD DATA
INFILE *
INSERT
INTO TABLE MYT
fields terminated by ','
trailing nullcols
(
 COL1
,INPUTCOL2 BOUNDFILLER
,INPUTCOL3 BOUNDFILLER
,COL2 ":INPUTCOL2||:INPUTCOL3"
)
BEGINDATA
3333,Y,ABC
2222,Y,PQR
1111,N,FFF

【讨论】:

以上是关于sqlldr : 在单列中加载 csv 文件的多列的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 中加载 csv 文件

在 Spark 2.0 中加载压缩的 gzipped csv 文件

使用数据框在 Pandas 中加载 csv 文件

在 PIG 中加载 CSV 文件

在 PigLatin 中加载 csv 文件

使用scala在sql表中加载csv文件