Redshift 复制语句丢失西班牙字符
Redshift copy statement losing spanish characters
我有一个 csv 文件,其中一列包含以下值:
Some words: camión, coche, moto
复制语句为:
COPY schema.table
FROM 's3://path/file.csv'
IAM_ROLE 'arn'
delimiter ',' IGNOREHEADER 1 FORMAT AS CSV QUOTE AS '"' ;
它失败了,因为它将单词 camión
替换为 cami..n
:
Some words: cami..n, coche, moto
所以,它超过了 DDL
定义的长度。
然后我尝试更改 copy
中的 encoding
:
COPY schema.table
FROM 's3://path/file.csv'
IAM_ROLE 'arn'
delimiter ',' IGNOREHEADER 1 ENCODING AS UTF16 FORMAT AS CSV QUOTE AS '"' ;
然后它引发:. Bad UTF16 hex sequence: 2255736572222C2252616E6B696E6720 6E616D65222C2254797065222C224D6F
有什么我遗漏的吗?在尝试使用其他编码时,我还更改了 csv to utf-16
中的编码:
csv = df.to_csv(index=False, header=True, quoting=csv_set.QUOTE_ALL, sep=",",
encoding="utf-16")
DDL 长度的问题是 Redshift 将 varchars 存储在多字节 UTF8 中,对于非 ascii 字符,它在 varchar 长度中占用超过一个字节。在这些情况下,函数 octet_length() 可用于查找比字符长度长的字符串的字节长度。在处理非 ascii 字符串时,需要调整 DDL 以考虑这些额外的字节。
源文件看起来也是 UTF8 格式,因此无法使用 UTF16 编码读取。
我有一个 csv 文件,其中一列包含以下值:
Some words: camión, coche, moto
复制语句为:
COPY schema.table
FROM 's3://path/file.csv'
IAM_ROLE 'arn'
delimiter ',' IGNOREHEADER 1 FORMAT AS CSV QUOTE AS '"' ;
它失败了,因为它将单词 camión
替换为 cami..n
:
Some words: cami..n, coche, moto
所以,它超过了 DDL
定义的长度。
然后我尝试更改 copy
中的 encoding
:
COPY schema.table
FROM 's3://path/file.csv'
IAM_ROLE 'arn'
delimiter ',' IGNOREHEADER 1 ENCODING AS UTF16 FORMAT AS CSV QUOTE AS '"' ;
然后它引发:. Bad UTF16 hex sequence: 2255736572222C2252616E6B696E6720 6E616D65222C2254797065222C224D6F
有什么我遗漏的吗?在尝试使用其他编码时,我还更改了 csv to utf-16
中的编码:
csv = df.to_csv(index=False, header=True, quoting=csv_set.QUOTE_ALL, sep=",",
encoding="utf-16")
DDL 长度的问题是 Redshift 将 varchars 存储在多字节 UTF8 中,对于非 ascii 字符,它在 varchar 长度中占用超过一个字节。在这些情况下,函数 octet_length() 可用于查找比字符长度长的字符串的字节长度。在处理非 ascii 字符串时,需要调整 DDL 以考虑这些额外的字节。
源文件看起来也是 UTF8 格式,因此无法使用 UTF16 编码读取。