我们在源S3文件的字段中有15个嵌入式新线字符。RedShift目标表中的字段大小为VARCHAR(5096)
。源文件中的字段长度为5089
字节。我们正在根据copy
命令的逃生选项要求使用Backslash 的15个新线字符中的每个新线字符。我们对Escape选项的期望是,在将目标加载到Redshift之前,我们已插入了我们已插入的后斜线
。但是,当我们将
copy
命令与逃生选项使用时,我们正在获得
err_code:1204-字符串长度超过ddl长度。"
是否有一种方法,在RedShift中未计数添加的后斜线字符?
注意:当我们将文件中的上述源字段截断为4000
字节并在Newline字符之前插入Backslash 时,带有Escape选项的
copy
命令成功地将该字段成功地加载了RedShift。另外,后斜切字符未按预期的红移加载。
您冷延长了varchar长度以允许更多字符。
或,您可以使用TRUNCATECOLUMNS
选项尽可能多地加载。
我们的理解W.R.T上述问题是不正确的。我们插入的后斜切" "并未导致错误" err_code:1204-字符串长度超过ddl长度。"。带有复制命令的"逃生"选项实际上并未计算插入的后斜线字符朝目标限制计算,并且还正确地将其从加载值中删除。
面临的实际问题是,我们试图加载的某些字符是多型UTF8字符。由于,我们错误地认为它们是长度为1字节,因此目标场的大小被证明是不够的。我们增加了从Varchar(5096)到Varchar(7096)的目标场的长度,之后成功加载了所有数据。