如何通过SQL Loader仅加载CSV指定列至数据库表?
解决SQL Loader仅加载指定列、忽略CSV多余数据的方法
你的问题出在CSV列数多于控制文件定义的列时,SQL Loader会自动把多余列的数据按顺序填充到表中未定义的列里。要解决这个问题,只需要在控制文件里用FILLER关键字标记多余的列,让SQL Loader读取但不加载这些数据即可。
具体修改方案
情况1:知道CSV多余列的数量
如果明确CSV里除了你需要的4列外还有N列,直接在控制文件末尾添加对应数量的FILLER定义:
Options (ERRORS=100000,SKIP=1) Load data Append Into table emp Fields terminated by ',' optionally enclosed by '"' Trailing Nullcols ( Emp_id char, Dept char, Class integer, Subclass integer, -- 多余列标记为FILLER,不加载到表中 extra_col1 FILLER char, extra_col2 FILLER char -- 有几个多余列就加几个 )
情况2:不确定多余列的数量
如果CSV的多余列数量不固定,用一个FILLER吸收所有剩余列的数据:
Options (ERRORS=100000,SKIP=1) Load data Append Into table emp Fields terminated by ',' optionally enclosed by '"' Trailing Nullcols ( Emp_id char, Dept char, Class integer, Subclass integer, -- 吸收所有剩余列的数据,不加载 remaining_data FILLER char )
原理说明
FILLER是SQL Loader的专用关键字,作用是声明某列仅用于读取CSV数据,但不会将其插入到目标表中。这样无论CSV有多少多余列,都会被这些FILLER定义“吃掉”,不会影响到emp表中原本需要保持为空的列。
内容的提问来源于stack exchange,提问作者Charan
相关产品推荐
相关产品推荐

