在Redshift COPY命令中指定行分隔符



我试图使用COPY命令将数据导入红移。不幸的是,数据没有被很好地清理,并且在一些数据中存在CRLF字符。这会导致错误,因为它认为这是一个新记录。

我已经使用了DELIMITER参数,但这是为每个记录中的字段设置分隔符。是否有类似的方法来指定分隔每个记录的字符?

No。红移期望n (0x0A)作为记录结束(EOF),不处理CRLF (0x0D 0x0A)。我相信它只是将CR视为另一段输入数据,但该信息不能插入到varchar列之外的任何内容中。如果你的行只有CR (0x0D),红移根本看不到EOF,并合并行。

您需要清理数据以删除CR字符。每个记录需要以换行符NL (0x0A)结束。(是的,LF和NL是相同的ascii码,只是在不同的应用程序中有不同的名称。)希望你可以删除CR,但我看到的数据只是CR作为EOF,你需要在这种情况下将这些更改为NL,而不仅仅是删除它们。

如果你的最后一列数据是一个varchar,那么你可以(我相信)只是剥离CR字符从这些字符串后,它被加载到Redshift。否则,您的数据需要在进入红移之前进行修复。

相关内容

  • 没有找到相关文章

最新更新