Redshift varchar太窄了

时间:2017-02-19 06:43:09

标签: amazon-web-services amazon-redshift varchar

我有一张桌子,我填充了来自文件的标签分隔数据,这些文件的编码似乎不是utf-8,如下所示:

CREATE TABLE tab (
    url varchar(2000),
    ...
);

COPY tab
FROM 's3://input.tsv'

复制完成后,我运行

SELECT
MAX(LEN(url))
FROM tab

返回1525。我想,由于我浪费了空间,我可能会使用varchar(2000)代替varchar(1525)将列调整近四分之一。但是既不重做COPY也不重新设置新表并插入已导入的数据。在这两种情况下,我都会

error:  Value too long for character type

为什么列不会保留这些值?

1 个答案:

答案 0 :(得分:5)

您的文件可能是多字节格式。

来自LEN Function documentation

  

LEN函数返回一个整数,表示输入字符串中的字符数。 LEN函数返回多字节字符串中的实际字符数,而不是字节数。例如,需要VARCHAR(12)列来存储三个四字节中文字符。对于同一个字符串,LEN函数将返回3。

由于Amazon Redshift使用的压缩方法,VARCHAR的额外大小不会浪费磁盘空间,但是当从磁盘读取块并将其解压缩到内存中时,它将浪费内存缓冲区空间。