字符长度超过 DDL 长度

Posted

技术标签:

【中文标题】字符长度超过 DDL 长度【英文标题】:Char length exceeds DDL length 【发布时间】:2018-06-29 11:55:57 【问题描述】:

我正在尝试将数据从 S3 存储桶复制到 redshift,但是我收到 1204 错误代码“”。

copy table_name from '[data source]'
access_key_id '[access key]'
secret_access_key '[secret access key]'
region 'us-east-1'
null as 'NA'
delimiter ','
removequotes;

错误发生在第一行,它试图将状态缩写“GA”放入使用数据类型 char(2) 定义的 data_state 列中。当我查询 stl_load_errors 表时,我得到以下结果:

line_number  colname      col_length  type   raw_field_value  err_code  err_reason
1            data_state   2           char   GA               1204      Char length exceeds DDL length                                                                                                  

据我所知,不应该超过长度,因为它是两个字符,并且设置为 char(2)。有谁知道是什么原因造成的?

【问题讨论】:

【参考方案1】:

通过将数据类型更改为 char(3) 来让它工作,但仍然不确定为什么 char(2) 不能工作

【讨论】:

查看您的任何记录中是否有space\t 等数据 @RedBoy 我检查了但在我的数据集中没有找到类似的东西【参考方案2】:

我的也是这样做的,也用于状态列。 Redshift 默认 char 为 char(1) - 所以我必须指定 char(2) - 你确定它没有默认为 char(1),因为我这样做了

【讨论】:

你的答案好像在中途被截断了?【参考方案3】:

使用十六进制编辑器打开文件,或使用在线编辑器here,然后查看data_state 列中的GA 值。

如果它前面有三个点,像这样:

...GA

那么文件(或最初创建时)是UTF-8-BOM 而不仅仅是UTF-8

您可以以Notepad++ 之类的方式打开文件,然后转到顶部栏中的Encoding,然后选择Convert to UTF-8

【讨论】:

以上是关于字符长度超过 DDL 长度的主要内容,如果未能解决你的问题,请参考以下文章

字符串长度超过 Glue 中的 DDL 长度(python,pyspark)

js字符串转数字长度限制|超过长度有误差

BCryptPasswordEncoder 密码长度是不是限制超过 72 个字符?

cstring 限制字符长度

字符串的长度超过 maxJsonLength 属性上设置的值

ORA-01704 错误,插入长度超过 4000 个字符的字符串