将 CSV 加载到 Redshift,缺少换行符:在位置 38 发现意外字符 0x76

Posted

技术标签:

【中文标题】将 CSV 加载到 Redshift,缺少换行符:在位置 38 发现意外字符 0x76【英文标题】:Loading CSV to Redshift, Missing newline: Unexpected character 0x76 found at location 38 【发布时间】:2017-06-16 07:21:10 【问题描述】:

我想将我的 csv 加载到 AWS Redshift, 文件内容为:

39334;sms|587b083b98420f9a11c414a9;verified;2017-04-07T05:45:14.479Z;2017-05-02T13:05:32.588Z;00f8a90d-518a-40a0-b663-c4070baf2459;1494012833;2017-05-05T15:33:53.990136-0400;None;2017-04-06T22:33:06-0700;47.451199;47.451199;no;yes;no;no;no;no;no;no;yes;yes;yes;yes;1;2.0.3.1;Optional('AT&T');iPhone;10.2.1;[Decimal('11'), Decimal('12')];Phone mount;Washington;CA337B1C-EEC9-4B0E-8A3C-F5DA959D47AB;Sun Jan 15 2017 05:27:33 GMT+0000 (UTC)**

我通过Python将以上内容写入csv:

with open(self.path + ".csv", "a") as myfile:
    file_writer = csv.writer(myfile)
    file_writer.writerow([x.strip() for x in line.split(';')])

然后我上传到 Amazon S3。之后我尝试将我的 CSV 文件从 S3 加载到 Redshift,我使用了复制命令:

copy table_name 'my_s3_location'
CREDENTIALS 'my_credential'
delimiter ',' region 'my_region';

在执行复制命令时,Redshift 会抛出如下错误:

缺少换行符:在位置 38 发现意外字符 0x76

我看不到第 38 个位置,我只有 34 列。

【问题讨论】:

指的是该行的第 38 个字符。您能否向我们展示 CSV 文件中显示的数据?此外,您应该在 COPY 命令中使用 CSV 参数(但它可能不会导致此问题)。 @JohnRotenstein 我已经发布了我的 csv 内容 【参考方案1】:

你可以试试

copy table_name 'my_s3_location'
from bucketlocation
CREDENTIALS xxxxxxxxx
delimiter ';'
removequotes
acceptinvchars;

【讨论】:

它被 ;或者,? 你能把你要复制数据的表的ddl复制到这里吗? 它不是由 ; 分隔的。在写入 csv 文件时,我使用 ; 好的,您能显示您正在导入的实际 CSV 吗?无论如何,这对我有用很多次,我通过脚本生成了 csv。使用 HxD 或类似编辑器打开文件,查找可能存在的 bom 字符。 99% 的时间它都对我有用。 当你说“它不工作”时,你是什么意思?会发生什么,需要多长时间,显示什么消息?除非您提供更多信息,否则我们很难为您提供帮助。

以上是关于将 CSV 加载到 Redshift,缺少换行符:在位置 38 发现意外字符 0x76的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 从 OS Windows 将 CSV 文件加载到 Amazon Redshift? [关闭]

如何在 Copy commd 中使用反斜杠字符将 s3 csv gz 文件加载到 Redshift

将 txt 文件复制到 Redshift

如何将 CSV 复制到缺少列的表中?

Redshift 中的 COPY CSV 命令是不是按标题中定义的顺序加载?

使用 Redshift 的 Ignoreheader CSV 文件