Redshift复制命令中的嵌入式Newline字符问题



我们在源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)的目标场的长度,之后成功加载了所有数据。

最新更新