字符串包含无效或不受支持的UTF8代码点。错误的UTF8十六进制序列:

时间:2014-03-01 03:49:04

标签: amazon-redshift

队 我正在使用redshift版本*(8.0.2)。使用COPY命令加载数据时,出现错误: - “字符串包含无效或不支持的UTF8代码点,错误的UTF8十六进制序列:bf(错误3)”。 似乎COPY试图将UTF-8“bf”加载到VARCHAR字段中。根据Amazon redshift,此错误代码3定义如下:

error code3: 
The UTF-8 single-byte character is out of range. The starting byte must not be 254, 255
or any character between 128 and 191 (inclusive).

亚马逊推荐这个作为解决方案 - 我们需要用有效的UTF-8代码序列替换字符或删除字符。

你能帮我解决一下如何用有效的UTF-8代码替换字符吗?

当我在PG-ADMIN中检查数据库属性时,它将编码显示为UTF-8。

请指导我如何替换输入分隔文件中的字符。

...谢谢

3 个答案:

答案 0 :(得分:4)

听起来您的文件编码可能不是utf-8。您可以尝试我们有时使用的这种技术

cat myfile.tsv| iconv -c -f ISO-8859-1 -t utf8 > myfile_utf8.tsv

答案 1 :(得分:3)

在加载TPC-DS数据集进行实验时,我在RedShift中遇到了这个问题。

以下是我通过AWS找到的文档和论坛聊天内容:https://forums.aws.amazon.com/ann.jspa?annID=2090

以下是可用于解决数据转换错误的显式命令:http://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html#copy-acceptinvchars

您可以通过声明ACCEPTINVCHARS在COPY阶段明确替换无效的UTF-8字符或忽略它们。

试试这个:

copy table from 's3://my-bucket/my-path
credentials 'aws_iam_role=<your role arn>'
ACCEPTINVCHARS 
delimiter '|' region 'us-region-1';

Warnings:
Load into table 'table' completed, 500000 record(s) loaded successfully.
Load into table 'table' completed, 4510 record(s) were loaded with replacements made for ACCEPTINVCHARS. Check 'stl_replacements' system table for details.

0 rows affected
COPY executed successfully

Execution time: 33.51s

答案 2 :(得分:1)

对于许多将CSV加载到数据库中的人来说,他们是使用Excel从某人那里获取文件的,或者可以访问Excel。如果是这样,则可以通过以下方式快速解决此问题:

  1. 首先使用Save As将文件保存到Excel中,然后选择CSV UTF-8 (Comma Delimited) (*.csv)格式,方法是请求/培训那些为您提供使用此导出格式的文件的人。请注意,默认情况下,许多人使用CSV (Comma delimited) (*.csv)格式导出到csv,并且有所不同。
  2. 将csv加载到Excel中,然后立即另存为UTF-8 csv格式。

当然,它不适用于Excel无法使用的文件,即。大于一百万行,等等。然后我将使用mike_pdb的iconv建议