【发布时间】:2020-11-19 18:02:00
【问题描述】:
我已手动检查文件以确保没有超出长度。这一切都很好,但我还是把每个 varchar 的长度加倍了。
我添加了 TRUNCATECOLUMNS 参数:
TRUNCATECOLUMNS将列中的数据截断为适当的字符数,使其符合列规范。仅适用于具有 VARCHAR 或 CHAR 数据类型的列,以及大小不超过 4 MB 的行。
仍然出现此错误:Copy s3 to redshift: String length exceeds DDL length
COPY [table name]
FROM [s3 path]
iam_role [iam role]
FORMAT CSV
IGNOREHEADER 1
region 'us-west-2'
BLANKSASNULL
TRIMBLANKS
TRUNCATECOLUMNS
【问题讨论】:
-
如果字符串包含多字节字符,则需要比实际字符数更多的存储空间。您是否尝试将字段更改为
TEXT而不是特定的VARCHAR[n]长度? Redshift(作为 Postgres)可以很好地处理TEXT。 -
正如约翰所说,您应该检查输入中的多字节(非 ascii)字符。检查您的行大小是否不超过 4MB,因为这会否定 TRUNCATECOLUMNS 选项。从 stl_load_errors 发布该行可能会提供更多信息,因为这通常会提供有关导致问题的确切字段的更多信息 - 有时问题不是您认为的问题。
-
哦,我认为 TEXT 类型不会对您有所帮助,因为它是 Redshift 中 VARCHAR(256) 的别名。所以除非你的尺寸小于这个...docs.aws.amazon.com/redshift/latest/dg/…
-
只是一个注释,但是......问题是它自己的答案:只需 添加
TRUNCATECOLUMNS。
标签: amazon-web-services amazon-s3 import amazon-redshift