在源S3文件的字段中有15个嵌入的换行符。Redshift中目标表中的字段大小为VARCHAR(5096)。源文件中的字段长度为5089字节。根据\命令的转义选项的要求,我们使用反斜杠\对15个换行符中的每个字符进行转义。我们对转义选项的期望是,在红移中加载目标之前,我们在每个换行符之前插入的反斜杠\将被忽略。但是,当我们将copy命令与转义选项一起使用时
err_code:1204 -字符串长度超过DDL长度。“
是否有一种方式不将添加的反斜杠\字符计算为红移中的目标列加载?
注意:当我们将文件中的上述源字段截断为4000字节并在换行符前面插入反斜杠\时,带转义选项的copy命令成功地在Redshift中加载了该字段。另外,反斜杠\字符没有像预期的那样加载在Redshift中。
发布于 2017-03-13 16:36:51
我们对上述问题的理解是不正确的。我们插入的反斜杠"\“不会导致错误"err_code:1204 -字符串长度超过DDL长度”。使用copy命令的“转义”选项实际上没有将插入的反斜杠字符计算到目标限制,并且也正确地将它们从加载的值中删除。
我们面临的实际问题是,我们试图加载的一些字符是多字节UTF8字符。由于我们错误地假设它们的长度为1字节,因此目标字段的大小被证明是不够的。我们将目标字段的长度从varchar(5096)增加到varchar(7096),然后成功地加载了所有数据。
发布于 2017-03-07 00:36:34
冷扩展VARCHAR长度以允许更多字符。
或者,您可以使用TRUNCATECOLUMNS选项尽可能多地加载,而不会产生错误。
https://stackoverflow.com/questions/42631796
复制相似问题