从 S3 复制到 Redshift 不识别换行符

Posted

技术标签:

【中文标题】从 S3 复制到 Redshift 不识别换行符【英文标题】:COPY from S3 to Redshift not recognizing newline 【发布时间】:2015-06-29 19:38:12 【问题描述】:

我正在尝试从 S3 存储桶向 Redshift PostgreSQL 表运行 COPY 命令,但出现以下错误(在 stl_load_errors 中):

err_code: 1207 

err_reason: Invalid digit, Value '2', Pos 3, Type: Short 

raw_field_value: 
2
2/28/15

该文件有 2 行:

2/28/15,手机,android,0,1,3,2,2

2/28/15,手机,Android,0,4,1,2,2

CREATE TABLE 代码是:

create table aggregate_table( date date, variable varchar(15),source varchar(15), prepaid smallint, direction smallint, total smallint, carrier smallint, carrier_group smallint)

似乎换行符未被识别,并试图将第一行的结尾和第二行的开头作为一个值读取。我尝试过使用delimiter ','escape,但似乎没有任何效果。

感谢您的帮助!

编辑:这是 COPY 命令(我也试过用 escape 结尾)

COPY aggregate_table FROM 's3://path_to_file.csv'  CREDENTIALS 'aws_access_key_id=XXXX;aws_secret_access_key=XXXXX'  CSV delimiter ','  DATEFORMAT AS 'MM/DD/YY'; 

【问题讨论】:

【参考方案1】:

您需要将DATEFORMAT AS 'MM/DD/YY' 添加到您的COPY 命令中。否则 redshift 无法正确解析第一列中的日期,正如它所期望的 YYYY-MM-DD

请参阅http://docs.aws.amazon.com/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html 了解更多详情。

【讨论】:

感谢@quardome,但我遇到了同样的错误 我相信您也需要添加一个 CSV 选项。 我也试过了,不幸的是遇到了同样的错误 @zebrainatree,我刚刚验证它对我来说端到端有效(创建表,上传到 s3,复制)。全部使用您上面的确切命令。【参考方案2】:

@quarterdome 感谢您与我一起解决这个问题!在你指出它有效之后,我又从头到尾尝试了一遍。事实证明,当我保存没有 .csv 扩展名的文件时,它起作用了! -

【讨论】:

以上是关于从 S3 复制到 Redshift 不识别换行符的主要内容,如果未能解决你的问题,请参考以下文章

将 txt 文件复制到 Redshift

从 S3 接入点复制到 Redshift

将 csv 文件从 s3 复制到 redshift 的问题

从 s3 复制到 redshift

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?

将文件(带有特定后缀)从 S3 复制到 Redshift