SQL LDR默认字符最大长度限制问题
场景:
上游的文件导入系统报超过字段长度。
现象:
该字段有256个字节,而表的字段COL1长度为VARCHAR2(500),按理说不应该超长。
分析:
分析控制文件发现:
options(direct=true)
Load data
Append
into table XXX_BAT
FIELDS TERMINATED BY X'1B'
TRAILING NULLCOLS
(
......
COL1,
)
因为COL1的长度为500,超长的原因首先想到的是字符集问题。是否是文件中的中文是UTF8格式?
通过wc -c xxx.txt的结果为X1和wc -m xxx.txt的结果为X2
中文字符数(UTF8)=(X1-X2)/3
中文字符数(GBK)=(X1-X2)/2
计算出每个中文在文件中占有两个字节,是GBK格式,文件编码格式没问题。而X1=256个字节,Sqlldr中的字符字段的默认最大长度为255,而X1=256>255,所以报错。
结论:
该问题主要是因为导入文本中的字符超过了255个字符,超过了sqlldr默认导入字符的最大长度。
修改方法比较简单,在控制文件中COL1 CHAR(500), 提升默认字符的导入最大长度。这个问题本身不是很复杂,属于地雷型问题。
我们在使用sql ldr导入长文本的时候,不仅仅要扩大表的字段长度,也要注意控制文件中的默认长度。最好做好字段长度大于255的控制文件检查,以免踩雷。
数据分析咨询请扫描二维码